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; } |