Ant スクリプトを使用した J2C Bean のビルド

Ant スクリプトを使用して J2C コンポーネントを起動できます。これらの Ant スクリプトはワークベンチからもコマンド行からも呼び出すことができます。

始める前に

場合によっては、J2C Bean またはデータ・バインディング Bean を再作成する必要があります (例えば、ご使用の COBOL コピーブックに新しいフィールドを追加する場合など)。基盤となる J2C コンポーネントとユーザーの 相互作用を模倣する Ant 定義ファイルを使用して、J2C Bean を再作成できます。

このタスクについて

J2C ウィザードを使用すれば、選択内容および入力値を取得して、Ant 構成ファイルを作成できます。Ant 構成ファイルは本質的に XML ファイルであるため、手作業で全体を変更またはビルドすることができます。

Ant 構成ファイルは、さまざまなタスクが実行されるターゲット・ツリーから構成されています。 ターゲット内のタスクは、パイプライン方法で処理されます。 各タスクは、特定のタスク・インターフェースを実装するオブジェクトによって実行されます。 Ant 構成ファイルが呼び出されると、各タスクに対応したプロパティーが実装しているタスク・オブジェクトにロードされます。 情報がロードされると、タスク・オブジェクトが呼び出されます。

データ・ディスカバリー・タスク

一般に、ディスカバリー・サイクルには 2 つのステップがあり、それぞれのステップは別個のコンポーネントによって行われます。
  • ディスカバリー・エージェントは、データのインポートを実際に実行し (スクリプトの例の performImport タスクを参照)、インポート結果 と呼ばれる専有メタデータを作成します。
  • リソース書き込み機能は、インポート結果を取り込み (スクリプトの例の writeToWorkspace タスクを参照)、適切なアプリケーション成果物を作成します。
ディスカバリー・エージェントおよびリソース書き込み機能には、インポートおよび生成ステップ中にユーザー入力のセットを提供する必要があります。 例えば、照会段階で、各ディスカバリー・エージェントには、対応するメタデータ・リポジトリーでの照会を定義するのに使用される、異なるパラメーターのセットがあります。ディスカバリー・エージェントとリソース書き込み機能は、望ましい成果物をインポートおよび生成するために、さまざまな方法で組み合わせることができます。 これらは名前 (QName) で識別されます。 例えば、 Cobol ディスカバリー・エージェントは、{com/ibm/adapter}CobolDiscoveryAgent という名前で識別できます。
以下のスクリプトの例は、J2C Java™ インターフェース、J2C Java 実装、および taderc99.cbl COBOL ファイルに基づくデータ・バインディング・クラスを生成する方法と、ECIResourceAdapter バージョン 6.0.2 のインポートについて示しています。
<adapter:discover>
	<adapter:performImport agent="{com/ibm/adapter}CobolDiscoveryAgent">
		<adapter:importResource>
			<adapter:propertyGroup name="CobolFileGroup">
				<adapter:propertyElement name="CobolFile" value="/${project}/taderc99.ccp"/>
			</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="0"/>
			<adapter:propertyGroup name="Java Type Name">
				<adapter:propertyElement name="Overwrite existing class" value="true"/>
				<adapter:propertyElement name="Project Name" value="${project}"/>
				<adapter:propertyElement name="Package Name" value="com.ibm.test"/>
				<adapter:propertyElement name="Class Name" value="Taderc99"/>
			</adapter:propertyGroup>
		</adapter:propertyGroup>
	</adapter:writeToWorkspace>
</adapter:discover>

手順

  1. Ant スクリプトの「インポート」セクションの例:
    <discoveryAgent type="DiscoveryAgentName">
    		<importResource name="PropertyName" value="PropertyValue"/>
    		<importProperties>
    			<propertyElement name="PropetyName" value="PropertyValue"/>
    		</importProperties>
    		<searchParameters>
    			<propertyElement name="ParameterName"/>
    		</searchParameters>
    </discoveryAgent>
    ここで、
    • discoveryAgent は、インポートに使用されるディスカバリー・エージェントの名前
    • importResource は、インポートされるリソース
    • queryProperties は、メタデータ・リポジトリーに対する照会の構成に必要な情報を表すパラメーターのリスト
    • searchParameters は、アプリケーション成果物としてインポートする結果ツリーの select ノード
    • propertyElement は、リスト (プロパティー名とプロパティー値のペア)
  2. アプリケーション成果物を生成するために、インポートされた結果を取り込むことのできるリソース書き込み機能が呼び出されます。 例えば、COBOL のインポート後には、COBOL タイプのインポート結果を取り込むことのできる書き込み機能のみを使用できます。 Ant スクリプトの「write」セクションは、次のようになります。
    <adapter:writeToWorkspace writer="{com/ibm/adapter/cobol/writer}JAVA_WRITER">
    <adapter:propertyGroup name="COBOLToJavaResourceWriter">
    <adapter:propertyGroup name="Java Type Name">
    <adapter:propertyElement name="Project Name" value="${project1}"/>
    <adapter:propertyElement name="Package Name" value="sample.cics"/>
    <adapter:propertyElement name="Class Name" value="DFHCOMMAREA"/>
    </adapter:propertyGroup>
    </adapter:propertyGroup>
    </adapter:writeToWorkspace>
    ここで、
    • workspaceResourceWriter は、アプリケーション成果物を生成するために使用される書き込み機能の名前。
    • propertyElement は、書き込み機能が生成に使用するプロパティー名とプロパティー値のペアのリスト。
  3. 言語インポート (COBOL、C および PL/I) の特殊な場合には、追加ステップとしてバインディング生成があります。 Ant スクリプトの「binding」セクションは、次のようになります。
    <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>
  4. resourceAdapter は、次の方法でも定義できます。
    <resourceAdapter>
         <propertyElement name="displayName" value="PropertyValue"/>
         <propertyElement name="version" value="PropertyValue"/>
         <propertyElement name="vendorName" value="PropertyValue"/>
    </resourceAdapter>
    ここで、
    • createBinding は、パッケージおよびインターフェース・バインディング・クラス名を定義する
    • methodElement は、エンタープライズ情報システムにアクセスするための Java メソッド
      • name は、メソッド名
      • input は、入力型
      • output は、出力型
      • interactioSpec は、相互作用プロパティーのリスト
    • connectionSpec は、接続プロパティーのリスト
    • resourceAdapter は、プロジェクト名またはプロパティーのリストを指定することによって使用されるリソース・アダプター
  5. プロパティーが設定された後で、基盤となる API を呼び出すコマンドを実行し、インポートまたは成果物生成を行うことができます。

注: Ant スクリプトを使用する際は、以下のガイドラインに留意してください。
  • Ant スクリプトでリソース・アダプターを呼び出す場合は、Ant スクリプトを起動する前にワークスペース内にリソース・アダプターをインポートする必要があります。
  • 使用されるリソースには、ワークスペースおよびプロジェクトを指すファイル・パスか、またはフルファイル・システム・パスがなければなりません。
  • ディスカバリー・エージェントおよびワークスペース書き込み機能は、一意的に識別される名前 (QName) で参照されます。 すべての登録済みディスカバリー・エージェント、ワークスペース・リソース書き込み機能、およびインポート構成を検索するには、スクリプト・ディレクトリーにある displayAll.xml スクリプトを使用してください。
  • 一部の要素には、name 属性と value 属性のペアがある。 名前は実際には、 ディスカバリー・エージェントまたはリソース書き込み機能によって内部的に定義されたプロパティーであり、 値を渡すために使用されます。 正しい名前を使用することが重要です。 名前がコンポーネントによって認識されないと、値は設定されません。これらの属性は常に 1 対多の多重度を持つ propertyElement タグの一部です。同じ多重度が methodElement タグにも適用されます。
以下のスクリプトの例は、指定された (taderc99.ccp) COBOL ファイルに基づいてデータ・バインディングを生成します。 このスクリプトは、com.ibm.adapter.command プラグイン・スクリプト・ディレクトリーにあります。
<?xml version="1.0" encoding="UTF-8" ?> 
  <project xmlns:adapter="http://com.ibm.adapter" default="DataBinding1" name="/Taderc99/CustomerInfo.xml">
    <property name="debug" value="true" /> 
    <property name="project1" value="Taderc99" /> 
    <target name="DataBinding1">
  <adapter:createProject projectName="${project1}" projectType="Java" /> 
    <adapter:discover>
    <adapter:performImport agent="{com/ibm/adapter}CobolDiscoveryAgent">
    <adapter:importResource>
    <adapter:propertyGroup name="CobolFileGroup">
  <adapter:propertyElement name="CobolFile" value="C:¥Samples¥CICS¥taderc99¥taderc99.cbl" /> 
  </adapter:propertyGroup>
  </adapter:importResource>
    <adapter:queryProperties>
    <adapter:propertyGroup name="ImportProperties">
  <adapter:propertyElement name="Platform" value="Win32" /> 
  <adapter:propertyElement name="Codepage" value="ISO-8859-1" /> 
  <adapter:propertyElement name="Numproc" value="PFD" /> 
  <adapter:propertyElement name="FloatingPointFormat" value="IEEE 754" /> 
    <adapter:propertyGroup name="ExternalDecimalSignGroup">
  <adapter:propertyElement name="ExternalDecimalSign" value="ASCII" /> 
  </adapter:propertyGroup>
    <adapter:propertyGroup name="EndianGroup">
  <adapter:propertyElement name="Endian" value="Little" /> 
  <adapter:propertyElement name="RemoteEndian" value="Little" /> 
  </adapter:propertyGroup>
    <adapter:propertyGroup name="CompileOptions">
  <adapter:propertyElement name="Quote" value="DOUBLE" /> 
  <adapter:propertyElement name="Trunc" value="STD" /> 
  <adapter:propertyElement name="Nsymbol" value="DBCS" /> 
  </adapter:propertyGroup>
  </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="sample.cics" /> 
  <adapter:propertyElement name="Class Name" value="CustomerInfo" /> 
  <adapter:propertyElement name="Overwrite existing class" value="true" /> 
  </adapter:propertyGroup>
  </adapter:propertyGroup>
  </adapter:writeToWorkspace>
  </adapter:discover>
  <eclipse.refreshLocal depth="infinite" resource="${project1}" /> 
  <eclipse.incrementalBuild project="${project1}" /> 
  </target>
  </project> 
ここで、
  • importResource は、インポートされるリソースを定義します
  • queryProperties は、メタデータ・リポジトリーに 対する照会を構成するために必要な情報を表すパラメーター
  • managedConnectionFactory は接続ファクトリーのプロパティーを定義する
  • queryResult は、結果ツリーで選択されているノードであり、このノードは、アプリケーション成果物としてのインポートに必要
  • propertyGroup は、プロパティーとその値を含む構造。

サービス生成タスク

言語インポート (COBOL、C、および PL/I) の特殊な場合 には、インターフェース・バインディング生成に関連する追加ステップがあります。 以下の例は、 J2C bean 生成に使用される Ant スクリプトのデータ・ディスカバリー・セクションを示します。

  <j2c:generateService>
            <j2c:buildService class="Customer" package="sample.cics">
                <j2c:method>
                    <j2c:methodName value="getCustomer"/>
                    <j2c:methodInput value="/Test/src/sample/cics/data/CustomerInfo.java"/>
                    <j2c:methodOutput value="/Test/src/sample/cics/data/CustomerInfo.java"/>
                    <j2c:interactionSpec class="com.ibm.connector2.cics.ECIInteractionSpec">
                        <adapter:propertyGroup name="INTERACTION_SPEC_PROPERTY_PG">
                            <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_FACTORY_CLASS_PROPERTIES">
                        <adapter:propertyGroup name="Server">
                            <adapter:propertyElement name="ConnectionURL" value="j2c"/>
                            <adapter:propertyElement name="ServerName" value="cics"/>
                        </adapter:propertyGroup>
                        <adapter:propertyGroup name="UserVerification">
                            <adapter:propertyElement name="UserName" value="sysad"/>
                            <adapter:propertyElement name="Password" value="susad"/>
                        </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/writer}J2CAnnotationWorkspaceResourceWriter">
                <adapter:propertyGroup name="J2C Java Bean Writer Properties">
                    <adapter:propertyElement name="Project" value="Test"/>
                    <adapter:propertyElement name="PackageName" value="sample.cics"/>
                    <adapter:propertyElement name="InterfaceName" value="Customer"/>
                </adapter:propertyGroup>
            </adapter:writeToWorkspace>
        </j2c:generateService>
ここで、
  • buildService は、パッケージおよびインターフェース・バインディング・クラス名を定義する
  • method は、EIS にアクセスするための Java™ メソッド
    • methodName はメソッド名
    • methodInput は入力型
    • methodOutput は出力型
    • interactionSpec は相互作用プロパティーのリスト
  • managedConnectionFactory は接続ファクトリーのプロパティーを定義する
  • connectionSpec は使用される接続クラス
  • resourceAdapter は、プロジェクト名またはプロパティーのリストを指定することによって使用されるリソース・アダプター

追加タスク

その他のユーティリティー・タスクは便利ですが、成果物の生成にとって必須ではありません。

createProject タスクはワークスペース・プロジェクトを作成します。
<adapter:createProject 
		projectName="taderc99Project" 
		projectType="Web" 
		runtimeName="J2EE Runtime Library"
		addToEAR="yes"
		EARProjectName="TestEAR"/>
ここで、
  • projectName はプロジェクトの名前です
  • projectType のタイプは、Java、Web、および EJB (大/小文字を区別しない)
  • runtimeName (オプション) は、「ウィンドウ」>「設定」>「サーバー」>「インストールされたランタイム名」で定義されるランタイムの名前
  • addToEAR (オプション) の有効な値は次のとおりです
    • yes
    • no
    • true
    • false
  • EARProjectName (オプション) は EAR プロジェクト名です
importResourceAdapter タスクはコネクター・プロジェクトを作成します。
<j2c:importResourceAdapter 
		connectorModule="cicseci602"
		connectorFile="D:¥IBM¥SDP70¥ResourceAdapters¥cics15¥cicseci602.rar" 
		targetRuntime="J2EE Runtime Library"
		addToEAR="yes"
		EARProjectName="TestEAR"/>
ここで、

プロパティーの定義

ディスカバリー・エージェントおよびワークスペース書き込み機能は、固有名 (QName) で参照されます。 すべての登録済みディスカバリー・エージェント、ワークスペース・リソース書き込み機能、およびインポート構成を検索するには、サンプル・ディレクトリーにある displayAll.xml スクリプトを使用してください。

スクリプトの例で見たように、ディスカバリー・エージェントま たはリソース書き込み機能に渡される値は、propertyGroup および propertyElement タグで定義されます。 プロパティー・グループは、ネスト構造 を介して、プロパティーの論理的なグループ化を定義します。 構造レイアウト、グループ名、およびプロパティー名については、ディスカバリー・エージェントまたはリソース書き込み機能の資料を参照してください。

プロパティーは、name 属性と value 属性のペアによって定義されます。 名前は、ディスカバリー・エージェントまたはリソース書き込み機能によって内部的に定義されたプロパティーであり、値を渡すために使用されます。 正しい名前を使用することが重要です。 名前がコンポーネントによって認識されないと、値は設定されません。


フィードバック