内容


使用 Rational Application Developer V7 中的 J2C Ant 脚本

定制并运行 J2C Session Recording Ant 脚本的技巧

Comments

引言

本文将说明如何定制 Rational Application Developer V7 J2EE Connector (J2C) Tools 所创建的 Ant 脚本。

文中提供不同的 Ant 脚本实例,从根据 COBOL 源生成数据绑定,到生成完整的 J2C bean 访问 CICS/IMS 事务。本文还说明了如何从命令行运行 Ant 脚本的方法。

Ant 是用于构建并自动化过程的强大开发工具。通过使用 IBM Rational Application Developer V7 中的一些核心的 Ant 任务和一些定制的 J2C Ant 任务,您可以为 CICS/IMS 创建完整的 Java™ 2 Platform,Enterprise Edition (J2EE™ platform) Connector 架构 bean。

使用 Ant 来生成 J2C bean 和数据绑定 bean 的好处包括:

  • 灵活性:如果后端数据的结构经常变更,那么为固有数据类型的每个修改都重新创建数据绑定 bean 是冗长且容易出错的。利用 J2C Ant 脚本,您可以可靠地重新生成数据绑定 bean,且知道将应用与您第一次使用 J2C 向导时一样的选项。
  • 可重复性:人的错误是不可避免的。选择一个错误的 GUI 中的选项,可能会导致整个应用程序失败。此外,调试不总是容易做到的,特别是在那些选项不明确地出现在所生成的工件中时。使用 Ant 脚本,每个选项都明确地写在文件中。如果您有大量的类似固有结构,那么您可以仅仅通过更新 Ant 文件中的一些字段来重复代码生成,从而对每个结构使用相同的选项。
  • 可维护性:对 Ant 脚本应用源控制比对所生成的工件更容易,或者比对用于生成应用程序的所编制的过程更容易。

需求

本文假设您已经安装了 Rational Application Developer V7.0 及 J2EE Connector (J2C) Tools。本文中所包含的示例 Ant 脚本是用这些 J2C Tools 创建的。

本文还假设您已经使用过 Rational Application Developer 先前版本(例如,版本 6)的 J2C Tools 生成了 J2C Beans 和 Data Binding 文件。本文的重点是 Ant 特性支持,并且不涵盖 J2EE connector Tools 的详细用法。

Rational Application Developer J2C 会话记录

在 Rational Application Developer V7.0 的 J2C Tools 中,其中一个新的特性是记录向导会话的功能。该功能让您使用一次向导,并且在 Ant 脚本文件中记录下用户选项和数据。

支持 Ant 脚本生成的向导有两个。

  • CICS IMS Data Binding 向导:Ant 脚本将生成一个或多个数据绑定文件。
  • J2C Java Bean 向导:Ant 脚本将生成 J2C beans,导入资源适配器及数据绑定文件。

CICS IMS 数据绑定中的 Ant 生成

CICS IMS Data Binding 向导允许您根据 cobol、C,或者 PL/1 源码生成数据绑定文件。当您使用向导时,在您生成数据绑定文件之前,您必须在向导中选择不同的选项。Ant 脚本支持将在数据绑定 Ant 脚本文件中保存所有的设置。

图 1 展示了如何打开 CICS IMS Data Binding 向导。

  1. 选择 File > New > Other
  2. 选择J2C > CICS IMS data Binding
图 1. CICS IMS Data Binding 向导
在 explorer 视图中选择向导
在 explorer 视图中选择向导
  1. 在 CICS Data Binding 向导中单击Next,打开 Data Import 页。
  2. 选择 COBOL to JavaC to Java,或PL1 to Java映射。
  3. 选择 cobol、PL1,或 C 源文件。
  4. 单击 Next,打开 Importer 页。
  5. 选择 importer 设置,及要导入的数据结构。
  6. 单击 Next,打开图 2 中展示的 Saving Properties Page。
图 2. CICS IMS Data Binding Wizard Ant 支持
选择选项,并将会话保存为 Ant 脚本
选择选项,并将会话保存为 Ant 脚本

在 Saving Properties 页中,指定您的数据绑定文件的名称,以及工程名和工程所在的包名。同样可以选择不同的生成样式。

您将选择Save session as Ant script复选框来使用 Ant 脚本特性。默认的 Data Binding Ant Script 文件名是 Data binding 类名。Ant 脚本的默认位置是 Data Binding 生成所处的当前工程。您可以为 Ant 脚本生成变更名字和位置。

当您使用向导时,如果您要为所有设置生成值,那么 Save All Settings 选项是有用的。通过这种方式,就像您已经为所有属性生成了模板。如果您没有选择 Save All Settings 选项,那么当您使用 CICS IMS Data Binding 向导时,您唯一修改或输入的选项将生成。举例来说,Generation Style 的默认值是 Default。只有当您选择了另一个样式,如 Shorten names 时,在 Ant 脚本中才将生成 Generation Style

图 3 展示了 CICS IMS Data Binding 向导的 Saving Properties 页的 Multiple Possible Output (MPO) 案例中的 Ant 支持。

对于 MPO 案例,打开 CICS IMS Data Binding 向导的步骤,和到达 Saving Properties 页的步骤非常类似上面的那些步骤。唯一的差别是,当您映射到 Data Import 页中时,您将选择 COBOL MPO to JavaC MPO to JavaPL1 MPO to Java

到达 MPO 案例的 Saving Properties 页的步骤。

  1. 在 CICS IMS Data Binding 向导中单击Next,打开 Data Import 页。
  2. 选择 COBOL MPO to Java 映射,并选择 cobol、PL1 或 C 源文件。
  3. 单击 Next 打开 Importer 页。
  4. 选择要导入的导入者设置和数据结构的列表。
  5. 单击 Next,打开图 3 中显示的 Saving Properties Page。

注意:关于 Save session as Ant scriptSave All Settings 的信息与前面的非 MPO 案例中所描述的相同。

图 3. CICS IMS Data Binding Wizard (MPO Case) Ant 支持
MPO 案例的选项和设置
MPO 案例的选项和设置

J2C Java Bean 向导中的 Ant 生成

J2C Java Bean 向导创建了一个能够与企业信息系统(Enterprise Information System)通信的 bean。图 4 展示了 J2C Java Bean 向导位于 J2C 文件夹之下。

找到图 4 中展示的 J2C Java Bean 向导:

  1. 选择 File > New > Other
  2. 选择 J2C > J2C Java Bean wizard
图 4. J2C Java Bean Wizard
在浏览器树中选择向导
在浏览器树中选择向导

图 5 展示了 J2C Java Bean Output Properties 页中的 Save session as Ant Script 支持。要到达该页:

  1. 选择 J2C Java Bean wizard 并单击 Next。
  2. 在 Resource Adapter Selection 页中,选择资源适配器并单击 Next
  3. Connection Properties 页打开了。输入连接信息并单击Next
  4. 现在您将到达 J2C Java Bean Output Properties 页。
图 5. J2C Java Bean Output Properties 页面
选项,包括 Ant 脚本的文件名
选项,包括 Ant 脚本的文件名

在 J2C Java Bean Output Properties 页中,指定 J2C Java Bean Interface and Implementation 文件的名称,以及将要生成的工程名和包名。

选择 Save session as Ant script 复选框,使用 Ant 脚本特性。

默认的 J2C Java Bean Ant Script 文件名是 J2C Java Bean 接口的名称。Ant 脚本的默认位置是生成 J2C bean 的当前工程。您可以变更 Ant 脚本生成的名称和位置。当您使用向导时,如果您想要为所有设置生成值,那么Save All Settings 选项是有用的。为了得到信息,获取用过的所有值是一种好的方法,这样做可以令您更容易地在未来变更特定的值。如果您没有选择Save All Settings 选项,那么在您使用 J2C Java Bean 向导时修改或输入的唯一选项将生成。

当您选择了 Save session as Ant script 选项之后,单击 Next 继续向导的其他页面,从而创建其余内容。

J2C Ant 脚本概述

数据绑定 Ant 脚本的设计

以下的内容介绍了作为 CICS/IMS Data Binding 会话记录结果而生成的 Ant 文件(如清单 1 所示)。

所生成的数据绑定脚本由目标、任务、类型及属性组成。要了解更多关于 Ant 如何工作的内容,访问 http://Ant.apache.org/manual/

脚本拥有一个定制任务,discover。其余的标签是定制类型。数据发现出现在两个截然不同的阶段,这很容易在带有performImportwriteToWorkspace 复合元素(Ant 定制类型)的示例脚本中确定出来。

两种定制类型都包含进行语言(COBOL、PL1,或 C)文件导入和(数据绑定 bean)工件生成所需的必要数据。

导入及生成都在内部执行,分别使用 Discovery Agent 和 Workspace Resource Writer。根据所导入的语言和所生成的工件类型,您可以使用各种实现。每个实现通过其 ID(javax.xml.namespace.QName)来识别。COBOL、C 和 PL/1 是代理实现为之存在的一些文件实例。在该实例中,所导入的类型是 COBOL,因此使用 ID 为 {com/ibm/adapter}CobolDiscoveryAgent 的 Discovery Agent。相同的逻辑也向撰写者应用。

导入和撰写数据是利用定制的属性类型,如propertyElementpropertyGroup 来存储的。这是代理及撰写者所能处理的格式。

注意在脚本的末尾,我们已经完成了 refreshLocal 和 incrementalBuild。这令 Annotation 构造器能够根据 J2C bean 和 数据绑定文件中的所有的 doclet Tag 在方法体中重新生成代码,并且与工程同步。

清单 1. 数据绑定 Ant 脚本的示例代码
<project xmlns:adapter="http://com.ibm.adapter"
default="DataBinding1" name="/myTaderc99/DFHCOMMAREA.xml">
<property name="debug" value="true"/>
<property name="project1" value="myTaderc99"/>
<target name="DataBinding1">
<adapter:discover>
<adapter:performImport
              agent="{com/ibm/adapter}CobolDiscoveryAgent">
<adapter:importResource>
<adapter:propertyGroup name="CobolFileGroup">
<adapter:propertyElement name="CobolFile"
              value="D:\taderc99.cbl"/>
</adapter:propertyGroup>
</adapter:importResource>
<adapter:queryProperties>
<adapter:propertyGroup name="ImportProperties">
<adapter:propertyElement name="Platform"
              value="Win32"/>
</adapter:propertyGroup>
</adapter:queryProperties>
<adapter:queryResult>
<adapter:selectElement name="DFHCOMMAREA"/>
</adapter:queryResult>
</adapter:performImport>
<adapter:writeToWorkspace
              writer="{com/ibm/adapter/cobol/writer}JAVA_WRITER">
<adapter:propertyGroup name="COBOLToJavaResourceWriter">
<adapter:propertyElement name="GenerationStyle"
              value="Default"/>
<adapter:propertyGroup name="Java Type Name">
<adapter:propertyElement name="Project Name"
              value="${project1}"/>
<adapter:propertyElement name="Package Name"
              value="test.data"/>
<adapter:propertyElement name="Class Name"
              value="DFHCOMMAREA"/>
</adapter:propertyGroup>
</adapter:propertyGroup>
</adapter:writeToWorkspace>
</adapter:discover>
<eclipse.refreshLocal depth="infinite" resource="${project1}"/>
<eclipse.incrementalBuild project="${project1}"/>
</target>
</project>

J2C 服务 Ant 脚本的设计

以下示例描述了作为 J2C Java Bean 会话记录的结果而生成的 Ant 文件的 J2C bean 生成部分(如清单 2 所示)。

将脚本组织成互相依赖的不同目标。根据依赖型顺序地执行不同的目标。

脚本有一个任务,generateService。两个截然不同的部分是 buildServicewriteToWorkspace。第一部分与前面的示例不同,因为正在构建服务,而不是发现服务。假设 DFHCOMMAREA.java 文件位于 Test2 工程和 test.data 包之下。

第二个部分与来自于 CICS/IMS Data Binding 的 writeToWorkspace 是同样的,差别在于所使用的值不同。

在所描述的任务之中,Ant 文件包含了两个额外的助手任务。createProject 任务,如其名称所指的,它是用于工程的创建。importResourceAdapter 任务是用于导入资源适配器并创建连接器工程 cicseci602的。

清单 2. J2C Java Bean Ant 脚本的样例代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:adapter="http://com.ibm.adapter"
  xmlns:j2c="http://com.ibm.adapter.j2c"
  default="J2CBeanGeneration1" name="/Test2/Customer.xml">
<target name="Init1">
<property name="debug" value="true"/>
<property name="project1" value="Test2"/>
<property name="ra.project" value="cicseci602"/>
<property name="ra.runtime"
          value="WebSphere Application Server v6.1"/>
<property name="ra.file"
value="D:\Program Files\IBM\SDP70\ResourceAdapters\cics15\cicseci602.rar"/>
</target>
<target depends="Init1" name="DataBinding1">
<adapter:createProject projectName="${project1}"
          projectType="Java"/>
<eclipse.refreshLocal depth="infinite"
          resource="${project1}"/>
<eclipse.incrementalBuild project="${project1}"/>
</target>
<target depends="DataBinding1" name="importResourceAdapter1">
<j2c:importResourceAdapter addToEAR="no"
          connectorFile="${ra.file}" connectorModule="${ra.project}"
          targetRuntime="${ra.runtime}"/>
</target>
<target depends="importResourceAdapter1"
      name="J2CBeanGeneration1">
<adapter:createProject projectName="${project1}"
          projectType="Java"/>
<j2c:generateService>
<j2c:buildService class="Customer"
              package="sample.test">
<j2c:method>
<j2c:methodName value="getCustomerInfo"/>
<j2c:methodInput
              value="/Test2/test/data/DFHCOMMAREA.java"/>
<j2c:methodOutput
              value="/Test2/test/data/DFHCOMMAREA.java"/>
<j2c:interactionSpec
              class="com.ibm.connector2.cics.ECIInteractionSpec">
<adapter:propertyGroup
              name="InteractionSpec property group">
<adapter:propertyElement
              name="functionName" value="taderc99"/>
<adapter:propertyElement
              name="commareaLength" value="-1"/>
<adapter:propertyElement
              name="replyLength" value="-1"/>
<adapter:propertyElement
              name="executeTimeout" value="0"/>
<adapter:propertyElement
              name="interactionVerb" value="1"/>
</adapter:propertyGroup>
</j2c:interactionSpec>
</j2c:method>
<j2c:managedConnectionFactory
              class="com.ibm.connector2.cics.ECIManagedConnectionFactory"
                target="MyDefaultJNDIName">
<adapter:propertyGroup
              name="Managed connection property group">
<adapter:propertyGroup name="Server">
<adapter:propertyElement name="ConnectionURL"
              value="rubicon"/>
<adapter:propertyElement name="ServerName"
              value="rubicon"/>
</adapter:propertyGroup>
<adapter:propertyGroup name="UserVerification">
<adapter:propertyElement name="UserName"
              value="sysad"/>
<adapter:propertyElement name="Password"
              value="2006"/>
</adapter:propertyGroup>
<adapter:propertyGroup name="Security"/>
</adapter:propertyGroup>
</j2c:managedConnectionFactory>
<j2c:connectionSpec
              class="com.ibm.connector2.cics.ECIConnectionSpec"/>
<j2c:resourceAdapter project="${ra.project}"/>
</j2c:buildService>
<adapter:writeToWorkspace
              writer="{com/ibm/adapter/j2c/codegen}J2CAnnotationWriter">
<adapter:propertyGroup name="J2C Writer Properties">
<adapter:propertyElement
              name="Project" value="${project1}"/>
<adapter:propertyElement
              name="PackageName" value="sample.test"/>
<adapter:propertyElement
              name="InterfaceName" value="Customer"/>
</adapter:propertyGroup>
</adapter:writeToWorkspace>
</j2c:generateService>
<eclipse.refreshLocal
          depth="infinite" resource="${project1}"/>
<eclipse.incrementalBuild project="${project1}"/>
</target>
</project>

预定义的变量

所生成的脚本还包含预定义的 Ant 属性,像 debugproject1。这些 Ant 属性可以用作脚本中的变量。当一个值在 Ant 文件中的多个位置重复时,把它定义为变量有一大好处:您只需要在一个位置修改它的值,然而变更将反应到整篇脚本中。如果将debug 属性设置为false,那么它将禁止控制台输出。

多目标

由于 Ant 允许在一个文件中定义多个目标,您可以修改文件内容并将两个或多个文件合并到一个中。

可重复性

您还可以将所生成的文件用作进一步工件生成的模板。例如,如果您变更了 COBOL 文件、导入属性和目标类名,那么您可以在不使用向导的情况下生成新的数据绑定。

自定义

为了定制 J2C Ant 脚本,您需要知道以下内容:

  • 要变更的属性是什么
  • 要设置的属性值是什么
  • 您可以在哪里找到有效属性值的列表

在 J2C 用户界面上可以很容易地确定一些属性,您可以在下拉列表中看到一列可能的值。

定制数据绑定 Ant 脚本

变更工程类型

您可以设置三个工程类型:

  • Java
  • Web
  • EJB™(Enterprise JavaBeans™技术)

Web 和 EJB 工程需要要指定的 runtimeName。runtimeName 是您可以由 Rational Application Developer 服务器运行时值确定的字符串。

  1. 在主菜单中,选择 Windows > Preference > Server > Installed runtime

清单 3 中展示的代码片断向您介绍了如何创建名为MyTaderc99的 Java 工程。

清单 3. Java 工程类型的示例代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:adapter="http://com.ibm.adapter" default="DataBinding1"
    name="/MyTaderc99/DFHCOMMAREA.xml">
<property name="debug" value="true"/>
<property name="project1" value="MyTaderc99"/>
<target name="DataBinding1">
<adapter:createProject projectName="${project1}"
          projectType="Java"/>

清单 4 中展示的代码片断向您介绍了如何创建 Web 工程。

  1. 除了 projectType,您需要指定 runtimeName。
清单 4. Web 工程类型的示例代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:adapter="http://com.ibm.adapter" default="DataBinding1"
    name="/MyTaderc99/DFHCOMMAREA.xml">
<property name="debug" value="true"/>
<property name="project1" value="MyTaderc99"/>
<target name="DataBinding1">
<adapter:createProject projectName="${project1}"
  projectType="Web" runtimeName="WebSphere Application Server v6.0"/>

如果当您创建 Web 工程时,指定 add To EAR,除了 runtimeName,您需要指定 EARProjectNameaddToEAR 选项。

<adapter:createProject EARProjectName="MyWebEAR" addToEAR="yes"
    projectName="${project1}" projectType="Web" runtimeName=
    "WebSphere Application Server v6.0"/>

清单 5 中展示的代码片断向您介绍了如何创建 EJB 工程。

  1. 除了 projectType,您需要指定 runtimeName。
清单 5. EJB 工程类型的示例代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:adapter="http://com.ibm.adapter" default="DataBinding1"
    name="/MyTaderc99/DFHCOMMAREA.xml">
<property name="debug" value="true"/>
<property name="project1" value="MyTaderc99"/>
<target name="DataBinding1">
<adapter:createProject projectName="${project1}"
    projectType="EJB" runtimeName="WebSphere Application Server v6.0"/>

如果当创建 EJB 工程时指定 add To EAR,除了 runtimeName,您需要指定 EARProjectNameaddToEAR 选项。

<adapter:createProject EARProjectName="MyEJBEAR" addToEAR="yes"
    projectName="${project1}" projectType="EJB" runtimeName=
    "WebSphere Application Server v6.0"/>

变更生成样式

在 Saving Properties 页中定位 Generation Style(清单 6)。默认值是 Default

清单 6. Generation Style:Ant
<adapter:writeToWorkspace writer="{com/ibm/adapter/cobol/writer}JAVA_WRITER">>
<adapter:propertyGroup name="COBOLToJavaResourceWriter">
<adapter:propertyElement name="GenerationStyle" value="Default"/>

可能的属性值对于 Data Bingding 向导是一样的,如图 6 所示。

图 6. Generation Style-UI
Saving Properties 页,显示了样式选项
Saving Properties 页,显示了样式选项

如果您选择 Preserve case of names,那么 Ant 脚本中的部分代码将与清单 7 中展示的一样。

清单 7. Ant 的另一种生成样式
<adapter:writeToWorkspace
  writer="{com/ibm/adapter/cobol/writer}JAVA_WRITER">>
<adapter:propertyGroup name="COBOLToJavaResourceWriter">
<adapter:propertyElement name="GenerationStyle"
      value="Preserve case of names"/>

定制 J2C Java Bean Ant 脚本

变更连接器工程

在以下的清单 8 中,属性 ra.project 初始化为 cicseci602。这是 importResourceAdapter Ant 任务过程中创建的连接器模块。您可以通过指定不同的名称,很容易地修改连接器模块的名称。

清单 8. 连接器工程名变更
<project xmlns:adapter="http://com.ibm.adapter" xmlns:j2c=
     "http://com.ibm.adapter.j2c"
     default="J2CBeanGeneration1" name="/MyTaderc99/Customer.xml">
<target name="Init1">
<property name="debug" value="true"/>
<property name="project1" value="MyTaderc99"/>
<property name="ra.project" value="cicseci602"/>
<property name="ra.runtime" value="WebSphere Application Server v6.0"/>
<property name="ra.file" value=
        "D:\RAD0629\ResourceAdapters\cics15\cicseci602.rar"/>
</target>

变更 Resource Adapter 位置

在以下的清单 9 中,属性 ra.file 指定 Resource Adapter 文件的位置。如果您想要使用 Ant 脚本导入另一个资源适配器,您只用变更 ra.file 的值。

清单 9. 资源适配器位置
<project xmlns:adapter="http://com.ibm.adapter"
    xmlns:j2c="http://com.ibm.adapter.j2c"
     default="J2CBeanGeneration1" name="/MyTaderc99/Customer.xml">
<target name="Init1">
<property name="debug" value="true"/>
<property name="project1" value="MyTaderc99"/>
<property name="ra.project" value="cicseci602"/>
<property name="ra.runtime" value="WebSphere Application Server v6.0"/>
<property name="ra.file"
    value="D:\RAD0629\ResourceAdapters\cics15\cicseci602.rar"/>
</target>

变更管理连接的连接信息

清单 10 中显示了 J2C Java Bean Ant 脚本中的连接信息部分。

您可以变更连接信息,像 ConnectionURL、ServerName、UserName、Password

您可以为调试设置 TraceLevel。

清单 10. 连接信息
<j2c:managedConnectionFactory class=
"com.ibm.connector2.cics.ECIManagedConnectionFactory" target=
"MyDefaultJNDIName">
<adapter:propertyGroup name="Managed connection property group">
<adapter:propertyGroup name="Server">
<adapter:propertyElement name="ConnectionURL" value="cheat" />
<adapter:propertyElement name="ServerName" value="cheat" />
</adapter:propertyGroup>
<adapter:propertyGroup name="UserVerification">
<adapter:propertyElement name="UserName" value="sysad" />
<adapter:propertyElement name="Password" value="sysad" />
</adapter:propertyGroup>
<adapter:propertyElement name="TraceLevel" value="3" />
<adapter:propertyGroup name="Security" />
</adapter:propertyGroup>
</j2c:managedConnectionFactory>

图 7 展示了 J2C Java Bean 向导中的 Connection Properties 页。

上面 Ant 脚本中的所管理的连接信息和 TraceLevel(清单 10)是从 J2C Java Bean 向导的 Connection Properties 页中获取。

图 7. Connection Properties 页
根据资源适配器类型,非管理的连接属性有所变化
根据资源适配器类型,非管理的连接属性有所变化

导入属性

图 8 展示了 J2C Ant 脚本的导入属性部分。

该信息从 J2C Java Bean 向导,以及 CICS IMS Data Binding 向导的 Importer 页上获取。

图 8. 向 Ant 脚本导入属性
将属性导入到 Customer.xml 的屏幕抓取
将属性导入到 Customer.xml 的屏幕抓取

图 9 展示了 importer 属性是在 J2C 向导的 Importer 页上定位的。

图 9. 将属性导入到 J2C 向导的 Importer 页
导入选项值
导入选项值

交互属性

图 10 展示了由 J2C Java Bean Ant 脚本所生成的 Ant 脚本中的 InteractionSpec 属性。

图 10. Ant 脚本中的 InteractionSpec 属性
Customer.xml 文件中显示的 InteractionSpec 属性
Customer.xml 文件中显示的 InteractionSpec 属性

图 11 展示了在 J2C Java Bean 向导中的哪里定位 InteractionSpec 属性。它们在 J2C Java Bean 向导的 Java Method 页上定位。当您选择了 Show Advanced 按钮,就可以看到一些属性。

图 11. J2C Java Bean 向导的 InteractionSpec 属性
在 Java Method 页中展开的高级窗格
在 Java Method 页中展开的高级窗格

一些属性是隐式的,不在 J2C 用户界面中显示出来。一个实例是发现 Agent ID。

您可以在用户界面中看到代理名称"{com/ibm/adapter}CobolDiscoveryAgent"。如果您选择语言映射为 COBOL to JAVA 或 MPO COBOL to Java,那么您将看到 Ant 脚本中生成的代理名称。

清单 11 展示了当您选择 COBOL_TO_JAVACOBOL_MPO_TO_JAVA 映射时的代理名称。

清单 11. 展示 Discovery Agent 的示例代码 COBOL
<adapter:discover>
<adapter:performImport agent="{com/ibm/adapter}CobolDiscoveryAgent">
<adapter:importResource>
<adapter:propertyGroup name="CobolFileGroup">
<adapter:propertyElement name="CobolFile" value=
                "D:\taderc99.cbl"/>
</adapter:propertyGroup>

清单 12 展示了当您选择 C_TO_JAVAC_MPO_TO_JAVA 映射时的代理名称。

清单 12. 展示 Discovery Agent 的示例代码 C
<adapter:discover>
<adapter:performImport agent="{com/ibm/adapter}CDiscoveryAgent">
<adapter:importResource>
<adapter:propertyGroup name="CFileGroup">
<adapter:propertyElement name="CFile" value="D:\taderc99.cpp"/>
</adapter:propertyGroup>

清单 13 展示了当您选择 PL1_TO_JAVAPL1_MPO_TO_JAVA 映射时的代理名称。

清单 13. 展示 Discovery Agent 的示例代码 PL/I
<adapter:discover>
<adapter:performImport agent="{com/ibm/adapter}PliDiscoveryAgent">
<adapter:importResource>
<adapter:propertyGroup name="PliFileGroup">
<adapter:propertyElement name="PliFile" value="D:\taderc99.pli"/>
</adapter:propertyGroup>

图 12 展示了在 J2C Java Bean 或 CICS IMS Data Binding 向导的什么地方找到不同的映射。当您选择不同的映射时,Ant 脚本文件中生成的代理名称也将不同,如先前三个 Ant 脚本清单中那样。

图 12. 选择映射
指定数据导入配置属性
指定数据导入配置属性

在命令行中运行 J2C Ant 脚本

在不启动 eclipse 工作台的情况下可以执行所生成的 J2C Ant 脚本。一旦生成或进行了修改,您可以在不启动 IDE 的情况下从 Microsoft® Windows® 命令行执行脚本。以此方式运行 Rational Application Developer 称为 headless 模式。要运行 Ant 脚本,调用 antRunner 应用程序,将 Ant 文件作为参数传递。以 headless 模式运行所生成的 Ant 脚本的简单批处理文件如图 14 所示:

清单 14. 示例 Test.bat
echo off
setlocal

set ECLIPSE="D:\Program Files\IBM\SDP70"
set WORKSPACE=D:\MyWorkspaceANT
set BUILDFILE=D:\Customer.xml

set JAVA_HOME=%ECLIPSE%\jdk
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=%JAVA_HOME%\lib;%CLASSPATH%


java -cp %ECLIPSE%\startup.jar org.eclipse.core.launcher.Main -clean -data %WORKSPACE%
 -application org.eclipse.Ant.core.antRunner -buildfile %BUILDFILE%

Where:
    ECLIPSE environment variable defines the path to the eclipse folder within RAD
    WORKSPACE defines the path where the workspace will be created
    BUILDFILE is the path to your generated Ant script you would like to run.

要运行由 CICS/IMS Data Binding 会话所生成的 Ant 文件,在 Test.bat 批处理文件中修改以下变量的值,以适应您的环境。

  • 用 eclipse 根目录(eclipse.exe 所在位置)代替 ECLIPSE 的值。
  • 用工作区名称和位置代替 WORKSPACE 的值。
  • 用您的 J2C Ant 脚本代替 BUILDFILE的值。

如果将 debug 属性设置为 True,那么您应该看到进程消息,以及末尾的 BUILD SUCCESSFUL 消息。您还可以浏览到目标工作区来观察所生成的文件。

在命令行中运行数据绑定 Ant 脚本

您可以从命令行调用 Test.bat,如图 13 所示。

图 13. 在命令行为 DataBinding.xml 调用 Test.bat
在命令行运行 Test.bat 来生成 DataBinding
在命令行运行 Test.bat 来生成 DataBinding

当成功地完成 Test.bat 之后,您可以打开工作区,并且生成了所有的工程和数据绑定文件,如图 14 所示。

图 14. 数据绑定生成了
数据绑定 bean 生成了
数据绑定 bean 生成了

在命令行运行 J2C Java Bean AntScript

要生成 CICS 服务,您必须在工作区中指定服务器运行时。importResourceAdapter 任务使用服务器运行时创建连接器工程。一旦设置了服务器运行时,就在批处理文件中修改 BUILDFILE 变量,并且指向根据 J2C Java Bean 会话生成的 Ant 文件。重新运行批处理文件。如果这次构建成功了,那么可以在目标工作区中观察到所生成的服务文件。

要确保已经指定了服务器运行时,您可以选择 Windows > Preference > Server > Installed Runtimes 来打开工作区。

图 15 展示了 Installed Runtimes 的位置。

图 15. 设置服务器运行时
观察已安装的服务器运行时环境
观察已安装的服务器运行时环境

图 16 展示了如何在命令窗口通过 Test.bat 调用 Ant 脚本。

图 16. 为生成的 J2C Java Bean 调用 Test.bat
J2C Java Bean Ant 脚本执行
J2C Java Bean Ant 脚本执行

当成功完成 Test.bat 之后,您可以打开工作区,找到所有的工程和工件都生成了。在下图 17 中,您可以看到已经生成了带有数据绑定文件DFHCOMMAREA.java 的工程myTaderc99。

图 17. 带有 J2C Java Bean 的 Java Project 和数据绑定生成了
J2C Java Beans 生成了
J2C Java Beans 生成了

移植

在 J2C V6011/V6012 中,提供示例 Ant 脚本,用以生成服务或数据绑定文件。它们不是自动生成的,因此您需要手动进行修改来确保脚本有效工作。

在 Rational Application Developer V7.0 中,J2C 会话记录特性自动地生成 Ant 脚本。移植工具将 V601.x Ant 脚本转换为新的 Ant 脚本格式。新的 Ant 脚本更加灵活且更容易使用。

如何运行 <j2c:migrate> 任务

Migration xml(如清单 15 中所示)是执行 <j2c:migrate> 任务及已知的 V6.0.1.x Ant 脚本的 Ant 构建文件。

  1. 在您的代码中,用您想要移植的 V6.1.x 旧的 Ant 脚本文件取代 source 的值。
  2. 在 Rational Developer Application V7 中执行 migration.xml,或者利用 headless 模式在命令行中运行它。
清单 15. Migration.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="Migration" default="default"
  xmlns:j2c="http://com.ibm.adapter.j2c">
    <--
        The source file path must be either a workspace relative or
        a full file system path.
        The original file (source) will be renamed with the .bak extension.
     -->
     <target name="default">
        <j2c:migrate source="c:/Script/v6antscript.xml"/>
    </target>
</project>

技巧

便携的 Ant 脚本

Ant 脚本的一个典型用例是在日常可重复的构建中使用。确保可移植性的最佳途径是利用 Ant 变量,分解出脚本中的具体机器的信息。在 J2C Ant 脚本中要警惕的要点是 cobol 源文件的路径、服务器运行时的位置,以及 Resource Adapter 的位置。这些应该让变量映射到执行环境中的位置上。

Data Binding Ant 脚本

  • 在 Data Binding Ant 脚本中,定义 project1 变量。您可以在生成数据绑定文件的地方修改工程的值。另一方面,Package Name 是硬编码的值。您可以通过定义一个变量名来扩展它。
    <property name="package1" value="test.data"/>
    ...

    然后,在工作区中,您将改为引用包变量。
    <adapter:propertyElement name="Project Name" value="${project1}" />
    <adapter:propertyElement name="Package Name" value=${package1}" />
    <adapter:propertyElement name="Class Name" value="DFHCOMMAREA" />
  • 如果您打算将 Ant 脚本集成到构建过程中,那么还可以将 COBOL 源文件的位置定义到变量中。
    <property name="COBOLFileSrc" value="="D:\taderc99.cbl""/>
    ...
    <adapter:propertyGroup name="CobolFileGroup">
    <adapter:propertyElement name="CobolFile" value="${COBOLFileSrc}" />
    </adapter:propertyGroup>

J2C Java Bean Ant 脚本

在 J2C Java Bean Ant 脚本中,定义了方法所使用的输入和输出数据绑定文件。您可以通过创建输入和输出变量来扩展,并在脚本中使用。

<property name="InputDBFile"
  value="/Taderc99/sample/cics/data/DFHCOMMAREA.java" />
<property name="OuputDBFile"
  value="/Taderc99/sample/cics/data/DFHCOMMAREA.java" />

<j2c:methodName value="getCustomerInfo" />
<j2c:methodInput value="${InputDBFile}" />
<j2c:methodOutput value=="${InputDBFile}"  />

<property name="package1" value="test.data"/>
...

不能定位 RAR

如果您已经在工作区中为特别的 Resource Adapter 生成了连接器工程,那么当您使用 J2C Java Bean 向导时,就不再导入 Resource Adapter。当您生成了 Ant 脚本时,您就没办法确定资源适配器的位置了,因为连接器工程没有提供该信息。

如果 ra.file 值与cannotlocaterar 值相等,如图 18 所示,那么您将需要手动地添加 Resource Adapter 位置。这是已知的局限。

图 18. 不能为 ra.file 定位 rar 值
不能在 Customer.xml 中定位 rar 值
不能在 Customer.xml 中定位 rar 值

益处

本文向您展示了如何利用 Ant 脚本和 Rational Application Developer 来获得灵活性、可重复性,及可维护性的好处。


下载资源


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational, Web development
ArticleID=204277
ArticleTitle=使用 Rational Application Developer V7 中的 J2C Ant 脚本
publish-date=12052006