IBM CTG Connector 2.3 の例 - Mule 4

始める前に

  • Java 8 または 11

  • Anypoint Studio 7.x

  • Mule Runtime Engine (Mule) 4.x

  • DataWeave

  • IBM CTG システム 9.1 または 9.2 へのアクセス権

  • IBM SDK 9.1 または 9.2

接続の設定

接続を保護するには、接続項目の値を指定する必要があります。次の手順を実行します。

接続の設定ファイルを作成する

接続のプロパティが含まれる設定ファイルを作成します。

  1. /src/main/resources/​ フォルダー内に ​mule-app.properties​ という名前のファイルを作成します。

  2. mule-app.properties​ ファイルに、次のような接続の一連のプロパティを作成します。括弧で囲まれたテキスト (括弧を含む) を各自の設定の適切な値に置き換えます。

    ibm.host=<hostname>
    ibm.port=<port number>
    ibm.serverName=<server name>
    ibm.username=<username> (optional)
    ibm.password=<password> (optional)
    ibm.keystoreLocation=<location of the keystore containing the certificates required for an SSL connection> (optional)
    ibm.keystorePassword=<password required to access the keystore for an SSL connection> (optional)

    これは、選択した接続設定によって異なる場合があります。

プロパティファイルの作成についての詳細は、​「プロパティプレースホルダーの設定」​を参照してください。

接続のグローバル要素を設定する

接続のグローバル要素を設定します。

  1. 新しい Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ ビューで、​[Search in Exchange (Exchange 内を検索)]​ をクリックして「​ibm ctg​」と入力します。

  3. [Selected modules (選択したモジュール)]​ セクションに ​[IBM CICS Transaction Gateway Connector]​ を追加し、​[Finish (完了)]​ をクリックします。

  4. [Global Elements (グローバル要素)]​ タブをクリックし、​[Create (作成)]​ をクリックします。

  5. [Connector Configuration (コネクタ設定)] > [IBM CTG Config (IBM CTG 設定)]​ を選択し、​[OK]​ をクリックします。

  6. [Connection (接続)]​ を設定するための値を入力します。

  7. [Test Connection (接続をテスト)​] ボタンをクリックして、IBM CTG API と接続されていることを確認します。ポップアップに成功メッセージが表示されます。

  8. [OK]​ をクリックします。

プロパティファイルのグローバル要素を設定する

mule-app.properties​ ファイルのグローバル要素を設定して、Mule がその場所を認識できるようにします。

  1. [Global Elements (グローバル要素)]​ タブをクリックし、​[Create (作成)]​ をクリックします。

  2. [Choose Global Type (グローバル種別の選択)]​ ダイアログで、​[Configuration properties (設定プロパティ)]​ を選択し、​[OK]​ をクリックします。

  3. [File (ファイル)]​ 項目に「​mule.app.properties​」と入力します。

  4. [OK]​ をクリックします。

COMMAREA プログラムを呼び出す

このアプリケーションは、EC01 という COMMAREA ベースのプログラムを呼び出します。EC01 は、現在の日付と時刻を、書式設定された EBCDIC 文字列として出力します。

CTG COMMAREA フロー
  1. Anypoint Studio で新しい Mule プロジェクトを作成し、IBM CTG のログイン情報を ​src/main/resources/mule-app.properties​ に入力します。

    ctg.host=<HOST>
    ctg.port=<PORT>
    ctg.serverName=<SERVER_NAME>
    ctg.username=<USERNAME>
    ctg.password=<PASSWORD>
    text
  2. HTTP Listener 操作をキャンバスにドラッグし、[Host (ホスト)] と [Port (ポート)] はデフォルト値のままにして、[Path (パス)] を ​/test/ec01​ に設定します。

  3. IBM CTG 操作をキャンバスにドラッグして、標準 (非 SSL) クライアントを設定するための新しいグローバル要素を追加します。

    パラメーター

    Host (ホスト)

    ${ctg.host}

    Port (ポート)

    ${ctg.port}

    Server Name (サーバー名)

    ${ctg.serverName}

    Username (ユーザー名)

    ${ctg.username}

    Password (パスワード)

    ${ctg.password}

    [Test Connection (接続をテスト)]​ をクリックして、Mule が IBM CTG インスタンスに接続できることを確認してください。接続に成功した場合は、[OK] をクリックして設定を保存します。失敗した場合は、パラメーターを確認して修正し、もう一度テストを実行してください。
  4. IBM CTG コンポーネントをダブルクリックし、​[Execute]​ 操作を選択して、次のパラメーターを設定します。

    パラメーター

    Content Reference (コンテンツリファレンス)

    #[payload]

    Request Reference (要求リファレンス)

    #[flowVars.commareaRequest]

  5. HTTP と IBM CTG 操作の間に Transform Message を追加します。

    コネクタは動的または静的メタデータを提供していませんが、Metadata Type (メタデータ型) ツールを使用して、カスタム型を定義することができます。

    1. スキーマファイルの ec01-type.ffd を使用して、「カスタムメタデータの追加」の入力メタデータを定義します。

      form: COPYBOOK
      id: 'DFHCOMMAREA'
      values:
      - { name: 'LK-DATE-OUT', type: String, length: 8 }
      - { name: 'LK-SPACE-OUT', type: String, length: 1 }
      - { name: 'LK-TIME-OUT', type: String, length: 8 }
      - { name: 'LK-LOWVAL-OUT', type: String, length: 1 }
      dataweave
    2. DataWeave トランスフォーマーの項目をマップします。

      %dw 2.0
      output text/plain schemaPath = "ec01-type.ffd", segmentIdent = "DFHCOMMAREA"
      ---
      [{
          LK-DATE-OUT: "",
          LK-SPACE-OUT: "",
          LK-TIME-OUT: "",
          LK-LOWVAL-OUT: ""
      }]
      dataweave
    3. flow 変数を ​commareaRequest​ という名前で作成し、「​Java メタデータを読み込む​」の説明に従って次の項目を設定します。

      %dw 2.0
      output application/java
      ---
      
      {
      	channel: "EC03",
      	encoding: "US-ASCII",
      	errorContainer: "OUTPUTMESSAGE",
      	programName: "EC03",
      	requestContainer: "INPUTDATA",
      	responseContainer: "CICSDATETIME",
      	tpnName: "CSMI"
      } as Object {
      	class : "org.mule.modules.ibmctg.internal.model.ChannelRequest"
      }
      dataweave

      CommareaRequest のメタデータを取得する方法については、「​Java メタデータを読み込む​」を参照してください。

  6. IBM CTG の後に変換メッセージを追加して、結果を JSON 形式で抽出します。

    %dw 2.0
    output application/json
    ---
    {
    	date: payload
    }
    dataweave
  7. フローの最後にロガーを追加します。

  8. 変更内容を保存して、Mule アプリケーションをデプロイします。ブラウザーを開いて、​http://localhost:8081/ec01​ に要求を送信します。次のような結果が返されます。

    {
        date: "08/01/2019 13:41:17"
    }
    json

この例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

チャネルプログラムを呼び出す

このアプリケーションは、EC03 というチャネルベースのプログラムを呼び出します。EC03 は、入力データコンテナを取って 3 つのコンテナを返します。

  • 日付および時刻コンテナ。

  • 入力データの長さ。CICS プログラムのチャネルとコンテナを使用します。

  • 入力コンテナのコピーまたはエラーメッセージが格納された出力コンテナ。

チャネルプログラム
  1. 上の例のステップ 1 ~ 3 を実行して、HTTP パスを ​/ec03​ に設定します。

  2. IBM CTG 操作をダブルクリックし、Execute 操作を選択して、次のパラメーターを設定します。

    パラメーター

    Content Reference (コンテンツリファレンス)

    #[payload]

    Request Reference (要求リファレンス)

    #[flowVars.request]

  3. HTTP と IBM CTG 操作の間に Transform Message を追加します。

  4. 「​カスタムメタデータを追加する​」に従い、スキーマファイルの ec03-type.ffd を使用して入力メタデータを定義します。

    form: COPYBOOK
    id: 'DFHCOMMAREA'
    values:
    - { name: 'CICS-DATE-TM', type: String, length: 8 }
    dataweave
  5. DataWeave トランスフォーマーの項目をマップします。

    %dw 2.0
    output text/plain schemaPath = "ec03-type.ffd", segmentIdent = "DFHCOMMAREA"
    ---
    [{
    	CICS-DATE-TM: ""
    }]
    dataweave
  6. flowVar 変数を ​request​ という名前で作成し、「​Java メタデータを読み込む​」の説明に従って次の項目を設定します。

    %dw 2.0
    output application/java
    ---
    {
    	channel: "EC03",
    	encoding: "US-ASCII",
    	errorContainer: "OUTPUTMESSAGE",
    	programName: "EC03",
    	requestContainer: "INPUTDATA",
    	responseContainer: "CICSDATETIME",
    	tpnName: "CSMI"
    } as Object {
    	class : "org.mule.modules.ibmctg.internal.model.ChannelRequest"
    }
    dataweave
  7. IBM CTG 操作の後に変換メッセージを追加して、結果を読みやすい形式に変換します。

  8. フローの最後にロガーを追加します。

  9. 変更内容を保存して、Mule アプリケーションをデプロイします。

  10. ブラウザーを開いて、​http://localhost:8081/ec03​ に要求を送信します。

    次のような結果が返されます。

    {
       cics-date-time: "08/01/2019 13:57:25"
    }
    json

カスタムメタデータを追加する

IBM CTG Connector は設定済みの動的/静的メタデータを提供していませんが、Metadata Type (メタデータ型) ツールを使用して、カスタム型を定義することができます。入力および出力メタデータを次のように定義します。

  1. スキーマファイルは、通常は ​.ffd​ 形式で ​src/main/resources​ ディレクトリに格納します。

    注意: これらのスキーマファイルはユーザーが用意する必要があります。CICS のインストールパッケージに含まれている COBOL コピーブックからも入手できます。

  2. コネクタ操作の [Metadata (メタデータ)] タブに移動して、​[Add metadata (メタデータを追加)]​ をクリックします。

    • [Input:Payload (入力:ペイロード)] を選択し、​[Edit (編集)]​ をクリックしてメタデータエディターを開きます。

      メタデータエディター
  3. [Add (追加)]​ をクリックして新しい型を作成し、ID を入力します (例: EC03 プログラムの入力データであれば ec03-in-type)。

  4. [Copybook] 型を選択して [Schema (スキーマ)] を選択し、スキーマファイルの場所を指定します。

  5. 表示される使用可能なデータセグメントのリストのドロップダウンメニューから、必要なセグメントを選択し、​[Select (選択)]​ をクリックして設定を保存します。

  6. DataWeave トランスフォーマーをフロー内の IBM CTG コンポーネントの前にドラッグします。

    マッピングを定義するためのメタデータ項目が利用可能になります。

    メタデータ項目

    メタデータの定義は IBM CTG Connector の使用には必要ありませんが、コネクタを使いやすくするためには必要です。​「メタデータの作成」​を参照してください。

Java メタデータを読み込む

DataWeave で、​[Define Metadata (メタデータを定義)]​ をクリックして [Metadata (メタデータ)] ウィンドウを開きます。

  1. [Add (追加)]​ をクリックして、ID (例: CommareaRequest​) を入力します。

  2. [Java] 型を選択し、[Data Structure (データ構造)] テーブルで Java オブジェクトを選択します。

  3. クラス名の CommareaRequest または完全修飾名の ​org.mule.modules.ibmctg.internal.model.CommareaRequest​ を検索して ​[OK]​ をクリックします。

  4. [Select (選択)]​ をクリックして、設定を保存します。

  5. 同じステップを繰り返して、ChannelRequest 型のメタデータを読み込みます。

この例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

トランザクションスコープ内で COMMAREA またはチャネルプログラムを呼び出す

このアプリケーションは、EC02 という COMMAREA ベースのプログラムを呼び出します。EC02 は、シンプルな実行カウンターを返します。

Studio でのユースケースフロー
  1. 上の例のステップ 1 ~ 3 を実行して、HTTP パスを ​/test/ec02​ に設定します。

  2. [Global Elements (グローバル要素)] タブで新しい Bitronix トランザクションマネージャーを追加し、設定はそのままにします。

  3. トランザクション要素を HTTP の隣にドラッグし、次の表に従って設定します。

    パラメーター

    XA Transaction

    アクション

    BEGIN_OR_JOIN

  4. IBM CTG コンポーネントをダブルクリックし、Execute using COMMAREA 操作を選択して、次のパラメーターを設定します。

    パラメーター

    Content Reference (コンテンツリファレンス)

    #[payload]

    Request Reference (要求リファレンス)

    #[flowVars.request]

  5. HTTP と IBM CTG コンポーネントの間に Transform Message を追加します。コネクタは動的/静的メタデータを提供していませんが、Metadata Type (メタデータ型) ツールを使用して、カスタム型を定義することができます。

  6. 「​カスタムメタデータを追加する​」に従い、スキーマファイルの ec02-type.ffd を使用して入力メタデータを定義します。

    form: COPYBOOK
    id: 'DFHCOMMAREA'
    values:
    - { name: 'LK-COUNT', type: String, length: 40 }
    dataweave
  7. DataWeave トランスフォーマーの項目をマップします。

    %dw 2.0
    %output text/plain schemaPath = "ec02-type.ffd" , segmentIdent = "DFHCOMMAREA"
    ---
    [{
    	LK-COUNT: "000001234TH RUN OF EC02"
    }]
    dataweave
  8. flowVar を ​request​ という名前で作成し、「​Java メタデータを読み込む​」の説明に従って次の項目を設定します。

    %dw 2.0
    output application/java
    ---
    {
    	commareaLength: 40,
    	encoding: "IBM037",
    	programName: "EC02",
    	replyLength: 40,
    	tpnName: "CSMI"
    } as Object {
    	class : "org.mule.modules.ibmctg.internal.model.CommareaRequest"
    }
    dataweave
  9. IBM CTG の後に変換メッセージを追加して、結果を JSON 形式で抽出します。

    %dw 2.0
    output application/json
    ---
    {
    	count: payload
    }
    dataweave
  10. フローの最後にロガーを追加します。

  11. 変更内容を保存して、Mule アプリケーションをデプロイします。

  12. ブラウザーを開いて、​http://localhost:8081/ec02​ に要求を送信します。次のような結果が返されます。

    {
        count: "1st RUN OF EC02"
    }
    json

この例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

複数のコンテナを使用する

この Mule フローでは、複数のコンテナを使用する方法を示します。この例では、次の操作を使用します。

  • HTTP Listener
    HTTP 要求からデータを受け取ります。

  • Transform Message
    最初のコンテンツ要求を設定し、データをフラットファイルとして出力します。

    %dw 2.0
    output application/flatfile schemaPath = "ec03-type.ffd", segmentIdent = "DFHCOMMAREA", encoding="cp037"
    ---
    [{
    	"CICS-DATE-TM": ""
    }]
  • Transform Message
    2 番目のコンテンツ要求を設定し、データをフラットファイルとして出力します。

    %dw 2.0
    output application/flatfile schemaPath = "ec03-type.ffd", segmentIdent = "DFHCOMMAREA", encoding="cp037"
    ---
    [{
    	"CICS-DATE-TM": ""
    }]
  • Transform Message
    複数のチャネルおよびコンテンツ要求を設定し、データを JSON で出力します。

    %dw 2.0
    output application/json
    ---
    [
    	{
    		channelRequest : 	{
    			channel: "EC03",
    			encoding: "US-ASCII",
    			errorContainer: "OUTPUTMESSAGE",
    			programName: "EC03",
    			requestContainer: "INPUTDATA",
    			responseContainer: "CICSDATETIME",
    			tpnName: "CSMI"
    		},
    		content : vars.request1.^raw
    	},
    	{
    		channelRequest : 	{
    			channel: "EC03",
    			encoding: "US-ASCII",
    			errorContainer: "OUTPUTMESSAGE",
    			programName: "EC03",
    			requestContainer: "INPUTDATA",
    			responseContainer: "CICSDATETIME",
    			tpnName: "CSMI"
    		},
    		content : vars.request2.^raw
    	}
    ]
  • Execute with multiple channels
    チャネルとコンテナ内にカプセル化されたデータを送信するリモート CICS プログラムをコールし、ユーザーが 1 回の要求で 32 KB を超えるデータを転送できるようにします。

    次の値を入力します。

    項目

    Object type (オブジェクト種別)

    List

    Connector Configuration (コネクタ設定)

    IBMCTG_Config

    Channel and contents (チャネルおよびコンテンツ)

    payload

  • Transform Message
    データを JSON で出力します。

    %dw 2.0
    output application/json
    ---
    {
    	"cics-date-time":payload
    }
  • Logger
    ロギングを実行します。

IBM CTG Connector で複数のコンテナを使用する Studio フロー

この例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。