次のセクションで、Java CAPS 通信アダプタの概念と参照情報について説明します。ご質問またはご不明な点がありましたら、Java CAPS の Web サイト (http://goldstar.stc.com/support) を参照してください。
COM/DCOM プロジェクトを実行する前に、実行時 JNI ブリッジ DLL ファイル comewayruntime.dll を、アプリケーションサーバープロセスの PATH に追加してください。正しいファイルが適切な PATH に確実に追加されるようにするため、プロジェクトを開始する前に、次の手順を完了してください。
実行時 JNI ブリッジ DLL ファイル comewayruntime.dll を一時ディレクトリにダウンロードします。
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 アダプタのインストールには、Enterprise Manager プラグインに加えて、次に示す 2 つの追加コンポーネントが含まれます。これらをダウンロードして MSMQ アダプタ用にインストールしてください。
MSMQ アダプタ - 実行時 win32 ブリッジ DLL Zip: このファイルには、Windows の環境変数パスにコピーされる多数の必須 DDL ファイルが含まれています。
MSMQ アダプタ - 実行時 JNI: このファイルは、Sun JavaTM Composite Application Platform Suite インストーラを使用してダウンロードしてください。
Sun Java Composite Application Platform Suite インストーラの「ダウンロード」タブをクリックします。「リポジトリのダウンロード」リストに、MSMQ DLL と実行時 JNI コンポーネントのリストが表示されます。
両方のファイルをローカルディレクトリにダウンロードします。msmqjni.jar ファイルを Windows 環境パスに追加する方法については、「実行時 JNI ファイルを追加する」を参照してください。DLL ファイルをアプリケーションサーバープロセスの PATH に追加する方法については、「DLL ファイルを環境パスに追加する」を参照してください。
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 フォルダにコピーしてください。
MSMQ プロジェクトを実行する前に、Windows の環境システム変数パスに含まれているディレクトリに実行時 win32 ブリッジ DLL ファイルを追加します。正しいファイルが適切なパスに確実に追加されるようにするため、次の手順に従います。
Java コラボレーション定義でエラーが発生したとき (たとえば、一意のキーを持つと定義されているデータベーステーブルに重複する行を挿入しようとした場合) に、アウトバウンド MSMQ メッセージをロールバックするには、次の手順に従います。
アウトバウンド MSMQ アダプタのコネクティビティーマップのプロパティーで、「MSMQ 接続モード」として「手動」を選択します。
次の 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 ブロックも使用します (この例では、データベースへの挿入に失敗した場合)。
次の設定でキューを開きます。
MSMQ 共有モード – DENY_RECEIVE_SHARE: ほかのアプリケーションがこのキューを受信モードで開くことができないように、キューをロックします。アプリケーションでキューを閉じるまで、ほかのどのアプリケーションもこのキューを開いてメッセージを受信することはできません。
MSMQ 受信アクションコード – ACTION_PEEK_CURRENT: メッセージを「のぞく」(表示する) ことができるようにキューを開きます。
次に、キューから受信したメッセージでデータベースの更新を試行します。更新に失敗した場合は、手順 7 (キューインスタンスを閉じる) に進みます。正常に更新された場合は、この方法でメッセージをプログラムで受信するようにアダプタ設定プロパティーを変更します。
次に、メッセージを受信します。これで、メッセージがキューから消去されます。
キューを切断します。
最後に、MSMQClient_1.disconnect() を使用してキューを閉じます。これで現在のキューインスタンスが閉じられ、キューのロックが解除されます。
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 のコラボレーションが発生します。
一方が「ストリームアダプタ」を提供する。
もう一方がそのストリームアダプタのコンシューマとなり、データ転送を実行する。
InputStream の実装で、負の数値を引数として持つ skip() をサポートしてください。
ここでは、これら 2 つのデータストリーミング OTD がどのように動作してデータの転送を実現するかについて説明します。
Batch Adapter の各 OTD では、任意の OTD がデータストリーミング転送に関与できるように、ストリームアダプタノードを公開しています。ノードの名前は、InputStreamAdapter と OutputStreamAdapter です。ストリームアダプタは、Java CAPS IDE のドラッグ&ドロップ機能を使用して関連付けることができます。
OTD の「InputStreamAdapter」ノード (強調表示) と「OutputStreamAdapter」ノードが、データストリーミングに使用されます。この機能は次のように動作します。
ストリームアダプタコンシューマ: FTP OTD とレコード処理 OTD は、ストリームアダプタの「コンシューマ」にのみなることができます。したがって、そのストリームアダプタノードは「書き込み専用」です。ノードの値は、「設定」 (変更) できます。
ストリームアダプタプロバイダ: ローカルファイル OTD は、ストリームアダプタの「プロバイダ」にのみなることができるため、そのストリームアダプタノードは「読み取り専用」です。ノードの値は、「取得」できるだけです。
ローカルファイル OTD は常にストリームプロバイダであり、FTP OTD とレコード処理 OTD はコンシューマです。
「InputStreamAdapter」ノードと「OutputStreamAdapter」ノードの使用は、次に示すように「ペイロード」ノードの使用と代替関係にあります。
データストリーミングを行う場合は、これらのストリームアダプタノードを使用してデータを転送します。
データストリーミングを行わない場合は、「ペイロード」ノードを使用してデータを転送します (ペイロードデータ転送)。
データストリーミングを設定すると、ペイロードデータ転送での、「ペイロード」ノードからの「読み取り」を行うすべての処理で、「InputStreamAdapter」ノードが要求されます。これと同じロジックにより、ペイロードデータ転送での、「ペイロード」ノードへの「書き込み」を行うすべての処理で、データストリーミング用の「OutputStreamAdapter」ノードが要求されます。
ストリームアダプタノードを OTD の get() および put() メソッドと混同しないでください。たとえば、BatchFTP OTD のクライアントインタフェース get() メソッドは、ペイロード転送中に「ペイロード」ノードに「書き込み」を行うため、データストリーミングでは書き込み先となる「OutputStreamAdapter」ノードを要求します。これに対し、レコード処理 OTD の get() メソッドは、ペイロード転送中に「ペイロード」ノードから「読み取り」を行うため、データストリーミングで get() は読み取り元となる「inputStreamAdapter」ノードを要求します。
データをローカルファイルシステム (BatchLocalFile) からレコード処理 (BatchRecord) 設定に転送します。このシナリオでは、「InputStreamAdapter」OTD ノードを使用します (「データストリーミングのシナリオ」を参照)。
データをレコード処理 (BatchRecord) 設定からローカルファイルシステム (BatchLocalFile) に転送します。「OutputStreamAdapter」OTD ノードを使用します (「データストリーミングのシナリオ」を参照)。
データをローカルファイルシステム (BatchLocalFile) からリモート FTP (BatchFTP) 設定に転送します。このシナリオでは、「InputStreamAdapter」OTD ノードを使用します (「データストリーミングのシナリオ」を参照)。
データをリモート FTP サーバー (BatchFTP) からローカルファイルシステム (BatchLocalFile) に転送します。「OutputStreamAdapter」OTD ノードを使用します (「データストリーミングのシナリオ」を参照)。
ここでは、ストリーム消費アダプタの使用方法について説明します。
ストリームへの参照をすべて解放します。
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; } |