通信アダプタによる設計

第 1 章 通信アダプタによる設計

次のセクションで、Java CAPS 通信アダプタの概念と参照情報について説明します。ご質問またはご不明な点がありましたら、Java CAPS の Web サイト (http://goldstar.stc.com/support) を参照してください。

COM/DCOM アプリケーションサーバープロセスのパスへの DLL ファイルの追加

COM/DCOM プロジェクトを実行する前に、実行時 JNI ブリッジ DLL ファイル comewayruntime.dll を、アプリケーションサーバープロセスの PATH に追加してください。正しいファイルが適切な PATH に確実に追加されるようにするため、プロジェクトを開始する前に、次の手順を完了してください。

Procedureアプリケーションサーバープロセスのパスに DLL ファイルを追加する

  1. 実行時 JNI ブリッジ DLL ファイル comewayruntime.dll を一時ディレクトリにダウンロードします。

  2. comewayruntime.dll を次の場所にコピーします。


    C:\winnt\system32
        or
    C:Windows\system32 (for Windows XP)

    この手順の代わりに、「Integration Server の管理」コンソールを使用して、ダウンロードする comewayruntime.dll の場所をライブラリパスに指定することで、JNI ブリッジ DLL ファイルをライブラリパスに追加することもできます。Integration Server の管理設定エージェントについては、『Enterprise Service Bus Administration Guide』を参照してください。

MSMQ DLL と JNI ファイルのインストール

MSMQ アダプタのインストールには、Enterprise Manager プラグインに加えて、次に示す 2 つの追加コンポーネントが含まれます。これらをダウンロードして MSMQ アダプタ用にインストールしてください。

ProcedureMSMQ DLL と実行時 JNI をダウンロードする

  1. Sun Java Composite Application Platform Suite インストーラの「ダウンロード」タブをクリックします。「リポジトリのダウンロード」リストに、MSMQ DLL と実行時 JNI コンポーネントのリストが表示されます。

  2. 両方のファイルをローカルディレクトリにダウンロードします。msmqjni.jar ファイルを Windows 環境パスに追加する方法については、「実行時 JNI ファイルを追加する」を参照してください。DLL ファイルをアプリケーションサーバープロセスの PATH に追加する方法については、「DLL ファイルを環境パスに追加する」を参照してください。

Procedure実行時 JNI ファイルを追加する

  1. MSMQ アダプタプロジェクトを作成する前に、Suite インストーラからダウンロードした実行時 JNI (msmqjni.jar) を次の場所にコピーします。


          
    JavaCAPS6\netbeans\lib\ext
          JavaCAPS6\appserver\is\lib

    JavaCAPS6 は、Sun Java Composite Application Platform Suite がインストールされているディレクトリです。

    これらのファイルは手動でコピーします。


    注 –

    コマンド行コードジェネレータを配備および実行する前に、msmqjni.jar ファイルを \compile\lib\ext フォルダにコピーしてください。同様に、Sun Java System Application Server Enterprise Edition 8.1 経由で配備、実行する前に、msmqjni.jar ファイルを c:\Sun\ApplicationServer\lib フォルダにコピーしてください。


ProcedureDLL ファイルを環境パスに追加する

MSMQ プロジェクトを実行する前に、Windows の環境システム変数パスに含まれているディレクトリに実行時 win32 ブリッジ DLL ファイルを追加します。正しいファイルが適切なパスに確実に追加されるようにするため、次の手順に従います。

  1. ローカルフォルダにダウンロードした msmqruntimejni.zip ファイルを見つけます。

  2. その ZIP ファイルを Windows 環境パスに含まれているディレクトリに解凍します。

MSMQ メッセージエラーの場合のロールバックの有効化

Procedure アウトバウンド MSMQ メッセージをロールバックする

Java コラボレーション定義でエラーが発生したとき (たとえば、一意のキーを持つと定義されているデータベーステーブルに重複する行を挿入しようとした場合) に、アウトバウンド MSMQ メッセージをロールバックするには、次の手順に従います。

  1. アウトバウンド MSMQ アダプタのコネクティビティーマップのプロパティーで、「MSMQ 接続モード」として「手動」を選択します。

  2. 次の JCD コードを使用します。


    try {
        MSMQClient_1.getEwayConfiguration().setOutMSMQName( "public" );
        MSMQClient_1.getEwayConfiguration().setOutMSMQShareMode( "DENY_RECEIVE_SHARE" );
        MSMQClient_1.getEwayConfiguration().setOutMSMQReceiveActionCode
    ( "ACTION_PEEK_CURRENT" );
        MSMQClient_1.connect();
        MSMQClient_1.getMSMQMessage();
        TestDB_1.getTEST1().insert();
        TestDB_1.getTEST1().setTESTSTRING( "From JCD" );
        TestDB_1.getTEST1().insertRow();
        MSMQClient_1.getEwayConfiguration().setOutMSMQReceiveActionCode
    ( "ACTION_RECEIVE" );
        MSMQClient_1.getMSMQMessage();
        MSMQClient_1.disconnect();
    } catch ( Exception Catch ) {
        MSMQClient_1.disconnect();
    }

    重要なコード項目は太字になっています。例外をキャッチする場合は、try/catch ブロックも使用します (この例では、データベースへの挿入に失敗した場合)。

  3. 次の設定でキューを開きます。

    • MSMQ 共有モード – DENY_RECEIVE_SHARE: ほかのアプリケーションがこのキューを受信モードで開くことができないように、キューをロックします。アプリケーションでキューを閉じるまで、ほかのどのアプリケーションもこのキューを開いてメッセージを受信することはできません。

    • MSMQ 受信アクションコード – ACTION_PEEK_CURRENT: メッセージを「のぞく」(表示する) ことができるようにキューを開きます。

  4. 次に、キューから受信したメッセージでデータベースの更新を試行します。更新に失敗した場合は、手順 7 (キューインスタンスを閉じる) に進みます。正常に更新された場合は、この方法でメッセージをプログラムで受信するようにアダプタ設定プロパティーを変更します。

  5. 次に、メッセージを受信します。これで、メッセージがキューから消去されます。

  6. キューを切断します。

  7. 最後に、MSMQClient_1.disconnect() を使用してキューを閉じます。これで現在のキューインスタンスが閉じられ、キューのロックが解除されます。

Batch Adapter によるコンポーネント間のデータストリーミング

Batch Adapter のコンポーネントにより、「データストリーミング」のための機能が実装されます。ここでは、データストリーミングの動作と、それをアダプタおよび Sun Enterprise Service Bus と組み合わせて使用する方法について説明します。

データストリーミングの概要

データストリーミングでは、アダプタの任意の 2 つのコンポーネントを「データストリームチャネル」という方法で相互に接続します。このチャネルは、Batch Adapter のコンポーネント間でデータを転送する代替手段となります。ストリーミングを使用できるのは、BatchLocalFile と BatchFTP 間、または BatchLocalFile と BatchRecord 間です。

アダプタでは、OTD コンポーネントごとに「ペイロード」ノードがあります。このノードはインメモリーデータを表し、データのサイズが比較的小さいか、メモリーにロード済みであることがわかった場合に使用されます。たとえば、このノードで、構築または解析中のレコード処理 OTD のバッファーや、メモリーに読み込まれたファイルの内容を表すことができます。

Java CAPS のメモリー内でコンポーネント間のデータ移動を一度に全部実行する代わりに、「データストリームチャネル」を利用して、Java CAPS の外でコンポーネント間のデータストリーミングを一度に少しずつ実行することができます。

データストリーミングは、主に大きいファイルを処理するために設計されましたが、サイズの小さいデータにも利用できます。

Netbeans IDE のコラボレーションルールエディタを使用して、データストリーミング処理を設定してください。ここからは、データストリーミング機能とその設定方法について説明します。


注 –

ペイロードベースの転送とストリーミングベースの転送は、相互に排他的です。同じデータに対していずれか一方を使用することはできますが、両方を使用することはできません。


大きいファイルの問題の解決

データストリーミングの主な利点は、大きいファイルの処理に伴う問題の解決に役立つということです。たとえば、多数のレコードを含む 1G バイトのファイルの場合、その解析のためにペイロードをメモリーにロードするだけでも膨大なリソースが消費されます。

ストリーミングでは、データストリーミング機構を使用して、ファイルを少しずつ読み取ることができます。そうすれば、ファイルを Java CAPS システムのメモリーにロードする必要はありません。ストリーミングを使用した処理はインメモリー処理ほど高速ではありませんが、消費されるリソースを大幅に少なくすることができます。

データストリーミングの使用

データストリーミング転送のたびに、次のように 2 つの OTD のコラボレーションが発生します。

ここでは、これら 2 つのデータストリーミング OTD がどのように動作してデータの転送を実現するかについて説明します。

データストリーミング処理

Batch Adapter の各 OTD では、任意の OTD がデータストリーミング転送に関与できるように、ストリームアダプタノードを公開しています。ノードの名前は、InputStreamAdapterOutputStreamAdapter です。ストリームアダプタは、Java CAPS IDE のドラッグ&ドロップ機能を使用して関連付けることができます。

OTD の「InputStreamAdapter」ノード (強調表示) と「OutputStreamAdapter」ノードが、データストリーミングに使用されます。この機能は次のように動作します。

ローカルファイル OTD は常にストリームプロバイダであり、FTP OTD とレコード処理 OTD はコンシューマです。

データストリーミングとペイロードデータ転送の関係

InputStreamAdapter」ノードと「OutputStreamAdapter」ノードの使用は、次に示すように「ペイロード」ノードの使用と代替関係にあります。

データストリーミングを設定すると、ペイロードデータ転送での、「ペイロード」ノードからの「読み取り」を行うすべての処理で、「InputStreamAdapter」ノードが要求されます。これと同じロジックにより、ペイロードデータ転送での、「ペイロード」ノードへの「書き込み」を行うすべての処理で、データストリーミング用の「OutputStreamAdapter」ノードが要求されます。

ストリームアダプタノードを OTD の get() および put() メソッドと混同しないでください。たとえば、BatchFTP OTD のクライアントインタフェース get() メソッドは、ペイロード転送中に「ペイロード」ノードに「書き込み」を行うため、データストリーミングでは書き込み先となる「OutputStreamAdapter」ノードを要求します。これに対し、レコード処理 OTD の get() メソッドは、ペイロード転送中に「ペイロード」ノードから「読み取り」を行うため、データストリーミングで get() は読み取り元となる「inputStreamAdapter」ノードを要求します。

データストリーミングのシナリオ

一般的なデータストリーミングのシナリオは次の 4 つです。

ストリーム消費アダプタ

ここでは、ストリーム消費アダプタの使用方法について説明します。

Procedureストリームを取得する

  1. requestXXStream() メソッドを使用して、対応する XX ストリームを取得します。

Procedureストリームを使用する

  1. ストリームが提供するメソッドを使用して転送を実行します。

Procedureストリームを破棄する

  1. ストリームへの参照をすべて解放します。

  2. releaseXXStream() メソッドを使用して、ストリーム (XX) を解放します。転送後コマンドをサポートする OTD もあります。Success パラメータが、これらのコマンドが実行されるかどうかを示します。ストリームは閉じないでください。

ストリームアダプタのインタフェース

ここでは、Batch Adapter の OTD ストリームアダプタの Java インタフェースについて説明します。この情報は、ストリームアダプタコンシューマまたはストリームアダプタプロバイダ用にカスタム OTD 実装を提供するためのもので、Java プログラミングに精通した上級ユーザー向けです。

インバウンド転送

外部システムからのインバウンド転送は、次の Java プログラミング言語インタフェースでサポートされます。


public interface com.stc.adapters.common.adapter.streaming.InputStreamAdapter {
public java.io.InputStream requestInputStream() throws StreamingException;
public void releaseInputStream(boolean success) throwsStreamingException;
}

アウトバウンド転送

外部システムへのアウトバウンド転送は、次の Java インタフェースでサポートされます。


public interface com.stc.adapters.common.adapter.streaming.OutputStreamAdapter {
public java.io.OutputStream requestOutputStream() throws StreamingException;
public void releaseOutputStream(boolean success) throws StreamingException;
}