通信アダプタによる設計

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