内容


在 Rational Application Developer V7.0 中使用 J2C 工具生成一个 J2C bean

Comments

介绍

IBM® Rational® Application Developer V7.0 为许多应用开发软件在用户体验方面做出了实质性的改进,包括 Java™ 2 Platform、 Enterprise Edition (J2EE™) Connector (J2C) 工具包。这篇文章将着重强调其中的一些改进,在论述如何改进的时候,作为一个 J2EE 开发人员,您可以利用 Rational Application Developer V7.0 来产生一个拥有由 IBM® IMS™ (Information Management System) 后端提供的功能访问权的 J2C bean。

在当前服务驱动业务应用软件的世界里,确保企业信息系统 (EIS) 的功能性能够很容易地被各种复杂业务的生态系统的组件访问仍然十分重要。为了演示这样的服务驱动访问 EIS 的功能性如何来实现,这篇文章将向您展示如何通过一个 J2C bean 创建一个访问 IMS 功能的 Web 服务。

必要的安装

以“动手实践”的方式来完成这篇文章,您应该有以下的安装:

  • 带有 J2C 工具和 IBM® WebSphere® Application Server V6.1 的 Rational Application Developer V7.0 必须安装在这个开发人员的机器上
  • PhoneBook IMS transaction (IVTNO) 是 Installation Verification 程序的一部分,与您的 IMS 绑定在一起。
  • 这个 COBOL 样例程序要保存在您的文件系统中--参见 下载 部分。

场景描述

这篇文章假定了以下的场景:您有一个运行在 IMS 上的 Phonebook 程序。您想通过 Web 服务展示这个程序的功能。然而,您有一个要求,输入到您的应用软件的参数不仅仅是后端系统操作需要的输入数据,而且还要有 IMS 交互特性的最大 有效时间
这篇文章将通过以下的步骤向您展示这个方案如何实现:

  1. 产生与 COBOL 输入和输出数据构成相对应的 Data Binding 类。
  2. 产生一个可以访问 IMS 的 J2C bean 框架。
  3. 创建一个 J2C bean 方法,负责在调用后端的 IMS 的 PhoneBook 操作 。
  4. 创建一个 Web 服务来揭示由被产生的 J2C bean 提供的功能性。
  5. 用 Web 服务资源管理器检测创建的 Web 服务。

任务1:产生与 COBOL 输入和输出数据构成相对应的 Data Binding 类

Data 捆绑类是 EIS 系统功能性所需的一个关键的工件。在这种情况下,您在后端拥有 IMS ,而 PhoneBook 应用软件在其上运行。这个应用软件期望有一定的输入数据,并产生一定的输出数据。可是不易处理的问题是,应用软件期望这个数据结构用 COBOL 语言来定义。

无论如何,一个运行在 Java 领域的 J2C bean 期望所有的数据都使用 Java 类 进行说明。因此,您需要产生一个 COBOL 数据结构的 Java 表示法,它将在访问 IMS 应用软件的功能性时有所用处。鉴于这篇文章的目的,您将要产生一个运行在 IMS 上的 PhoneBook 应用软件的 Data Binding 类。

要实现这个操作,您需要按照以下的步骤来进行。

  1. 点击 New > Other > J2C > CICS/IMS Java Data Binding wizard, 如图1所示。
    图1. Data Binding 向导启动
    Data Binding wizard launch
    Data Binding wizard launch

    在这个 Data Binding 向导的首页,您要为这个您想要映射到 Java 的数据结构选择后端系统语言。
    目前可用的映射是:

    • COBOL to Java,它允许您创建一个用 COBOL 语言定义的数据结构的 Java 表示法。
    • COBOL MPO to Java,它类似于 COBOL to Java,但是允许有多种可能输出的 COBOL 数据结构的使用。
    • PLI to Java,它可以让您创建一个用 PL1 语言定义的数据结构的 Java 表示法。
    • PLI MPO to Java,它类似于PLI to Java,但是允许有多种可能输出的 PL1 数据结构的使用。
    • C to Java,允许您创建一个用 C 语言定义的数据结构的 Java 表示法。
  2. 鉴于对您的场景的考虑,您要选择 COBOL to Java 的映射,如图2所示。
    还要选择提供这篇文章的文件系统上的 COBOL 文件,并点击 Next
    图2. Data Binding 向导中的映射选择
    Mapping selection in Data Binding wizard
    Mapping selection in Data Binding wizard
  3. 在 Data Binding 向导的第二页,您需要对有 COBOL 程序正在运行的后端系统(在您的例子中,是 IMS)的属性参数进行指定。由于您的 IMS 机器运行的是 IBM® z/OS®,您可以选择它作为目标平台,如图3所示。
    图3.在向导中选择后端系统的具体属性
    Setting backend system specific properties in Data Binding wizard
    Setting backend system specific properties in Data Binding wizard
  4. 一旦选择了后端系统具体参数,您就该选择将映射成 Java 表示法的数据结构。可以这样操作,点击 Query,选择 INPUT-MSG 数据结构,然后点击 Next,如图4所示。
    图4.选择想要的数据结构
    Select desired data structure
    Select desired data structure
  5. 在这个 Data Binding 向导的最后一页,您需要指定您想要产生 INPUTMSG java 类的项目和包,它代表在 Java 领域的 INPUT_MSG COBOL 数据结构。在这个例子中,在 IMSJavaProject 项目中产生这个类,如图5所示。
    图5.指定代码生成的目标文件
    Specifying code gen destination
    Specifying code gen destination

    这时,您有一个代表 IMS 程序输入数据结构的 Java 类。然而,您还需要产生一个代表 IMS 程序输出数据结构的类。要实现这个操作,可以重复前面的5个步骤,但是要除去这个步骤,即您将 OUTPUT-MSG 指定为想要的 COBOL 数据结构,并产生 OUTPUTMSG 类到您产生 INPUTMSG 类的相同的项目和包中。

完成这些步骤以后,您将有下面两个文件夹,在 IMSJavaProject 中,如图6所示。

图6. IMS Java 项目结构
IMS Java project structure
IMS Java project structure

这时您就快要完成任务1了。您现在可以在您的工作空间中获得 Java 类,在您的工作空间中规定了在 IMS 后端运行 PhoneBook 操作所必需的数据结构的 Java 表示。现在您需要编写一些知道如何关联到 IMS 的代码。任务2将告诉您如何操作。

任务 2:生成能够访问 IMS 的 J2C bean 的代码框架

J2C bean 可以完成的最重要的任务之一是知道如何能够与特定的后端系统相连接。

  1. 调用图7中所示的 J2C Java Bean 向导并且观察为了生成一个 J2C bean 的框架代码您需要提供何种信息。
    图7.新建 J2C 向导
    New J2C Wizard
    New J2C Wizard

    在向导的第一页中,您将看到一个可以用于生成 J2C bean 适配器的清单。Rational Application Developer V7.0 加载了 2 个 IMS 和 2 个 CICS 适配器(J2C Architecture 规范 的1.0 和 1.5 版本)。鉴于这篇文章的目的,您将使用 IMS 适配器(J2C 规范的 1.5 版本),IMS 适配器将与 Rational Application Developer V7.0 一起加载。
  2. 当您选择 IMS 适配器时,如图 8 所示,您将看到一个生成代码方案的图形表示。
    J2C 向导产生 J2C bean,这样,通过特定的 IMS 适配器就可以获得足够的信息以访问 IMS 。此外,您稍后也可以利用生成的 J2C bean 而产生 J2EE 工件,就像产生 Session Enterprise JavaBeans™ (EJB™)、 JavaServer Pages™ (JSP™) 和 Web 服务一样。稍后在这篇文章中,您将创建一个利用生成了的 J2C bean 的 Web 服务器。
    图8.选择 IMS 适配器
    Select IMS adapter
    Select IMS adapter
  3. 如果所选择的资源适配器现在还不在工作空间中,在您单击 Next 按钮以后它将被导入到现有的工作空间中,在导入的过程中您可能看到图9中所示的过程指示器。
    图9.导入 IMS 适配器
    Importing the IMS adapter
    Importing the IMS adapter

在向导的下一页中,您将知道如何输入即将用于与使用 J2C 资源适配器的下面的 EIS 系统相连接的信息。此信息是后端系统的细节。以下是能够指定连接信息的三种途径:

  • 提供受管的连接信息
  • 提供非受管的连接信息
  • 提供两者的合并

三者间有什么不同之处呢?

  • 受管的连接 意味着应用服务器控制管理着(三层模型)的生命周期。受管的连接通过在应用服务器上定义的受管的连接工厂的 Java™ Naming 和 Directory Interface (JNDI) 名称而被定义。受管的连接工厂是 EIS 特定的适配器,而且其中包括了所有被需要的连接信息。受管的连接意味着在服务器上直接安装资源适配器,此外,受管的连接工厂的 JNDI 名字对于安装于应用服务器上的所有 EARs (计划应用档案文件)来说是可见的。
  • 非受管的连接 意味着一个两层模型,在模型中应用和 EIS 直接沟通并且控制其自身的所有连接。因此,在此设置中的所有连接的信息都被保存到应用当中。在一个 J2C bean 案例中,这意味着在生成的 J2C bean 中所有的连接信息都被贴上 doclet 标志而进行区分。
  • 这些方法的 合并 意味着客户将首先试着从使用所提供的 JNDI 名的服务器中读取一个受管的连接工厂,如果这样做不能成功,它将使用非受管情况下所定义的信息。

开发 J2C 的最好练习包括使用一个受管的连接,因为它可以让您掌控应用服务器的能力并且可以让您开发复杂的多层系统。此外它还提供了更好的可再次利用的资源,因为服务器上定义的连接工厂也可以被用于其他的应用中。

J2C 工具提供了便利的方法以定义一个服务器上新的(或者选择一个已经存在的)受管的连接工厂

  1. 您指定您所想要创建的受管的连接工厂的 JNDI 资源名字,并且单击 New,如图10和图11所示。
    图10.创建一个新的受管的连接工厂
    Create a new managed connection factory
    Create a new managed connection factory

    正如前所述,一个受管的连接暗示着相应的资源适配器以单一模式安装在服务器上(换言之,对于安装于此服务器上的所有 EARs 它都是可见的)。如果资源适配器没有安装在您所定义的服务器实例上,那么 J2C 在创建受管的连接工厂的过程中将自动地在服务器上安装一个资源适配器。

    图11.选择服务器实例
    Select server instance
    Select server instance

    一旦服务器实例被定义,您就必须定义为了能够成功地与您的IMS 机器相连接所必需的 IMS 属性的值。

  2. 当您单击 Finish 按钮之后 J2C 工具将试着在服务器实例上创建定义了的受管的连接工厂,如图12所示。

    如果被选择的 WebSphere v6.1 实例已经被启动,受管的连接工厂将会被立即创建。如果服务器没有被启动,受管的连接工厂将被延缓至服务器的下一次启动和它的配置信息被再次发布。当服务器被要求启动时,和先前的 Rational Application Developer 中的 J2C 工具版本相比较而言,这是一个重要的可用性方面的性能改进。

    图12 .创建受管的连接工厂
    Creating managed connection factory
    Creating managed connection factory
  3. 现在您准备着手进行 J2C 向导的下一页,在这里您需要定义生成 J2C bean 代码以及 J2C bean 实现和接口文件真实的名字和其中的项目和包。

    为了这篇文章的目的,在已经生成 Data Binding 类的相同的项目中您将生成 J2C bean。如果您使用如图13中所示的名字那是最好不过的了。在图13中,在后面的文章中使用的命名的约定是一致的。

    图13. J2C bean 的 Java 属性
    Java properties of J2C bean
    Java properties of J2C bean
  4. 当您单击 Finish后,J2C 向导将生成可以与 IMS 相连接的代码。让我们看看这些信息是如何在生成的 J2C bean 中呈现出来的。如果您打开生成的 J2C bean,您将看到在代码中被贴以 doclet 标志的受管的连接工厂的 JNDI 名字。
    图14 .doclet 标签中的 JNDI 名字
    JNDI name in the doclet tag
    JNDI name in the doclet tag

    点击放大

  1. 向下滚动您也将看到 doclet 注释的构造程序,doclet 注释的构造程序使用了以 doclet 标志定义的信息以创建负责与 IMS 连接的代码片断,如图15所示。
    图15.生成的代码中的 JNDI 名字
    JNDI name in the generated code
    JNDI name in the generated code

    点击放大

  2. 现在,启动在您创建受管的连接工厂时所定义的 WebSphere v6.1 服务器的实例,并且打开此服务器的 Administration Console ,您将可以看到定义于此处的正确的受管的连接工厂。
    图16. 在服务器管理控制台中的 JNDI 名字
    JNDI name in server administration console
    JNDI name in server administration console

    点击放大

在这一点上,您拥有知道如何与 IMS 相连接的 J2C bean ,您还拥有代表使得 PhoneBook IMS 应用可运行的所必需的代码的 Data Binding 类。在下一个任务中,您将可以看到您能够在 J2C bean 中定义 Java 方法,这些方法负责调用运行在 IMS 上的 PhoneBook 操作。

任务 3:创建用于调用运行在后端系统上的 PhoneBook 操作的 J2C bean 方法

  1. 为了在 J2C bean 上增加一个新的方法,打开 J2C bean 的实现 Java 类,在 Java 类的源代码中单击任何一处,并且选择 Source > Add Method to J2C bean,如图17所示。
    增加 J2C 方法的另外一个途径是使用来自于 Snippets 视图的相应 J2C 片断
    图17.从上下文菜单中增加一个新的 J2C 方法
    Add a new J2C method from the context menu
    Add a new J2C method from the context menu
  2. 一旦 New Java Method 对话框出现,单击 Add 以增加一个新的方法,如图18所示。
    图18.新建 J2C 方法对话框
    New J2C method dialog
    New J2C method dialog
  3. 有很多东西您需要指定以定义一个对应于 EIS 系统后端操作的 Java 方法。首先,您需要指定方法的名字,如图19所示。
    图19. 新建 J2C 方法的名字
    New J2C method name
    New J2C method name
  4. 其次,您需要指定方法的输入和输出类型。这些类型是您在任务 1 中创建的 Data Binding 类型。因此,您只需要使用 Browse 按钮以选择这些类,如图20所示。
    图20.为了新的 J2C java 方法浏览输入和输出类型
    Browse for input and output types for the new J2C java method
    Browse for input and output types for the new J2C java method
  5. 一旦您指定了输入和输出类型,单击 Next 按钮。
  6. 在向导的这一页上,您可以指定交互和连接说明属性,以及 EIS 功能的执行,这些属性是您想要作为 J2C bean 中的业务方法的参数。为了这篇文章的目的,选择揭示 executionTimeout 交互说明属性,如图21所示。
    图21.新建方法
    New method
    New method

    当您选择了相应的属性,您就能看到这一页顶端的方法签名的变化。与以前的版本相比,通过 UI 指定这个信息的能力只是 Rational Application Developer V7.0 的 J2C 工具中众多改进的其中之一。

    注意 New Java Method 对话框中 UI 域相应的 executionTimeout 属性是隐藏的。这是因为这个交互属性的固定编码值现在不能被提供,这个值是通过 Java 方法的参数提供的。

  7. 鉴于这篇文章的目的,只为 J2C bean 定义了一个业务方法。因此,您可以点击 New Java Method 对话框中的 Finish
    图22. 新建方法
    New method
    New method
  8. 如果您打开 J2C bean 实现文件,您将看到图23中显示的新方法。注意这个消息的签名与 New Method 对话框中描述的一样。
    图23.新建方法
    New method
    New method

点击放大

这时您就拥有了一个能够访问 IMS 和获取 PhoneBook 条目功能的 J2C bean。
下一个任务显示了您能怎样通过 Web 服务来揭示这些功能。

任务 4:创建一个 Web 服务来揭示由产生的 J2C bean 指定的功能

在仔细检查这个任务中的具体步骤前,如果还没启动 WebSphere v6.1 服务器, 那么先启动它。

J2C 工具提供了产生这种可部署工件的简单方法,像 WebServices、JSPs 和 Session beans,所有这些都可以用来测试 J2C bean 功能。鉴于这篇文章的目的,您将产生一个在 J2C bean 使用的整个过程中能够访问 PhoneBook 应用软件的 Web 服务。

  1. 从 Select a wizard 屏幕中的 J2C 目录下选择 Web Page,Web Service,或者 EJB from J2C bean 向导,如图24所示。
    图24.打开 J2C 开发向导
    Open J2C deployment wizard
    Open J2C deployment wizard
  2. 在这个向导的第一页,您需要确定您想要为哪个 J2C bean 产生的可部署工件,如图25所示。
    图25.选择 J2C bean 来产生可部署的工件
    Select J2C bean to generate the deployment artifacts
    Select J2C bean to generate the deployment artifacts
  3. 在下一页,选择创建一个 Web 服务,如图26所示。
    图26.选择产生 Web 服务
    Select to generate the Web service
    Select to generate the Web service

在下一页您要确定(或者创建一个新的)Dynamic Web 项目,在这个项目中将会产生这个 Web 服务。
利用资源引用(Resource References) 来访问定义在这个服务器上的资源也是很明智的选择。通过使用资源引用您可以确保在您的代码中,资源的真正 JNDI 名称并不是固定编码的。资源引用定义在您的应用软件的部署描述符中,并且根据您计划部署应用到哪台服务器来更改指向不同的“真正”资源,。如果您在这一页的向导中确定了这些资源的名称,J2C 工具将会自动为我们创建这些资源引用并更新应用软件描述符。

  1. 通过点击 Finish ,您就可以创建一个带有默认设置的 Web 服务,如图27所示。
    注意: 如果您想创建一个带有非默认设置的 Web 服务,可以使用 Web Service Tools 中的 Web Services 向导, 利用这套工具来产生一个自底向上的 Web 服务(从 Java Bean 生成 Web Service)。
    图27.创建 Web Service
    Generate the Web Service
    Generate the Web Service
  2. 查看这个 Web 项目的内容,您将看到 Web 服务工件在那里产生,如图28所示。
    图28.这个 Web 项目中的 Web 服务工件
    Web Service artifacts in the Web project

任务5将显示如何测试您创建的 Web 服务

任务 5:利用 Web Services 资源管理器测试这个创建的 Web 服务

现在您可以利用资源管理器测试这个在 WebSphere 6.1 服务器上创建的 Web 服务,如图29所示。

  1. 首先,您要部署一个包含您的 Web 项目的 EAR 到 WebSphere 6.1 Server,如图29所示。
    图29.添加 EAR 到服务器上
    Add EAR to the server
    Add EAR to the server
  2. 现在,右键点击这个与创建的 Web 服务相对应的 wsdl 文件,然后选择 Web Services > Test with Web Services Explorer,如图30所示。
    图30.用 Web Service 资源管理器进行测试
    Test with Web Service explorer
    Test with Web Service explorer
  3. 在 Web Service 资源管理器中,指定并运行 runPhoneBook 方法,如图31所示。
    图31.测试 runPhoneBook 方法
    Test the runPhoneBook method
    Test the runPhoneBook method

    点击放大

  4. 接下来,指定这个方法的如图 32 所示的输入。
    注意: 为这个 executionTimeout 属性指定 1000 毫秒作为它的值。这将为您的系统提供足够的时间来执行 PhoneBook 的操作。
    图32.为这个方法的调用指定适当的参数
    Specify the proper parameters for method invocation
    Specify the proper parameters for method invocation
  5. 您将得到一个类似与图33显示的应答。
    图33.新建方法
    New method
    New method

    这证明您的程序在正常工作。您在 IMS 上从 PhoneBook 应用软件中获得了正确的数据。

    您还可以确保后端系统事实上使用的是您在输入上指定的 myExecutionTimeout 值。

  6. 这样操作,设置 myExecutionTimeout 值为 1。 您的程序处理很可能花费不止一毫秒的时间来运行,因此您就会得到异常情况。现在再次运行资源管理器,您将在结果画面中看到一些与图34类似的情况。这意味着异常情况发生了。
    图34.新建方法
    New method
    New method
  7. 如果您选择查看原始信息,您将在应答部分看到一个与列表1中十分相似的异常情况。这个异常情况表明这个系统没有能够在一毫秒中完成这次执行。
列表1.异常情况
javax.resource.spi.EISSystemException: ICO0081E: 
   com.ibm.connector2.ims.ico.IMSTCPIPManagedConnection@
     1b521b52.processOutputOTMAMsg(byte[], 
IMSInteractionSpec, int) error. Execution timeout has occurred for this interaction. 
The executionTimeout value specified was [1] milliseconds.  
The value used by IMS Connect was [10] milliseconds.

这意味着您拥有一个完全功能的 Web 服务,它不仅可以调用运行在后端 IMS 上的功能,还可以传递对应于不同 IMS 交互属性的值。

总结

这篇文中向您展示了由 Rational Application Developer V7.0 提供的 J2C 工具如何能够被成功地利用,快速创建一个能够访问后端 IMS 功能性的 J2C bean。它还展示了这种功能性如何通过 Web 服务机制快速的揭示给其它应用软件和业务过程。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational, Web development
ArticleID=237414
ArticleTitle=在 Rational Application Developer V7.0 中使用 J2C 工具生成一个 J2C bean
publish-date=06292007