可以使用 Ant 脚本来调用 J2C 组件,而这些 Ant 脚本则可以通过用户界面或者从命令行中调用。
执行应用程序开发时,从元数据资源库中获取应用程序构件的源代码是很常见的事情。通常,通过浏览这些资源库以找到构件,选择一部分构件,然后根据这些构件来生成应用程序组件。通常,通过用户界面来完成此过程,用户界面将调用底层的 API 来执行实际导入。也可以使用 Ant 定义文件来完成该导入,Ant 定义文件将模拟用户界面与底层 API 之间的交互。
Apache Ant 是一个基于 Java 的构建工具。Ant 配置文件的优点在于:从命令行或者在 IDE 中都可以调用它们。由于 Ant 配置文件实质上是一个 XML 文件,因此,还可以手工修改它或者整个构建它,并且无需装入用户界面就可以重新执行它。
Ant 配置文件由目标树组成,各种任务就是在目标树中执行的。目标中的任务是以管道形式处理的。并且每个任务是由实现特定“任务”界面的对象运行的。当调用
Ant 配置文件时,就会将与每个任务相对应的属性装入实现任务对象中。一旦装入了信息,就会调用任务对象。
数据导入周期
通常,导入周期中涉及到两个步骤,每个步骤是由不同的组件完成的:
- “发现代理程序”执行实际的数据导入,并生成专有的元数据,我们将它称为“导入结果”。
- “资源写程序”将使用“导入结果”,并生成适当的应用程序构件。
在导入和生成步骤中,“发现代理程序”和“资源写程序”都要求提供一组用户输入。例如,在“查询”阶段,每个“发现代理程序”都将有不同的一组参数,这些参数用来定义对相应元数据资源库的查询。
Ant 定义文件具有完全不同的两个部分来存储这些信息,一部分用于“发现代理程序”组件,另一部分用于“资源写程序”组件。
- Ant 脚本的导入部分看起来为如下所示:
<discoveryAgent type="DiscoveryAgentName">
<importResource name="PropertyName" value="PropertyValue"/>
<importProperties>
<propertyElement name="PropetyName" value="PropertyValue"/>
</importProperties>
<searchParameters>
<propertyElement name="ParameterName"/>
</searchParameters>
</discoveryAgent>
其中:
- discoveryAgent 是要用于导入的“发现代理程序”的名称
- importResource 是要导入的资源
- importProperties 是用来表示对元数据资源库进行查询所需要的信息的参数列表
- searchParameters 是结果树上期望作为应用程序构件导入的选择节点
- propertyElement 是一个列表(成对的属性名与属性值)
- 为了生成应用程序构件,将调用要使用已导入的结果的“资源写程序”。例如,在导入 COBOL 类型之后,只能使用要使用 COBOL 类型的“导入结果”的写程序。Ant 脚本的写入部分看起来为如下所示:
<workspaceResourceWriter type="ResourceWriterName">
<propertyElement name="PropertyName" value="PropertyValue"/>
</workspaceResourceWriter>
其中:
- workspaceResourceWriter 是用来生成应用程序构件的写程序的名称
- propertyElement 是写程序用于生成的一个列表(成对的属性名与属性值)
- 在语言导入(COBOL 和 C)这种特殊情况下,还有一个附加步骤,即,生成“绑定”。Ant 脚本的绑定部分看起来为如下所示:
<createBinding package="PackageName" class="ClassName">
<methodElement>
<name value="MethodName"/>
<input value="Input"/>
<output value="Output"/>
<interactioSpec>
<propertyElement name="PropertyName" value="PropetyValue"/>
</interactioSpec>
</methodElement>
<connectionSpec>
<propertyElement name="PropertyName" value="PropertyValue"/>
</connectionSpec>
<resourceAdapter project="ResourceAdapterProjectName"/>
</createBinding>
- 还可以采用以下方法来定义 resourceAdapter:
<resourceAdapter>
<propertyElement name="displayName" value="PropertyValue"/>
<propertyElement name="version" value="PropertyValue"/>
<propertyElement name="vendorName" value="PropertyValue"/>
</resourceAdapter>
其中:
- createBinding 定义包和接口绑定类名
- methodElement 是要访问 EIS 的 Java 方法
- name 是方法的名称
- input 是输入类型
- output 是输出类型
- interactioSpec 是交互属性的列表
- connectionSpec 是连接属性的列表
- resourceAdapter 是通过指定项目名称或属性列表而使用的资源适配器
- 一旦设置了属性,就可以开始执行一个将调用底层 API 的命令来完成导入或生成构件。Ant 脚本的命令部分看起来为如下所示:
<command commandID="CommandID">
<fileset dir="." includes="AntFile"/>
</command>
其中:
- command 是用来驱动执行的命令
- fileset 是用作操作触发器的一个必需参数,它始终指向 Ant 文件本身
注: 在使用 Ant 脚本时,应记住下列准则:
- 如果要在 Ant 脚本中调用“资源适配器”,则在调用 Ant 脚本之前必须将该资源适配器导入工作空间中。
- 使用的任何资源都必须具有指向工作空间和项目的文件路径,或者具有完整的文件系统路径。
- “发现代理程序”和“工作空间写程序”是用它们的名称(QName)来指代的,它们的名称是唯一标识的。要查找所有已注册的“发现代理程序”、“工作空间资源写程序”和“导入”配置,可使用在 script 目录中找到的 displayAll.xml 脚本。
- 某些元素具有一对名称/值属性。名称实际上是“发现代理程序”或“资源写程序”在内部定义的一种属性,将它用来与值一起传递。使名称正确是很重要的。如果组件不识别名称,也就不会设置值。在所有情况下,这些属性都是 propertyElement 标记的一部分,该标记具有“一对多”多重性。相同的多重性也适用于 methodElement 标记。
以下脚本示例将根据指定的 COBOL 文件(taderc99.ccp)生成数据绑定。可以在 com.ibm.adapter.command 插件的 script 目录中找到该脚本。
<?xml version="1.0"?>
<project name="com.ibm.adapter.command" default="DataType">
<target name="DataType">
!-- perform import -->
<discoveryAgent type="com/ibm/adapter:CobolDiscoveryAgent">
<importResource name="CobolFile" value="\Test\taderc99.ccp"/>
<importProperties>
<propertyElement name="Platform name" value="Win32"/>
</importProperties>
<searchParameters>
<propertyElement name="DFHCOMMAREA"/>
</searchParameters>
!-- execute import command -->
<command commandID="com.ibm.adapter.command.PerformImportCommand">
<fileset dir="." includes="**/dataType.xml"/>
/command>
!-- write to workspace -->
<workspaceResourceWriter type="com/ibm/adapter/cobol/writer:JAVA_WRITER">
<propertyElement name="JavaTypeName/JavaProjectName" value="Test"/>
<propertyElement name="JavaTypeName/JavaPackageName" value="com.ibm.test"/>
<propertyElement name="JavaTypeName/JavaClassName" value="Taderc99"/>
</workspaceResourceWriter>
!-- execute write command -->
<command commandID="com.ibm.adapter.command.WriteToWorkspaceCommand">
<fileset dir="." includes="**/dataType.xml"/>
</command>
</target>
</project>
CobolFile 属性的值可以是完整文件系统路径或工作空间相对路径。
运行以上脚本的步骤是:
- 创建该脚本将指向的一个 Java 项目。
- 在新创建的 Java 项目中创建一个 xml 文件 dataType.xml,并将以上脚本复制到该 xml 文件中。
- 相应地更改脚本文件中的属性。
- 运行该 Ant 脚本。确保它与工作空间运行于同一个 JRE 中。