以降のセクションでは、通信アダプタ用 OTD の開発方法について説明します。次のタスクおよび参照情報を扱っています。
HTTPS OTD は、HTTPSAdapter に固有の OTD です。コラボレーションでインバウンド OTD またはアウトバウンド OTD として使用されます。
OTD は、メソッドおよびプロパティーを含むフィールドから構成されるツリー状の階層データ構造になっています。
OTD の最上位ルート要素は HTTPClientApplication インタフェースで、その下のフィールドには Java メソッドが含まれます。これらの Java メソッドを使用すると、HTTP メッセージ形式を指定して、HTTP サーバーとの間でメッセージングを起動するビジネスルールを作成できます。
他の Java クラスおよびメソッドにアクセスするには、コラボレーションエディタ (Java) を使用すると、HTTPClientApplication で使用可能なコンテンツ全体を活用できます。
HTTP OTD には、HTTP データ交換で使用される次のメソッドが含まれます。
コラボレーション (Java) で HTTP get 要求を HTTP サーバーに送信するために呼び出されるメソッド。
コラボレーション (Java) で HTTP post 要求を HTTP サーバーに送信するために呼び出されるメソッド。
コラボレーション (Java) で、URL の設定、プロパティーの追加など、ヘルパーメソッドに関連する他の「要求」のために呼び出されるメソッド。
コラボレーション (Java) で、応答コード、応答結果、テキスト結果の取得など、ヘルパーメソッドに関連する他の「応答」のために呼び出されるメソッド。
HTTP OTD で使用可能なメソッドの詳細は、HTTPSAdapter の Javadoc を参照してください。
HTTPS サーバー入力 OTD には、Request と Response という 2 つのノードがあります。Request ノードには HTTPS サーバーアダプタが HTTP クライアントから受信するデータが含まれ、Response ノードは HTTP クライアントに送り返す HTTP 応答データを設定するために使用されます。
OTD の Request ノードおよび Response ノードを使用して、HTTPS コラボレーションでロジックを構築します。HTTP サーバーの入力 OTD でsendResponse() メソッドが呼び出されるまで、HTTP 応答は HTTP クライアントに送り返されません。
応答をクライアントに送り返すには、このメソッドを使用することが重要です。このメソッドを使用しないと、クライアントは応答をいつまでも待ち続けます。HTTP では、有効なアプリケーション応答であれ、アプリケーションのエラー応答であれ、応答がクライアントに送信されることが必要です。
次の例は、Request ノードから Method プロパティーを介して HTTP メソッドを取得し、要求から取得された HTTP メソッドを示す HTML 応答を作成し、Response ノードで ContentType プロパティーを「text/html」として設定し、Text プロパティーに HTML 応答を設定してから、構築した応答を HTTP クライアントに送信するために HTTP サーバーの入力 OTD 応答で sendResponse() メソッドを呼び出す簡単な Java コラボレーションを示しています。
OTD には、オブジェクトを定義する一連のルールが含まれます。オブジェクトは、プロジェクトのコラボレーション定義を作成するための基礎として使用される OTD を通過するデータをエンコードします。
各 OTD は、アダプタの固有の機能セットを持つテンプレートとして機能します。バッチアダプタ OTD テンプレートは、カスタマイズ対象外で、編集できません。
OTD は、次の 4 つの部品で構成されます。
要素: 要素は、OTD ツリーの最上位レベルです。要素は、OTD の他の部品を収容する基本的なコンテナです。要素は、フィールドおよびメソッドを含むことができます。
フィールド: フィールドはデータを表すために使用されます。フィールドは、文字列形式、ブール形式、int 形式、double 形式、float 形式のうち、どの形式のデータも含むことができます。
メソッド: メソッドノードは、実際の Java メソッドを表します。
パラメータ: パラメータノードは、Java メソッドのパラメータを表します。
OTD フォルダ構造の上位レベルのビューには、FTP、セキュリティー保護された FTP、バッチレコード、またはローカルファイルデータ交換を呼び出すビジネスルールの作成に使用できるメソッドおよび属性が表示されます。
アダプタで使用可能な、特化された OTD は次の図のとおりです。
表 1–1 バッチアダプタ OTD
OTD 名 |
説明 |
---|---|
BatchFTP |
リモートシステムへの FTP アクセスを提供します。 |
BatchFTPOverSSL |
FTP を SSL 上で使用して、セキュリティー保護されたデータ転送を提供します。 |
BatchSCP |
Secure Shell (SSH) をベースとなるプロトコルとしながら Secure Copy Protocol を使用して、セキュリティー保護されたデータ転送を提供します。 |
BatchSFTP |
SSH ファイル転送プロトコル (SFTP プロトコル) を使用して、セキュリティー保護されたデータ転送を提供します。 |
BatchLocalFile |
ローカルファイルシステムに簡単にアクセスできるようにします。 |
BatchRecord |
アダプタで、指定した形式のレコードのペイロードを解析または作成 (あるいはその両方) できるようにします。 |
BatchInbound |
入力ファイルをポーリングし、ファイルの名前を GUID に変更して、ビジネスプロセスまたはコラボレーションをトリガーします。 |
この章では、これらの各 OTD についてと、各 OTD をアダプタで使用する方法を説明します。
OTD は、コラボレーションで使用され、プラットフォーム、システム、およびプログラム固有の機能を提供して、ビジネスルールの作成を可能にします。
OTD にはシステム固有のパラメータが含まれ、これらのパラメータはプロパティーエディタを使用して設定できます。
OTD は、特定の外部アプリケーションとのインタフェースに必要な情報へのアクセスを提供します。
すべての OTD は、Netbeans IDE を使用して設定および管理します。これらの OTD に関連するすべてのクライアントコンポーネントには、独自の要件があります。詳細は、クライアントシステムのマニュアルを参照してください。
BatchFTP、BatchLocalFile、および BatchRecord OTD の場合、(プロパティーエディタの) 環境プロパティーまたは接続マッププロパティーに対応するセクションがあるノードのみが、OTD 上に実装されます。残りのノードは実装されず、将来の使用に備えて予約されます。
BatchFTP、BatchLocalFile、および BatchRecord OTD の場合、(プロパティーエディタの) 環境プロパティーまたは接続マッププロパティーに出現する設定パラメータのみが OTD での使用をサポートされます。残りの設定パラメータは実装されず、将来の使用に備えて予約されます。実装済み設定パラメータは、実装されていないノードからアクセスおよび使用できることがありますが、こうした使用方法はお勧めしません。
バッチアダプタには、FTP データ転送機能の実行を可能にする 4 つの OTD が含まれます。BatchFTP OTD を使用すると、Sun Enterprise Service Bus システムは、ファイルに格納されたオブジェクトを受信および配信する目的で他のネットワークホストとデータを交換できます。また、BatchFTPOverSSL、BatchSCP、および BatchSFTP OTD を使用すると、SSL または SSH 上で FTP を使用して、ローカルホストとリモートホスト間でデータを安全に転送できます。
BatchFTP OTD には、Client、Configuration、Provider、State、および StateManager という 5 つの上位レベルノードが含まれます (次の図を参照)。これらのノードを展開すると、サブノードが表示されます。
OTD の Configuration ノードの各フィールドサブノードは、アダプタの FTP 設定パラメータのいずれかに対応します。
この OTD には、さらに 2 つの上位レベルノード、Client および Provider が含まれます。これらのノードは、アダプタのそれぞれの機能インタフェースを実装します。
クライアントインタフェースは、プロバイダの機能が実際に使用される方法です。
プロバイダインタフェースは、OTD が実行できる一般的な FTP 処理のすべてを表します。
次のリストは、BatchFTP OTD の各ノードについて、主要機能などを説明しています。
BatchFTP: OTD のルートノードを表します。
Configuration: このノード内の各フィールドサブノードは、アダプタの設定パラメータに対応し、設定情報を含みます。
InputStreamAdapter および OutputStreamAdapter: OTD のデータストリーミング機能を使用および制御できます。
この OTD には、正規表現を使用できる設定パラメータがあります。詳細は、「バッチアダプタでの正規表現の使用法」を参照してください。
Client: このノードには、アダプタのクライアントインタフェースを OTD に実装する (FtpFileClient) 次のサブノードが含まれます。
Payload: FTP で転送するペイロード、つまりメッセージデータをバイト配列の形で含むインメモリーバッファー。
UserProperties: ユーザー定義の FtpFileClient インタフェース実装を指定している場合のみ使用します。こうした場合、ノードは、設定で指定したプロパティーを表します。
データは、Payload ノードを使用するか、またはデータストリーミング (InputStreamAdapter および OutputStreamAdapter ノード) を使用して転送できますが、同じ OTD 内で両方の方法を使用することはできません。
ResolvedNamesForGet および ResolvedNamesForPut: 転送時に、使用されている実際のファイル名またはディレクトリ名を取得し、名前に対して処理を実行できます。たとえば、get() または put() と組み合わせて、実際の名前を使用してファイル転送を実行できます。実際のファイル名またはディレクトリ名が正規表現または特殊文字を使用して表現されていても取得できます。
これらのノードには、ターゲット転送先のファイル名およびディレクトリ名と、転送前および転送後コマンドの名前を解決できるサブノードが含まれます。これらのノードの詳細は、ファイル転送前/転送後コマンド、「名前の解決」を参照してください。また、正規表現の詳細は、「バッチアダプタでの正規表現の使用法」を参照してください。
get()、put()、reset() 、connect()、disconnect()、および isConnected(): 「基本的な BatchFTP OTD メソッド」を参照してください。
Provider: このノードに含まれるサブノードは、アダプタのプロバイダインタフェースをこの OTD に実装する (FtpFileProvider) メソッドです。これらのメソッドを使用すると、OTD を使用して実行できる一般的な FTP 処理を実行できます。
BatchFTP OTD ノードを使用すると、FTP 処理を制御するコラボレーションの特定のアダプタ設定パラメータを設定できます。いったん設定パラメータを設定したら、このコラボレーションを使用する各該当アダプタコンポーネントで同じパラメータを定義する必要がありません。
BatchFTP OTD の Payload ノードは、バイト配列 (byte[] ) として定義済みです。この定義により、アダプタはバイナリデータと文字データの両方を処理できます。
たとえば、「data」ノードが String (java.lang.String) として定義されている別の OTD (別のアダプタの OTD や、ユーザーが定義した OTD など) を使用できます。その String を BatchFTP OTD の Payload ノードにマップすると、コラボレーションエディタは、自動的に型変換を行い、次の例に示したようなコードを作成します。
この機能は注意して使用してください。これは、多くの状況で機能しますが、デフォルトのエンコーディングが変換でエラーを引き起こすことがあります。
たとえば、文字列からバイトへの配列変換 (またはその逆) で生成される Java コードは次のようになります。
getoutput().setPayload(STCTypeConverter.toByteArray (getinput().getBlob())); |
または
getinput().setBlob(STCTypeConverter.toString (getoutput().getPayload())); |
ブロブデータをバイト配列として定義した場合、型変換は不要です。変換が必要な場合、コラボレーションエディタは、前の例に示しているように、Java 仮想マシン (JVM) のデフォルトエンコーディングを使用してコードへの変換を実行します。
前に説明したように、デフォルトエンコーディングおよび変換は、多くの状況で機能します。ただし、たとえば .zip ファイルのようなバイナリデータで、エンコーディングが変換でエラーを引き起こすことがあります。データ文字セットと JVM のデフォルトエンコーディングに応じて、適切なエンコーディングを選択してください。ほとんどの場合、エンコーディング文字列「ISO-8859-1」を使用するのが最善の選択です。
このエンコーディングを使用するには、エンコーディング文字列を追加することによってコードを手作業で変更します。前の例では、「ISO-8859-1」を使用するコードは次のようになります。
getoutput().setPayload(STCTypeConverter.toByteArray (getinput().getBlob(), "ISO-8859-1")); |
または
getinput().setBlob(STCTypeConverter.toString (getoutput().getPayload(), "ISO-8859-1")); |
この文字列を使用すると、この型変換の問題が解決されます。詳細は、該当する JVM エンコーディングのリファレンスマニュアルを参照してください。
フィールド要素に加えて、BatchFTP OTD の Client ノードには、アダプタのクライアントインタフェース機能を拡張するメソッドが含まれます。これらのメソッドは、OTD の適切な使用に不可欠であるため、ここで詳しく説明します。次のメソッドがあります。
get(): リモート FTP サーバーからファイルを取得し、その内容をデータペイロードとして格納します。このメソッドは、Target Directory Name および Target File Name パラメータに基づいて一致する最初のファイルを取得し、その内容をデータペイロード (バイト配列) として格納します。次にすべての転送後コマンドを実行します。
このメソッドを呼び出したあとに、メソッド getPayload() を介してペイロードの内容を取得できます。
取得対象のファイルがない場合、入れ子にされた例外として java.io.FTPFileException を含む例外を受け取ります。
put(): ペイロードのデータを FTP サーバーに配置します。つまり、Payload ノードからリモート FTP サーバーに追加アクション、つまり出力アクションを実行し、次にすべての転送後コマンドを実行します。
送信対象のファイルがない場合、入れ子にされた例外として java.io.FTPFileException を含む例外を受け取ります。
アダプタのデータストリーミング機能を使用している場合、get() と put() メソッドは異なる処理をします。この処理の詳細は、「Batch Adapter によるコンポーネント間のデータストリーミング」セクションを参照してください。
reset(): Client ノードを前に実行した初期設定の直後の状態に戻します。
reset() メソッドは、Batch FTP OTD と BatchLocalFile OTD の両方で使用できます。reset メソッドは、同一の executeBusinessRules() の実行中に別の転送用に OTD を再使用しなければならない場合に呼び出してください (たとえば、動的構成機能を使用しているとき)。reset() メソッドは、OTD 全体をリセットせずに、Client ノードの内容をリセットします。まず reset() を呼び出さずに別の転送を試みると、システムは例外をスローし、アダプタのエラーログファイルにエントリを作成します。
restoreConfigValues(): 設定パラメータのデフォルトを関連アダプタ設定に復元できます。
connect()、disconnect()、および isConnected(): FTP サーバーに関する接続関連の処理を実行します。
シーケンス番号付け機能を使用すると、FTP のターゲットディレクトリ名またはファイル名がシーケンス番号を含むように設定できます。OTD のアダプタ設定パラメータを使用して、開始シーケンス番号および最大シーケンス番号を設定できます。
このパラメータは、名前パターン %# に使用します。
また、この機能は BatchLocalFile OTD でも使用できます。これらの設定パラメータの詳細は、「シーケンス番号付け」 (BatchFTP 接続マップ) を参照してください。
また、BatchFTP OTD では、ファイル転送処理の直前または直後に実行するコマンドを入力できます。詳細は、「ファイル転送前/転送後コマンド」のセクションを参照してください。
SSL 上のセキュリティー保護されたバッチ FTP OTD (BatchFTPOverSSL) は、Secure Sockets Layer (SSL) プロトコルを使用して、セキュリティー保護されたデータ転送を提供します。
外部 FTP サーバー、SSL サーバーなどの設定については、アプリケーションのマニュアルを参照してください。
BatchFTPOverSSL OTD には、Client と Configuration という 2 つの上位レベルノードが含まれます (次の図を参照)。これらのノードを展開すると、サブノードが表示されます。
次のリストは、BatchFTPOverSSL OTD の各ノードについて、主要機能などを説明しています。
BatchFTPOverSSL: OTD のルートノードを表します。
Configuration ノードの下にある BatchFTPOverSSL のサブノードは、BatchFTPOverSSL アダプタの接続マップ設定パラメータおよび環境設定パラメータに対応します。
Client ノードには、OTD にアダプタのクライアントインタフェースを実装するサブノードが含まれます。BatchFTPOverSSL Client ノードには、次のメソッドが含まれます。
append(): 追加モードでデータをリモートに転送します。データの転送元は、設定パラメータ Local Directory および Local File で決まります。両方とも空の場合、ペイロードのデータが転送されます。
connect(): FTP サーバーに接続し、設定どおりに認証を行います。
deleteDir(String dir): 引数で指定されたとおりにリモートディレクトリを削除します。
deleteFile(String path): 引数で指定されたとおりにリモートファイルを削除します。
disconnect(): FTP サーバーから接続を切り離します。
doRawCommands(String commands): raw コマンドを指定します。
download(): データをリモート (設定パラメータ Remote Directory および Remote File に指定) からローカル (設定パラメータ Local Directory および Local File に指定) へダウンロードします。
get(): 設定パラメータ Remote Directory および Remote File で指定されたファイルまたはディレクトリを、設定パラメータ Local Directory および Local File で指定されたローカルにコピーします。設定パラメータ、Is Copy Recursive を Yes に設定すると、コピーは再帰的に行われます。
getEntry(): 現在のエントリリスト内のインデックスエントリを取得します。
getEntryCount(): listDir または listDirLong を呼び出した結果としてディレクトリエントリの数を返します。
getLastReply(): FTP 応答コードを文字列として取得します。
getPayload(): ペイロードを返します。
hasEntry(): ディレクトリリストの結果リストのエントリよりも多い場合 (結果リストが空になったとき) は false を返し、ふたたび結果リストを反復するために resetEntries を呼び出します。
getResolvedLocalDirectory(): 解決されたローカルディレクトリ名を返します。
getResolvedLocalFile(): 解決されたローカルファイル名を返します。
getResolvedRemoteDirectory(): 解決されたリモートディレクトリ名を返します。
getResolvedRemoteFile(): 解決されたリモートファイル名を返します。
hasEntry(): 現在のエントリリストにエントリがあるかどうかを返します。
isConnected(): Java Integration Suite が FTP サーバーに接続されているかどうかを判断します。
listDir(): リモートディレクトリ (設定パラメータ Remote Directory および Remote File に指定) の下のエントリを返します。エントリには名前のみが含まれます。このメソッドを呼び出した後、エントリ情報を反復するには、hasEntry、nextEntry、getEntry、getEntryCount などのメソッドを使用します。
listDirLong(): リモートディレクトリ (設定パラメータ Remote Directory および Remote File で指定) の下のエントリを返します。エントリには、name、size、time stamp、is directory or not などの詳細が含まれます。このメソッドを呼び出した後、エントリ情報を反復するには、hasEntry、nextEntry、getEntry、getEntryCount などのメソッドを使用します。
mkdir(String dir): リモート上にディレクトリを作成します。ディレクトリの名前は、設定パラメータに指定します。
nextEntry(): 結果リスト内の次のエントリを返します。
put(): get と同じですが、データ転送の方向はローカルからリモートに向けてです。
renameFile(String newName): 設定パラメータ Remote Directory および Remote File で指定されたファイルの名前を新しい名前 (引数) に変更します。
reset(): ペイロードバッファーの破棄などの内部ライフサイクルメソッドをリセットします。
resetEntries(): 結果リストの反復子をふたたび反復できるようにリセットします。
resolveLocalAsDestination(): ローカルディレクトリ名およびローカルファイル名がパターン (データ転送先の実際のディレクトリ名およびファイル名を生成するために使用) の場合に、名前を解決します。生成は解決の成功時に行われます。
resolveLocalAsSource(): ローカルディレクトリおよびローカルファイルが正規表現 (データ転送元に対するフィルタ) の場合に、名前を解決します。フィルタは解決の成功時に行われます。
resolveRemoteAsDestination(): リモートディレクトリ名およびリモートファイル名がパターン (データ転送先の実際のディレクトリ名およびファイル名を生成するために使用) の場合に、名前を解決します。生成は解決の成功時に行われます。
resolveRemoteAsSource(): リモートディレクトリおよびリモートファイルが正規表現 (データ転送元に対するフィルタ) の場合に、名前を解決します。フィルタは解決の成功時に行われます。
setpayload(byte[] newPayload): 引数で指定されたとおりにペイロードを設定します。
setResolvedLocalDirectory(String s): 解決されたローカルディレクトリ名を設定します。
setResolvedLocalFile(String s): 解決されたローカルファイル名を設定します。
setResolvedRemoteDirectory(String s): 解決されたリモートディレクトリ名を設定します。
setResolvedRemoteFile(String s): 解決されたリモートファイル名を設定します。
upload(): データをローカル (設定パラメータ Local Directory および Local File に指定) からリモート (設定パラメータ Remote Directory および Remote File に指定) へアップロードします。
公開されたすべての FTPOverSSLClient メソッドのリストについては、バッチアダプタの Javadoc を参照してください。
セキュリティー保護されたバッチ SFTP OTD (BatchSFTP) は、SSH ファイル転送プロトコル、つまり SFTP を使用して、セキュリティー保護されたデータ転送を提供します。SFTP には、中断された転送の再開、ディレクトリリスト、リモートファイルの削除など、リモートファイルに対するさまざまな処理が備わっています。
SFTP は、Secure Shell (SSH) プロトコルを使用して、ローカルとリモートホスト間、または 2 つのリモートホスト間でコンピュータファイルをセキュリティーで保護しながら転送する手段の 1 つです。BatchSFTP OTD は、SFTP を使用して、ファイルをリモートホストにコピーするか、またはリモートホストからコピーします。
BatchSFTP OTD には、Client と Configuration という 2 つの上位レベルノードが含まれます (次の図を参照)。これらのノードを展開すると、サブノードが表示されます。
次のリストは、BatchSFTP OTD の各ノードについて、主要機能などを説明しています。
BatchSFTP: OTD のルートノードを表します。
Configuration ノードの下にある BatchSFTP のサブノードは、BatchSFTP アダプタの接続マップ設定パラメータおよび環境設定パラメータに対応します。
BatchSFTP OTD の Client ノードには、次のメソッドが含まれます。
cd(String dir): リモートのカレントディレクトリを指定されたパスに変更します。
connect(): リモートの SSH サーバーに接続し、設定どおりに認証を行います。
delete(): 設定パラメータ RemoteDirectory および RemoteFile で指定されたリモートファイルを削除します。
delete(String file): ファイルで指定されたリモートファイルを削除します。
disconnect(): クライアントをリモートの SSH サーバーから切り離します。
get(): データをリモートの SSH サーバー (設定パラメータ RemoteDirectory および RemoteFile で指定) からローカルマシンにコピーします。現在の設定の状態に応じて、リモートデータは、(メモリーバッファー内の) ペイロードに、または設定パラメータ LocalDirectory および LocalFile で指定したローカルファイルに格納できます。
フォルダもリモートとして許可されます。この場合、設定パラメータ Recursive が「Yes」の場合、フォルダ階層がローカルの転送先にコピーされます。
getEntry(int index): 現在のエントリリスト内のインデックスエントリを取得します。
getEntryCount(): 現在のエントリリスト内のエントリ数を返します。
getPayload(): ペイロードを返します。
BatchSFTP OTD を使用している場合に getPayload() を呼び出し、Local Directory および Local Filename を設定していると、getPayload() は、ファイルが取得された場合も null を返します。
getResolvedLocalDirectory(): 解決されたローカルディレクトリ名を返します。
getResolvedLocalFile(): 解決されたローカルファイル名を返します。
getResolvedRemoteDirectory(): 解決されたリモートディレクトリ名を返します。
getResolvedRemoteFile(): 解決されたリモートファイル名を返します。
hasEntry(): 現在のエントリリストにエントリがあるかどうかを返します。
isConnected(): Java Integration Suite が SSH サーバーに接続されているかを判断します。
lcd(String dir): ローカルのカレントディレクトリを変更します。
listDir(): リモートのカレントディレクトリの下にあるすべてのエントリを一覧表示します。
lpwd(): ローカルの現在のパスを返します。
mkdir(): リモート上にディレクトリを作成します。ディレクトリの名前は、プロパティーに指定します。
mkdir(String dir): 設定パラメータ、Remote Directory および Remote File に指定された名前を使用して、リモート上にディレクトリを作成します。
nextEntry(): 現在のエントリリスト内の次のエントリを返します。
put(): ローカルデータ (設定パラメータ LocalDirectory および LocalFile で指定) をリモートの SSH サーバー (設定パラメータ RemoteDirectory および RemoteFile で指定) にコピーします。現在の設定の状態に応じて、ペイロードまたはローカルファイルのローカルデータをコピー元にすることができます。
フォルダもローカルとして許可されます。この場合、設定パラメータ Recursive が「Yes」の場合、フォルダ階層がリモートの転送先にコピーされます。
pwd(): リモートの現在のパスを返します。
rename(String newPath): 古い名前 (最初の引数) で指定されたファイルまたはディレクトリの名前を、新しい名前 (2 番目の引数) に変更します。
rename(String oldPath, String newPath): 設定パラメータ、Remote Directory および Remote File で指定されたファイルまたはディレクトリの名前を新しい名前 (引数) に変更します。
reset(): ペイロードバッファーの破棄などの内部ライフサイクルメソッドをリセットします。
resetEntries(): 現在のエントリリストをリセットして、次回 nextEntry() を呼び出すとリスト内の最初のエントリが返されるようにします。
resolveLocalAsDestination(): ローカルディレクトリ名およびローカルファイル名がパターン (データ転送先の実際のディレクトリ名およびファイル名を生成するために使用) の場合に、名前を解決します。生成は解決の成功時に行われます。
resolveLocalAsSource(): ローカルディレクトリおよびローカルファイルが正規表現 (データ転送元に対するフィルタ) の場合に、名前を解決します。フィルタは解決の成功時に行われます。
resolveRemoteAsDestination(): リモートディレクトリ名およびリモートファイル名がパターン (データ転送先の実際のディレクトリ名およびファイル名を生成するために使用) の場合に、名前を解決します。生成は解決の成功時に行われます。
resolveRemoteAsSource(): リモートディレクトリおよびリモートファイルが正規表現 (データ転送元に対するフィルタ) の場合に、名前を解決します。フィルタは解決の成功時に行われます。
setpayload(byte[] newPayload): ペイロードを設定します。
setResolvedLocalDirectory(String s): 現在の解決されたローカルディレクトリ名を設定します。
setResolvedLocalFile(String s): 現在のローカルファイル名を s に設定します。ユーザーのコラボレーションから直接呼び出さないでください。
setResolvedRemoteDirectory(String s): 現在の解決されたリモートディレクトリ名を設定します。
setResolvedRemoteFile(String s): 現在の解決されたリモートファイル名を設定します。
公開されたすべての SFTPClient メソッドのリストについては、バッチアダプタの Javadoc を参照してください。
セキュリティー保護されたバッチ SCP OTD (BatchSCP) は、Secure Shell (SSH) をベースとなるプロトコルとしながら Secure Copy Protocol を使用して、セキュリティー保護されたデータ転送を提供します。SCP は RCP (遠隔コピー) に似ていますが、RSH (リモートシェル) ではなく Secure Shell (SSH) 上でファイルがコピーされる点が異なります。ファイルが SCP を使用してコピーされると、データは転送中に暗号化されます。
外部 FTP サーバー、SSH サーバーなどの設定については、アプリケーションのマニュアルを参照してください。
BatchSCP OTD には、Client と Configuration という 2 つの上位レベルノードが含まれます (次の図を参照)。これらのノードを展開すると、サブノードが表示されます。
次のリストは、BatchSCP OTD の各ノードについて、主要機能などを説明しています。
BatchSCP: OTD のルートノードを表します。
Configuration ノードの下にある BatchSCP のサブノードは、BatchSCP アダプタの接続マップ設定パラメータおよび環境設定パラメータに対応します (次の図を参照)。
BatchSCP OTD の Client ノードには、次のメソッドが含まれます。
connect(): SSH サーバーに接続し、設定どおりに認証を行います。
disconnect(): SSH サーバーから接続を切り離します。
get(): 設定パラメータ、Remote Directory および Remote File で指定されたファイルまたはディレクトリを、設定パラメータ Local Directory および Local File で指定されたローカルにコピーします。設定パラメータ、Is Copy Recursive を Yes に設定すると、コピーは再帰的に行われます。
getPayload(): ペイロードバッファーをバイト配列として返します。
getRecursive(): 設定パラメータ Recursive を「Yes」に設定してデータをリモートからローカルにコピーします。
isConnected(): クライアントが SSH サーバーに接続されているかを確認します。
put(): ローカルデータ (設定パラメータ LocalDirectory および LocalFile で指定) をリモートの SSH サーバー (設定パラメータ RemoteDirectory および RemoteFile で指定) にコピーします。
putRecursive(): 設定パラメータ Recursive を「Yes」に設定してデータをローカルからリモートにコピーします。
setpayload(byte[] newPayload): ペイロードを設定します。
公開されたすべての SCPClient メソッドのリストについては、バッチアダプタの Javadoc を参照してください。
BatchLocalFile OTD は、ローカルシステム上のファイルへのアクセスを提供します。Sun Enterprise Service Bus では、ファイルアクセスは必ずしも必要ではありませんが、ファイル処理はバッチアダプタの中核機能の 1 つであるため、バッチアダプタにはファイルアクセス機能が備わっています。
その他に BatchLocalFile の機能として、ファイルにアクセスするための正規表現、ファイルを作成するためのシーケンス番号付け方法などがあります。
BatchLocalFile OTD には、Client、Configuration、PersistentState、および State Manager という 4 つの上位レベルノードが含まれます (次の図を参照)。これらのノードを展開すると、サブノードが表示されます。
各 Batch OTD と同様に、BatchLocalFile OTD の Configuration ノードの下にある各フィールドサブノードは、この OTD のアダプタの設定パラメータのいずれかに対応します。詳細は、BatchLocalFile の接続マッププロパティーを参照してください。
この OTD には、さらに上位レベルノード、Client が含まれます。このノードは、アダプタの各機能インタフェースを実装します。
クライアントインタフェースは、OTD の機能が実際に使用される方法です。この機能には、OTD の基本的な処理および機能が含まれます。クライアントインタフェースは、OTD のファイルサービスを提供します。
次のリストは、BatchLocalFile OTD のノードについて、主要機能などを説明しています。
Configuration: このノード内のフィールドサブノードは、アダプタの設定パラメータに対応し、対応する設定情報を含みます。こうしたパラメータおよび設定の詳細は、BatchLocalFile の接続マッププロパティーのセクションを参照してください。
この OTD には、正規表現を使用できる設定パラメータがあります。詳細は、「バッチアダプタでの正規表現の使用法」を参照してください。
Client: このノードに含まれる次のサブノードは、OTD にアダプタのクライアントインタフェース (LocalFileClient) を実装します。
ResolvedNamesToGet および ResolvedNamesToPut: 転送時に、使用されている実際のファイル名またはディレクトリ名を取得し、名前に対して処理を実行できます。たとえば、get() または put() と組み合わせて、実際の名前を使用してローカルファイル転送を実行できます。実際のファイル名またはディレクトリ名を、正規表現または特殊文字を使用して表現されていても取得できます。これらのノードには、ターゲットの転送先のファイル名およびディレクトリ名と、転送前および転送後コマンドの名前を解決できるサブノードが含まれます (詳細は、「ファイル転送前/転送後コマンド」のセクションを参照)。
これらの機能の詳細は、「バッチアダプタでの正規表現の使用法」および「バッチアダプタでの名前パターンの使用法」を参照してください。
InputStreamAdapter および OutputStreamAdapter: OTD のデータストリーミング機能を使用および制御できます。詳細は、「コンポーネント間でのデータのストリーミング」セクションを参照してください。
Payload: ローカルファイル転送するペイロードまたはメッセージデータをバイト配列の形式で含むインメモリーバッファー。
get()、put()、および reset(): 「基本的な BatchLocalFile OTD メソッド」を参照してください。
ResumeReadingInProgress: このノードを使用すると、なんらかの理由で中断されたデータストリーミングのファイル転送処理を再開できます。こうした転送は 1 つ 1 つ行われ、通常、大規模ファイルが関与します。この機能を使用すると、転送が中止されたときに途切れた同じ箇所から再開できます。
データは、Payload ノードを使用するか、またはデータストリーミング (InputStreamAdapter および OutputStreamAdapter ノード) を使用して転送できますが、同じ OTD 内で両方の方法を使用することはできません。
このセクションでは、BatchLocalFile OTD の機能を使用する方法を説明します。
BatchLocalFile OTD で実行できる呼び出しは、特定の順序である必要はありません。ただし、1 つのコラボレーションルールの実行で複数の転送を行う場合、1 つの転送が終了するごとに reset() を呼び出す必要があります。複数のファイルを転送する動的なバッチ順はこのケースに当てはまります。
Java コラボレーションを使用して、BatchLocalFile インタフェースを使用しながらシーケンス番号を持つ複数のファイルを生成している場合は、reset() メソッドを呼び出して、1 つのファイルの終わりと、次のファイルの開始を示してください。
BatchLocalFile OTD を使用してローカルファイルからレコードを読み取ることには、次の利点があります。
データストリーミング: BatchFTP OTD またはレコード処理 OTD と組み合わせて使用すると、アプリケーションにおいて、ローカルファイルシステムとの間でデータを直接ストリームできます。この機能によって、ファイル全体がメモリーにロードされることがないため、大規模ファイルを読み取るときに必要な RAM を最小限に抑えることができます。
読み取りの再開: データストリーミングを使用しているときに、アプリケーションにおいて大規模ファイルを後続の複数のビジネスルールの実行で読み取ることができます。この処理は、現在の成功したファイル読み取り処理についての情報を維持し、最後に格納された位置から次の読み取り処理を再開することで実現されます。
アダプタには、実際のファイル転送の直前または直後にアクションを実行できる機能があります。これらの設定をアダプタの設定パラメータ、または対象の OTD の Configuration ノードに入力できます。
これらの機能は、BatchLocalFile OTD と BatchFTP OTD の両方で使用できます。
転送前コマンド
インバウンド転送の場合、ターゲットシステムをポーリングしている他のクライアントに対して、同じディレクトリおよびファイルパターンまたは名前でファイルを使用できないようにすることができます (Rename)。アウトバウンド転送の場合、既存のファイルの自動バックアップを作成できます (Copy)。
次の転送前オプションがあります。
Rename: ターゲットファイルの名前を保護または復旧のために変更します。希望するディレクトリ名およびファイル名を指定します。まだ存在しないディレクトリは作成されます。
Copy: バックアップまたは復旧のためにターゲットファイルをコピーします。希望するディレクトリ名およびファイル名を入力します。
None: 何もしません。
Rename を使用している場合に、転送先ファイルがすでに存在すると、FTP サーバーによって動作が異なることがあります。たとえば、一部の UNIX FTP サーバーでは、転送先ファイルが必ず上書きされます。つまり、エラーメッセージや警告メッセージは表示されません。Windows XP サーバーなどの他の FTP サーバーでは、システムによってエラーが生成され、呼び出された OTD メソッドで例外がスローされます。該当する FTP サーバー固有の動作をよく確認してください。不確かな場合は、コマンドプロンプトでアクションを試してください。アクションによってエラーメッセージが表示された場合、コラボレーションで例外がスローされると考えられます。
適切に保護、バックアップ、または復旧を行うには、目的にかなった適切な設定を選択します。たとえば、アウトバウンドの追加転送での失敗から復旧する場合は、Copy 設定を使用します。ファイル名およびディレクトリ名を指定するときに、正規表現、特殊文字のいずれか、または両方を使用できます。
転送後コマンド
インバウンド転送の場合、自動バックアップを作成することで、転送済みファイルを「消費済み」として指定したり (Rename)、永久に破棄したり (Delete) することができます。アウトバウンド転送の場合、転送済みファイルの名前を変更することで、そのファイルを他のクライアントで使用できるようにすることができます。ファイル名およびディレクトリ名を指定するときに、正規表現、特殊文字のいずれか、または両方を使用できます。
次の転送後オプションがあります。
Rename: 転送済みファイルの名前を変更します。希望するディレクトリおよびファイル名を指定します。
Delete: 転送済みファイルを削除します (インバウンド転送のみ)。
None: 何もしません。
アウトバウンド転送 (パブリッシング) の場合、まだ存在しないディレクトリは作成されます。
転送前コマンドおよび転送後コマンドの詳細は、次を参照してください。
BatchFTP OTD
転送前 (BatchFTP 接続マップ)
転送後 (BatchFTP 接続マップ)
BatchLocalFile OTD
転送前 (BatchLocalFile 接続マップ)
転送後 (BatchLocalFile 接続マップ)
フィールド要素に加えて、BatchLocalFile OTD の Client ノードには、アダプタのクライアントインタフェース機能を拡張するメソッドが含まれます。これらのメソッドは、OTD の適切な使用に不可欠です。メソッドは次のとおりです。
get(): ローカルファイルを取得し、その内容をデータペイロードとして格納します。このメソッドは、Target Directory Name および Target File Name パラメータに基づいて一致する最初のファイルを取得し、その内容をデータペイロード (バイト配列) として格納します。次にすべての転送後コマンドを実行します。
このメソッドを呼び出した後に、メソッド getPayload() を介してペイロードの内容を取得できます。
put(): データペイロードを (バイト配列として) ファイルに格納します。次にすべての転送後コマンドを実行します。
このメソッド呼び出しを使用する前に、メソッド setPayload() を使用してファイルの内容を設定してください。
このメソッドは、エラーが発生すると、例外 (LocalFileException) をスローします。
reset(): Client ノードを前に実行した初期設定の直後の状態に戻します。
reset() メソッドは、BatchFTP OTD と BatchLocalFile OTD の両方で使用できます。reset() メソッドは、同一の executeBusinessRules() の実行中に別の転送に OTD を再使用しなければならない場合に呼び出してください (たとえば、動的構成機能を使用しているとき)。reset() メソッドは、OTD 全体をリセットせずに、Client ノードの内容をリセットします。
この機能の目的は、アプリケーションで、大規模ファイル全体を 1 度に処理するのではなく、分けて読み取れるようにすることです。読み取りの再開を使用すると、データストリーミングを使用しているときに、システムにおいてファイルを後続の複数のビジネスルールの実行で読み取ることができます。
全体の処理
読み取りの再開機能の処理は、現在の成功したファイル読み取り処理、ブレークについての持続的な情報を維持し、最後に格納されたブレーク位置から次の読み取り処理を再開することで実現されます。その結果、現在のファイルは分けて読み取られ、各部分の開始および終了は、定義済みのブレーク条件によって判断されます。
ブレーク条件は、ビジネスルールの定義を通じて決定します。読み取りの再開機能は、1 つのビジネスルールで 1 度にファイルの一部分を読み取ることを基本として動作するため、これらのルールでブレークを決定します。各ビジネスルールは、ファイルの一部分の読み取りを実行し、ブレークして、次のルールに移動します。次のルールは、次の部分をブレークまで読み取り、以降、ファイル全体が読み取られるまで続けられます。
ブレーク条件は、コラボレーションルールで決定する、任意の種類の停止ポイントにすることができます。たとえば、この条件は、一定数のレコードにしたり、区切り記号にしたり、または特定の文字列に到達したときにしたりできます。
OTD の Client ノードには読み取り専用のプロパティー (ResumeReadingInProgress ノード) があり、進行中の読み取りの再開処理があるかどうかを示します。このノードは、情報提供のみを目的としています。また、読み取りの再開機能は、データストリーミングモードでのみ使用できます。
この機能には、アダプタの設定オプションを設定するほかには、特別な処理上の要件はありません。アダプタ設定には、この機能を有効または無効にするオプションがあります。このオプションには、実行時にもアクセスできます。
この機能を有効にすると、アダプタは、常に、進行中の読み取りの再開処理があるかどうかを最初に確認します。この機能が進行中でない場合、アダプタは、アダプタの設定に基づいて次のファイルを判断します。
段階ごとの処理
図 1–11 は、読み取りの再開機能がファイルの転送前/転送後コマンドと同調して処理を実行する方法を示しています。この例では、コラボレーションは、同じビジネスルールを 4 回実行します。ビジネスルールが実行されるごとに、コラボレーションはファイルの別のセクションを読み取ります。コラボレーションは、最後のレコードを読み取ると、転送後コマンドを実行します。
この例では、読み取りは次の段階で起こります。
アダプタは、ファイルの読み取りを開始し、データを部分的に読み取った後 (パート 1 の終わり) でブレーク条件に達します。アダプタの転送前コマンドはすでに実行されています。読み取りの再開状態が格納され、転送後コマンドは実行されません。アダプタは、ビジネスルールの次の実行を待機します。
読み取りの再開処理は進行中ですが、データの部分的な読み取りを達成しただけです。アダプタは、1 つのブレーク条件から次のブレーク条件までを読み取ります (図のパート 2 とパート 3)。それぞれのケースで読み取りの再開状態が格納され、アダプタは、1 部分読み取るごとに 1 回ビジネスルールを実行します。
読み取りの再開処理は進行中で、ビジネスルールの最後の実行時にデータの読み取りを完了します (パート 4)。アダプタは、ブレーク条件からファイルの末尾までを読み取ります。読み取りの再開状態は格納されず、次にすべての転送後コマンドが実行されます。
前のすべての段階で、ビジネスルールは繰り返し実行され、ファイルの現在の読み取り位置は、実行ごとに変化します。ファイルが図のパート 1 よりも小さい場合、アダプタはブレーク条件に達しません。通常の処理が行われ、読み取りの再開状態は格納されません。転送前コマンドおよび転送後コマンドが実行されます。
読み取りの再開を無効にした場合の処理
読み取りの再開機能を無効にすると、次のようになります。
データの読み取りを停止し、その後再開: ファイルの終わりにある未読み取りのデータは無視されます。
進行中の読み取りを再開: 前の実行からの進行中の読み取りの再開処理がある場合、エラーが生成され、例外がスローされます。
進行中の読み取りの再開処理がある場合、中断はできないため、完了してください。ファイルを完全に消費するためには、executeBusinessRules() メソッドを十分な回数呼び出します。つまり、ファイルが完全に消費されるまで、ファイルの処理を中断しないでください。
読み取りの再開状態を格納しない
読み取りの再開機能が有効になっていても、部分的なデータストリームの読み取りが必要な場合があります。たとえば、レコードパーサーの上位になんらかのアプリケーションロジックがあり、このロジックが、破壊されたレコードがあるためにファイルの残りを放棄して、ファイルの内容を一部だけ読み取った後にファイルを正常に閉じることがあります。
この場合、finish() を呼び出す前に、LocalFileOTD.Configuration.ResumeReading ノードを False に設定します。この設定は、BatchLocalFile OTD に対して、読み取りの再開状態を格納せずに処理を完了するように指示します。必要に応じて、この後に通知を送信したり、他の処理を実行するようにコラボレーションルールを設定できます。
BatchLocalFile OTD を使用して、アダプタのデータストリーミング機能を実装できます。この機能は、FTP OTD およびレコード処理 OTD にも備わっています。ただし、BatchLocalFile OTD はデータストリームアダプタプロバイダである一方、他の 2 つの OTD はコンシューマに過ぎません。OTD のデータストリーミング機能の使用方法については、「コンポーネント間でのデータのストリーミング」セクションを参照してください。
BatchLocalFile OTD のシーケンス番号付けは、BatchFTP OTD のシーケンス番号付けと同様に動作します。詳細は、「シーケンス番号付け」を参照してください。
シーケンス番号付けを使用した複数ファイルの生成
Java コラボレーションを使用して、BatchLocalFile インタフェースを使用しながらシーケンス番号を持つ複数のファイルを生成している場合は、reset() を呼び出して、1 つのファイルの終わりと、次のファイルの開始を示してください。
この OTD のこの機能は、BatchFTP OTD の型変換と同様に動作します。詳細は、「型変換の処理」を参照してください。
コラボレーションにおいてレコードを解析したり、ペイロードを構築するには、レコードを処理する BatchRecord OTD を BatchLocalFile OTD と組み合わせて使用してください。2 つの OTD を組み合わせて使用すると、BatchFTP OTD のみを使用する場合に比べて多くの利点があります。
たとえば、大規模ファイルを解析するコラボレーションルールを設定し、レコードをデータベースまたは JMS IQ Manager に送信するとします。解析処理中に問題が発生した場合、ファイル全体を FTP サーバーからふたたび送信する必要があります。
対照的に、ローカルファイルシステムからストリーミングを実行していると、エラーが発生した場合も同じファイルを再度 FTP 転送することは回避できます。この方法には、大規模ファイルでデータストリーミングおよび読み取りの再開機能を使用できるという利点があります (「コンポーネント間でのデータのストリーミング」および「読み取りの再開機能」を参照)。
例 2: 速度が遅く、複雑なクエリー
もう 1 つのシナリオとして、多数のレコードを取得するために速度が遅く、複雑な SQL クエリーが使用されている場合が考えられます。コラボレーションルールは、レコード処理 OTD を使用して Payload ノードにこれらのレコードをパックし、FTP を介して外部システムに送信します。FTP 転送が失敗すると、SQL クエリーを再度実行する必要があります。
対照的に、BatchLocalFile OTD を使用してデータペイロードがローカルに格納されている場合、SQL クエリーを再実行する必要なく、FTP 転送を繰り返せます。こうした場合、データストリーミングおよびローカルファイルの追加も使用できます。
どちらの場合も、データストリーミングリンクを使用すると、BatchFTP OTD で使用されるインメモリー・データペイロード転送と比べて、必要なメモリー量を大幅に削減できます。
BatchLocalFile OTD は、マップされたドライブおよび NFS マウント済みドライブをサポートします。ただし、ドライブのマッピングはサポートしません。つまり、ドライブはすでにマップ済みまたはマウント済みである必要があります。アダプタ自体は、マッピングやマウントを一切行いません。
OTD は Universal Reference Identifier (URI) をサポートしますが、スキーマは除外します。たとえば、\\drive\directory\file_name のようにです。
バッチアダプタのレコード処理 OTD である BatchRecord を使用すると、受信ペイロード (ペイロードデータ) からレコードを解析 (抽出) したり、レコードから構成される送信ペイロードを作成したりできます。この OTD の処理と使用方法の理解のために、いくつかの用語を説明します。
ここでペイロードという用語は、インメモリーバッファーを指します。つまり、バイトシーケンスまたはストリームです。また、このコンテキストでのレコードとは、データベースの場合のレコードとは異なります。レコードとは、単に、固定長や区切りレコードなど、既知の単純な構造を持つバイトシーケンスを意味します。
たとえば、この OTD では次の各レコードタイプを解析または作成できます。
長さがそれぞれ 1024 バイトの SAP IDoc を多数含む大規模データファイル。
それぞれが特別なバイトシーケンスで終端処理された X12 注文書を多数含むデータファイル。
レコード処理 OTD は、次の形式のレコードを処理できます。
固定長: ペイロード内の各レコードはまったく同じサイズです。
区切り: 各レコードの後に、CR、LF などの特定のバイトシーケンスが続きます。
単一: ペイロード全体がレコードです。
DBCS データに文字区切りを使用する場合は、単一バイト文字を使用するか、または 2 バイト文字のいずれのバイトとも一致しない 16 進値を持つ同等な 16 進値を使用します。
BatchRecord OTD には、Client、Configuration、PersistentState、および StateManager という 4 つの上位レベルノードが含まれます (次の図を参照)。これらのノードを展開すると、サブノードが表示されます。
OTD の Configuration ノードの下の各フィールドノードは、アダプタのレコード処理設定パラメータのいずれかに対応します。
次のリストは、レコード処理 OTD のこれらの主要ノードについて、その機能などを説明しています。
BatchRecord: OTD のルートノードを表します。
Configuration: このノード内の各サブノードは、アダプタの設定パラメータに対応し、対応する設定情報を含みます。ただし、Parse または Create パラメータを除きます。詳細は、BatchRecord の接続マッププロパティーを参照してください。
InputStreamAdapter および OutputStreamAdapter: OTD のデータストリーミング機能を使用および制御できます。その処理については、「コンポーネント間でのデータのストリーミング」を参照してください。
データは、Payload ノードを使用するか、またはデータストリーミング (InputStreamAdapter および OutputStreamAdapter ノード) を使用して転送できますが、同じ OTD 内で両方の方法を使用することはできません。
レコード処理 OTD の場合、これらの設定ノードは読み取り専用です。これらのノードは、実行時に設定情報にアクセスしたり、確認したりすることのみを目的として提供されています。
Record: 次のいずれかを表すプロパティーノードです。
get() の呼び出しが成功した場合に、このメソッドを介して取得されたばかりの現在のレコード
put() が呼び出されたときに、データペイロードに追加される現在のレコード
Payload: 解析中または作成中のデータペイロードのバイト配列を含むインメモリーバッファー。
どんな場合でもバイト配列を使用することをお勧めします。バイト配列を使用しないと、データを失うことがあります。
put(): 現在 Record ノードにあるすべてをデータペイロードに追加します。呼び出しが成功すると、このメソッドは true を返します。
get(): データペイロード (またはストリーム) から次のレコードを取得し、Record ノードに取得したレコードを取り込みます。呼び出しが成功すると、get() は true を返します。
finish(): put() と get() の両方に対して、解析ループまたは作成ループのいずれかが正常に完了したことを示すことができます。
エラーを示し、OTD で不要な内部データ構造をクリーンアップできるようにするには、reset() を使用します。
ペイロードの解析: ペイロードを外部システムから受信するとき
ペイロードの作成: ペイロードを外部システムに送信する前
OTD の単一のインスタンスは、同じコラボレーション内で同時に両方の目的に使用するようになっていません。この制限を強制するには、アダプタの「一般設定」パラメータの下に「解析または作成モード」と呼ばれる設定があります。この設定で「解析」または「作成」のいずれかを選択できます。
get() および put() メソッドは、この OTD の機能の中核です。いずれかのメソッドを呼び出すと、取得または追加するレコードは、固定長または区切りなど、アダプタの設定で指定されたタイプであると見なされます。
get() メソッドは例外をスローできますが、この動作は、通常、重大な失敗がある場合のみ起こります。ペイロードデータ (またはストリーミングしている場合はストリーム) が設定される前に get() を呼び出そうとすることは、こうした失敗の一例です。get() 呼び出しからの戻り値を確認するようにコラボレーションをコーディングすることをお勧めします。戻り値 true は取得処理が成功したことを意味し、false は失敗を意味します。
アダプタは、モード設定に従って、適切な呼び出しが行われているかどうかを確認します。たとえば、解析モード環境で put() を呼び出すと、アダプタは、原因を説明する該当エラーメッセージを添えて、例外をスローします。作成モードで get() を呼び出してもエラーになります。
アダプタがこうした制限を必要とするのは、次の理由からです。
インバウンドペイロードを処理している場合は、ペイロードからレコードを抽出 (解析) するために get() を呼び出します。この状況では、put() を呼び出すことはほとんど意味はありません。この時点で呼び出すと、ペイロードからレコードを抽出しようとしているのに、ペイロードは変更されます。put() を呼び出すとペイロードは上書きされ、取得しようとしてるデータは破壊されます。
反対に、put() を呼び出すことでペイロードを作成している場合、この時点でデータを抽出、つまり解析する必要はありません。したがって、get() を呼び出すことはできません。
このため、OTD は、特定のコラボレーションの転送元側または転送先側に必要に応じて配置し、OTD をペイロードの解析または作成に使用します。しかし、同時に解析と作成を行うことはできません。OTD をコラボレーションに実装するには、コラボレーションルールエディタを使用します。
ペイロードデータを外部システムに送信する場合は、そのシステムとインタフェースをとっているコラボレーションのアウトバウンド側に OTD を配置できます。連続して put() を呼び出すと、アダプタ設定で定義した形式でペイロードデータが構築されます。
すべてのレコードがペイロードに追加されたら、コラボレーションのアウトバウンドの転送先を表すノード (複数可) にペイロードをドラッグ&ドロップできます。また、ペイロードの転送先として出力ストリームを設定できます (ペイロードのストリーミングの詳細は、表 1–3 を参照)。
データペイロードを構築するときは、送信するデータのタイプと形式を考慮します。アダプタでは、次の形式を使用できます。
単一レコード: このタイプのペイロードは、送信する単一レコードを表します。put() を連続して呼び出すごとに、ペイロードは出力中のデータのサイズ単位で大きくなります。ペイロードは、隣接する 1 つのバイトストリームです。
固定サイズレコード: このタイプのペイロードは、レコードで構成されており、各レコードのサイズはまったく同じです。指定されたサイズではないレコードを put() しようとすると、例外がスローされます。
区切りレコード: このタイプのペイロードは、末尾に区切り文字を持つレコードで構成されます。各レコードのサイズは異なってもかまいません。このデータタイプが put() に渡されるときには、区切り文字を追加しないでください。区切り文字は、アダプタによって自動的に追加されます。
ユーザー定義: このタイプのペイロードでは、セマンティクスはユーザー自身の実装によって完全に制御されます。
外部システムからのインバウンドのペイロードデータを表すには、(コラボレーションルールエディタから) OTD のペイロードノードにデータをマップします。また、入力ストリームを転送元として指定することもできます。
いずれの場合も、連続して get() を呼び出すごとに、ペイロードから次のレコードが抽出されます。抽出されるレコードのタイプは、固定サイズ、区切りなどのアダプタの設定で設定したパラメータによって決まります。
解析コラボレーションは、抽出した各レコードに対する処理を含めて設計します。通常、レコードを別のコラボレーションに送り、そこにあるカスタム OTD がレコード形式を記述し、さらに処理を実行するという方法がとられます。
ペイロードの完全な消費
ペイロードは完全に消費することができます。つまり、get() を連続して何度も呼び出すと、ペイロード内のすべてのレコードを取得できます。この時点で連続して get() を呼び出すと、ブール型の false が返されます。サブジェクトコラボレーションのビジネスルールは、この可能性を考慮に入れて設計します。
データストリーミングでレコード処理 OTD を使用している場合は、出力ファイルを上書きしないように注意してください。OTD が、同じ出力ファイル名を使用する BatchLocalFile OTD に絶えずストリーミングしている場合、OTD は出力側のファイルを上書きすることがあります。
この問題を回避するためには、ファイルのシーケンス番号付けを使用するか、またはコラボレーションルールの出力ファイル名を変更します。シーケンス番号付けを使用すると、BatchLocalFile OTD は、個々のファイルにシーケンス番号を追加することでそれぞれを区別します。ターゲットファイル名と転送後ファイル名のいずれか、または両方を使用すると、出力ファイルの名前を別のファイル名に変更できます。
これらの機能の使用法については、「シーケンス番号付け」および「ファイル転送前/転送後コマンド」を参照してください。
BatchInbound 入力 (トリガー) ファイルアダプタは、入力ファイルをポーリングし、ファイルの名前を GUID プレフィックスで変更して、ビジネスプロセスまたはコラボレーションをトリガーします。
バッチアダプタの BatchInbound OTD は、入力ディレクトリでインバウンドターゲットファイルを定期的にポーリングする点で、インバウンドのファイルアダプタと同様に機能します。ただし、ファイルアダプタと異なり、BatchInbound アダプタによって該当する名前のファイルが受信されると、ターゲットファイルの名前は GUID.original_filename のパターンに変更されます。これは、ファイルの上書きを防ぎ、送信を 1 回のみにすることを目的としています。GUID (Globally Unique Identifier) は、128 ビットの値を表す、一意のフォーマットされた文字列を提供します。
BatchInbound OTD は、ファイルを読み取りません。ビジネスプロセスまたはコラボレーションをトリガーするファイルの名前を提供するようにファイルの名前を変更します。
BatchInbound OTD には、BatchAppconnMessage という 1 つの上位レベルノードが含まれ、そこには PathDirName、OriginalFileName、および GUIDFileName という 3 つのフィールドが含まれます (次の図を参照)。これらのノードは、外部入力ディレクトリ、元のファイル名、および GUID ファイル名を提供します。
正規表現とは文字列で、その中に含まれる一部の文字が照合パターンに関する特別な意味を持ちます。このセクションでは、HTTPS で正規表現を使用する方法に関する基本的なガイドラインを示します。
正規表現を使用すると、ファイル名およびディレクトリ名に対するパターンを指定できます。正規表現は「取得」処理 (受信、つまり転送元) に使用するのに対し、名前パターンは「出力」処理 (送信、つまり転送先) に使用します。
BatchFTP、Batch FTPOverSSL、BatchSFTP、BatchLocalFile、および BatchInbound の各 OTD では、正規表現を使用できます。たとえば、特定の拡張子を持つすべてのファイルにアクセスできます。
正規表現は次のように機能します。
ディレクトリ名またはファイル名は、次のいずれかとして定義できます。
実際のファイル名 (常に使用可)
名前パターン (「出力」処理のすべての名前、および取得処理の転送前/転送後名)
正規表現 (「取得」処理のターゲット名)
正規表現と名前パターンの違いは、次のとおりです。
正規表現は、FTP サーバーまたはローカルファイルシステム上の既存の名前と照合するために使用されます。
名前パターンは、パターン内の特殊文字を置き換えることで名前を作成するために使用されます。
特殊文字を使用した名前パターンについては、「バッチアダプタでの名前パターンの使用法」を参照してください。
たとえば、.*\.dat$ という拡張子を指定できます。すると、get() メソッドが呼び出されるごとに、アダプタは、.dat 拡張子を持つ次のファイルを取得します。次に、アダプタは、各ファイルを OTD の Payload ノードに取り出し、現在アクセスしているファイルの名前で作業ファイル名の属性を更新します。
別の例としては、ファイル照合パターン data\.00[1-9] を使用して、ファイル data.001、data.002 などを取得できます。どの場合も「.」はエスケープされます。これは、正規表現の構文と一貫しています。また、xyzdata.001 および xyz.data.001 に一致します。これは、「data」の前が一切除外されないためです。「data」を照合パターンの開始とするためには、^data\.00[1-9] または \A data\.00[1-9] を使用します。
正規表現の使用は拡張機能であり、慎重に実装してください。不適切な形式の正規表現は、想定外のデータをもたらしたり、データを損失することさえあります。正規表現を使用する前に、その構文と構築について明確に理解してください。正規表現の設定は、本稼働環境に移行する前に、十分テストすることをお勧めします。
FTP またはローカルファイル名の正規表現は、さまざまな方法で入力できます。たとえば、*\.dat$ や ^xyz.*\.dat$ などです。最初の例は、拡張子 .dat を持つすべてのファイルを示します。2 番目の例は、拡張子が .dat で名前が xyz で始まるすべてのファイル名を示します。
もう 1 つの例として、file[0-9]\.dat も可能です。この表現は、file0.dat、file1.dat、file2.dat などから file9.dat までを指定します。また、これは xyz.file0.dat、xyz.file1.dat などに一致します。このタイプの表現は、「file」の前の一切を除外しません。「file」の前のすべての文字を除外するには (「file」から始まることを条件とするには) ^file[0-9].dat または \Afile[0-9].dat を使用します。
これらのタイプの正規表現パターンを取得処理に使用できます。
アダプタには、各プロパティーの後に正規表現をオプションとして許可する File Name Is Pattern または Directory Name Is Pattern 設定パラメータが備わっています。この機能を使用して、入力したパターンが正規表現か、またはリテラルに解釈する静的なテキストエントリかどうかを指定できます。
正規表現は、ファイル名に対する部分一致でも解決します。この解決処理は、ファイル名ではなくファイル名の内容を検索します。
ディレクトリ名に正規表現を使用する場合は、特別な考慮が必要です。このセクションでは、これらの制限を説明し、例をいくつか示します。
ディレクトリ名として正規表現を使用する場合、次の制限が適用されます。
ディレクトリルート、ドライブ名、およびディレクトリ区切り文字は、それだけで表現します。つまり、これらの要素のいずれも正規表現として表現しないでください。正規表現として出現することを想定されるのはフォルダ名のみです。
正規表現は、ディレクトリ区切り文字をまたがることはできません。2 つのディレクトリ区切り文字間で正規表現を使用する場合は、完全な 1 つの表現にします。
ディレクトリ区切り文字が正規表現の特殊文字 (” * [ ] ( ) | + { } : . ^ $ ? \") と競合する場合は、ディレクトリパターン内ですべてのディレクトリ区切り文字をエスケープします。バックスラッシュ (\) は、正規表現で他の特殊文字をエスケープするために使用される特殊文字です。Windows プラットフォームの場合、ディレクトリ区切り文字はバックスラッシュであるため、\\ としてエスケープします。
Windows 汎用命名規則 (UNC) の場合、ディレクトリルート (コンピュータ名および共有ルートフォルダ名を含む) はそれだけで表現します。つまり、コンピュータ名および共有ルートフォルダは正規表現として表現しないでください。
ディレクトリ区切り文字はプラットフォームに依存します。次に例を示します。
Windows プラットフォームの場合、ディレクトリパスは次のパターンに従います。
drive:\\regexp1\\regexp2\\regexp3 ... |
Windows UNC 指定の場合、ディレクトリパスは次のパターンに従います。
\\\\machineName\\shared_folder\\regexp1\\regexp2\\regexp3 ... |
マウントされたディレクトリを含む UNIX プラットフォームの場合、ディレクトリパスは次のパターンに従います。
/regexp1/regexp2/regexp3 ... |
Windows:
c:\\$\\^client\\collab\D\\ ... |
表現 \D は、数字以外の任意の文字を示します。
d:\\a.b\\c.d\\e.f\\g.h\\[0-9]\\ ... |
シンボル「.」は任意の文字を意味します。
Windows の UNC 指定:
\\\\My_Machine\\public\\xyz$\\^abc |
Windows の UNC 指定のプレフィックスは \\ です。エスケープすると、\\\\ になります。
UNIX:
/abc\d/def/ghi/ ... |
表現 \d は、任意の数字を意味します。
/^PRE[0-9]{5}\.dat$/ ... |
この表現は、PRE で始まり、5 桁の数字が続いて、.dat 拡張子を使用することを意味します。シンボル \. は、任意の文字としてではなく、実際の文字 (ピリオド) として解釈することを意味します。したがって、PRE12345.dat は一致しますが、PRE123456dat は一致しません。
バッチアダプタでは、よく使用する情報を省略表現として表す特殊文字である、名前パターンを使用できます。これらの文字の組み合わせを使用して、この特定の情報のプレースホルダを指定できます。これらの文字を使用して、日付/時刻、数値、およびファイル名情報を迅速に伝達できます。
BatchFTP、Batch FTPOverSSL、BatchSFTP、BatchLocalFile、および BatchInbound の各 OTD では、特殊文字の使用、つまり名前パターンの指定が許可されています。名前パターンを使用すると、ファイル名およびディレクトリ名のパターンを指定できます。名前パターンは「出力」処理 (送信、つまり転送先) に使用するのに対し、正規表現は「取得」処理 (受信、つまり転送元) に使用します。
特殊文字は、アダプタがファイル名パターンに使用するユーティリティーです。その使用に関する全般的なルールは、次のとおりです。
% は、展開する必要がある特殊文字を示すために使用します。
%% は、エスケープされた文字 % を示します。たとえば、abc%%d は abc%d を意味し、%d はふたたび展開されません。
たとえば、出力処理で、file%#.dat のようなパターンを使用できます。このパターンは、設定のシーケンス番号設定を使用し、出力処理のたびに、file1.dat、file2.dat といった名前が付いた連続したファイルが作成されます。
正規表現については、「バッチアダプタでの正規表現の使用法」を参照してください。
日付/時刻スタンプ: 形式 %[GyMdhHmsSEDFwWakKz] を使用します。たとえば、abc%y%y%y%y は abc2001 を意味します (詳細は、表 1–2 を参照)。
シーケンス番号: 形式 %#, %5# を使用します。たとえば、abc%# は abc1、abc2、abc3 などを意味します。また、abc%5# (0 で埋める) は abc00001、abc00002、abc00003、...abc00010、...abc00100 などを意味します。
作業ファイル名: 形式 %f を使用します。通常、転送前/転送後コマンドに使用します。たとえば、%f.abc は working_filename.abc を意味します。
展開処理の順序は、前のリストと逆順です。つまり、最初にファイル名、次にシーケンス番号、最後にタイムスタンプが展開されます。
名前パターンの例をさらにいくつか示します。
abc.%y%y%y%y%M%M%d%d.%h%h%m%m%s%s%S%S%S は abc.20011112.162532678 を意味します
abc%#.def%# は abc2.def3 を意味します
%f.%# は xxxxx.4、xxxxx.5、... を意味します (xxxxx は作業ファイル名)
通常、名前パターンまたは正規表現を使用した転送前/転送後名は、get() および put() メソッドの呼び出し時に解決されます。しかし、コラボレーションルールを使用するときに、アダプタが、実際の get() または put() 呼び出しの前に、解決された名前を取得しなければならない場合があります。
こうした場合、BatchFTP OTD の ResolvedNamesForGet および ResolvedNamesForPut ノードを使用して、前述のように解決された名前を取得できます。たとえば、次のようにです。
getResolvedNamesForPut().getTargetFileName()
前のコードは、パターン file%# に基づいて file1 になります。この使用法では、OTD ノードは、目的のメソッドを呼び出すために使用できます。
アダプタは、Java の単純なデフォルトの日付および時刻形式構文 (米国ロケール) を使用します。これらの形式を名前パターンに指定するには、時刻パターン文字列を使用します。
アダプタは、Java クラス java.text.SimpleDateFormat の Java 標準日付/タイムスタンプを使用します。これらの形式の一部は、使用中の Java SDK バージョンによっては、次に示すリストと異なることがあります。
これらのパターンでは、すべての ASCII 文字はパターン文字として予約されています。完全なリストについては、表 1–2 を参照してください。
表 1–2 時刻パターン文字列と意味
シンボル |
意味 |
表現 |
例 |
---|---|---|---|
%G |
年号指示子 |
テキスト |
AD |
%y |
年 |
数 |
1996 |
%M |
月 (年) |
テキストおよび数 |
July & 07 |
%d |
日 (月) |
数 |
10 |
%h |
時間 (午前/午後) (1 - 12) |
数 |
12 |
%H |
時 (日) (0 - 23) |
数 |
0 |
%m |
分 (時) |
数 |
30 |
%s |
秒 (分) |
数 |
55 |
%S |
ミリ秒 |
数 |
978 |
%E |
曜日 (週) |
テキスト |
火曜日 |
%D |
日 (年) |
数 |
189 |
%F |
曜日 (月) |
数 |
2 (7 月の第 2 水曜日) |
%w |
週 (年) |
数 |
27 |
%W |
週 (月) |
数 |
2 |
%a |
午前/午後記号 |
テキスト |
PM |
%k |
時間 (日) (1 - 24) |
数 |
24 |
%K |
時間 (午前/午後) (0 - 11) |
数 |
0 |
%z |
タイムゾーン |
テキスト |
太平洋標準時 |
日付/時刻形式の全般的なルールは、次のとおりです。
テキスト: パターン文字の数によって、形式が次のように決まります。
4 つ以上のパターン文字の場合、完全な形式を使用します。
4 文字未満の場合、存在する場合は短い形式 (省略形) を使用します。
数: 最小桁数は次のように扱われます。
少ない数はその桁数まで 0 で埋められます。
年の処理は異なります。「y」の数が 2 の場合、年は 2 桁に切り捨てられます。
テキストおよび数: 3 つ以上のパターン文字の場合、テキストを使用します。それ以外は、数を使用します。
引用符と区切り文字: これらのシンボルは、次のように使用します。
表示するリテラルテキストを一重引用府で囲みます。
一重引用府を意味するには、二重引用符を使用します。
区切り文字にコンマを使用します。
表 1–3 は、米国ロケールを使用したいくつかの例を示しています。
形式パターン |
結果 |
---|---|
yyyy.MM.dd, G, ’at’ hh:mm:ss, z |
1996.07.10 AD at 15:08:56 PDT |
E, M, dd, ’’yy |
Wednesday, July 10, ’96 |
h:mm, a |
12:08 PM |
h, ’o’’clock’ a, z |
12 o’clock PM., Pacific Daylight Time |
K:mm a, z |
0:00 p.m., PST |
yyyyy.M.dd, G, hh:mm, a |
1996.July.10 AD 12:08 PM |
COM OTD ウィザードは、COM オートメーション互換コンポーネントの型ライブラリファイルから OTD を生成します。COM 型ライブラリファイルは、オートメーション互換コンポーネントから公開されるメソッドおよびプロパティーを記述します。COM 型ライブラリは、ファイル拡張子 .tlb または .olb を持つことがありますが、ほとんどのコンポーネントは、通常、コンポーネントを含む DLL、OCX、または EXE ファイルに型ライブラリファイルを組み込んでいます。
プロジェクトエクスプローラツリーでプロジェクトを右クリックし、ショートカットメニューから「新規」 > 「オブジェクト型定義」を選択します。
新規オブジェクト型定義ウィザードの「ウィザードタイプの選択」ウィンドウで、COM ウィザードを選択し、「次へ」をクリックします (次の図を参照)。
OTD を作成する基になる型ライブラリファイルを含むディレクトリを参照します。1 度に選択できる型ライブラリファイルは 1 つのみです。型ライブラリファイルを選択し、「選択」ボタンをクリックして (次の図を参照)、「次へ」をクリックします。
型ライブラリから 1 つまたは複数のCoClass を選択して、「次へ」をクリックします (次の図を参照)。
「OTD 名」フィールドに新規 OTD の名前を入力し、「完了」をクリックします (次の図を参照)。
選択した CoClass のいずれかにサポートされていないデータ型のメソッドが含まれる場合、「情報」ボックスが表示されます。
「情報」ボックスには、OTD にいくつかのメソッドが作成されなかったことと、生成された「スキップされたメソッド」ログの場所が示されます。このログは、OTD の作成時にスキップされたメソッドのレポートです (この情報は、IDE ログファイルにも書き込まれる)。この情報ボックスが表示された場合は、「了解」をクリックして確認し、「情報」ボックスを閉じます。
OTD エディタが表示され、新しい OTD が表示されます (次の図を参照)。
作成された OTD をコラボレーションで使用できるようになりました。
OTD エディタの使用法については、『Sun Enterprise Service Bus』を参照してください。
1 つの OTD が何行ものメタデータで構成されることがあります。OTD 内のメタデータに変更が生じた場合、最初から作り直す必要はありません。再起動機能を使用すると、OTD を同じ名前で再構築して保存し、同じ Java コラボレーションルールまたは BPEL に再起動することができます。
エンタープライズエクスプローラで、OTD を右クリックします。サブメニューから、「再起動」をクリックします。ファイルの選択ウィザードが開きます。
再起動する「ファイル名」を入力 (または「参照」して「選択」) して、「次へ」をクリックします。
OTD を作成するときと同様にウィザードを続けます。
「完了」ボタンをクリックして、変更を保存します。
OTD を再起動するとき、次の場合は既存のコラボレーションは影響を受けません。
新規列が追加された場合
削除された列が元のコラボレーションで使用されていなかった場合
列の名前を変更または削除した場合に、既存のコラボレーションを変更しないと、検証は失敗します。
ファイルアダプタは、Sun JavaTM Composite Application Platform Suite およびアダプタ Intelligent Adapter に付属するほとんどのサンプルプロジェクトで使用されます。ファイルアダプタには、このアダプタに固有の次のコンポーネントが含まれます。
ファイルアダプタ設定プロパティーファイル: ファイルアダプタ用のプロパティーファイルは、アダプタが外部システムに接続する方法、およびデータ (メッセージ) の処理方法を定義します。これらのプロパティーは、プロパティーエディタを使用して設定します。バッチアダプタプロパティーファイルおよびプロパティーエディタについて。
FileClient OTD: ファイル OTD は、ファイルの送受信機能、およびビジネスプロセスまたはコラボレーションのトリガー機能を提供します。オブジェクト型定義 (OTD)は、フィールドレベルで入力メッセージセグメントおよび出力メッセージセグメントをマップします。
次のファイルアダプタ OTD の属性、つまり処理は、BPEL プロジェクトと JCD プロジェクトの両方で使用されます。
receive (インバウンドファイルアダプタ)
write (アウトバウンドファイルアダプタ)
write (出力) ビジネスプロセス処理には、着信するエラー例外メッセージを受信および処理するための、追加の入力機能があります。
OTD エディタは、選択されたオブジェクト型定義 (OTD) の構造を表示します。また、組み込み型のテスターでその処理を確認できます。エディタを使用して OTD の作成および変更を行うこともできます。オブジェクト型定義、OTD の構造、および OTD エディタの概要については、『Sun Enterprise Service Bus ユーザーガイド』を参照してください。その中では、使用可能なすべての OTD プロパティーを定義し、OTD エディタのすべての機能を説明しています。
次のセクションでは、OTD エディタでライブラリ OTD を使用する場合に固有の情報について説明します。これらの OTD は、業界固有のデータ交換システムおよびオープンソース標準で使用されるメッセージタイプに対応するテンプレートです。テンプレートは事前に定義されており、そのまま使用できるほか、OTD エディタを使用して変更することもできます。
OTD エディタは、選択されたオブジェクト型定義 (OTD) の構造を表示します。また、組み込み型のテスターでその処理を確認できます。エディタを使用して、ユーザー定義の OTD を作成および変更することもできます。
OTD エディタを使用して HL7 汎用 OTD または HL7 ライブラリ OTD (HL7 アダプタを Sun HL7 OTD ライブラリと組み合わせて使用している場合) を表示するには、次の手順に従います。
Java CAPS のプロジェクトツリーで、Sun OTD ライブラリディレクトリ、HL7 ディレクトリ、該当する HL7 ライブラリバージョンのフォルダの順に展開します。ビルドにはインストールしたバージョンのみが表示されます。
プロジェクトエディタの OTD ライブラリにある使用可能な OTD は保護されています (読み取り専用)。現在の場所で OTD をダブルクリックすることで、OTD を「読み取り専用」モードで表示できます。
OTD を編集可能モードで表示するには、OTD をプロジェクトにコピー&ペーストします。OTD を右クリックし、ショートカットメニューから「コピー」を選択して、次にプロジェクトを右クリックし、ショートカットメニューから「ペースト」を選択します。OTD がプロジェクトエクスプローラツリーのプロジェクトに追加されます。
コピーされた OTD を表示するには、コピーされた OTD をダブルクリックします。編集可能な OTD が OTD エディタに表示されます。ライブラリ OTD の場合、OTD セグメントは引き続き書き込み保護されています。この時点で、OTD プロパティーは、ルートノードからのみ変更できます (次の図を参照)。
エディタの「オブジェクト型定義」区画で、任意の OTD ノードまたはサブノードを選択すると、エディタの「プロパティー」区画にノードのプロパティーが表示されます。
オブジェクト型定義、OTD の構造、および OTD エディタの概要については、『Sun Enterprise Service Bus ユーザーガイド』を参照してください。
汎用 HL7 OTDS (HL7 OTD ライブラリからインストールされる OTD) は、Project Explorer の Sun フォルダにあります。これらの OTD は保護されており、変更できません。これにより、元の OTD を常に元の形で使用できます。OTD を変更するには、まず OTD を「Sun」 > 「OTD ライブラリ」フォルダからプロジェクトにコピー&ペーストします。
プロジェクトに保存したすべての OTD のバージョンを管理できます。OTD をチェックインまたはチェックアウトするには、プロジェクトエクスプローラツリーで OTD を右クリックし、ショートカットメニューから「バージョン管理」 > 「チェックアウト」または「チェックイン」を選択します。OTD がチェックインされると、プロジェクトエクスプローラツリーに OTD ファイルアイコンが「ロック」として表示されます (アイコンに赤い南京錠が含まれる)。
プロジェクトにコピーした HL7 OTD は、ルートノードからのみ編集できます。OTD の各セグメントは書き込み保護されています。OTD セグメントは、OTD エディタの「参照」区画で見ることができます。この「参照」区画には、OTD ファイルの内部テンプレートおよび外部テンプレートが含まれます。ライブラリ OTD の特定のセグメントを編集する方法は、「OTD セグメントの追加および編集」を参照してください。OTD プロパティーの詳細は、「OTD プロパティー」を参照してください。
ルートノードのプロパティー
次の表に、ルートノードに関連付けられた一連のプロパティーを示します。
ノードプロパティーの説明 |
|
---|---|
name |
ノードの表示名。これは、事実上任意の文字列にすることができます。 |
javaName |
プロパティーアクセサベース名。これは、通常、表示名から引き出され、Java 識別子に対する制限に適合するように変更されます。Sun Enterprise Service Bus によって自動的に提供されます。 |
javaType |
Java 型。自動的に割り当てられ、編集できません。 |
comment |
自由形式のテキスト (実行時には無効)。 |
delim |
指定された区切り文字。「区切り文字の指定」を参照してください。 |
nodeType |
マーシャル/アンマーシャルフォーマットを制御します。「ノードタイプの指定」を参照してください。 |
antecoding |
入力データのコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。このプロパティーを指定しないと、decoding プロパティーに指定した値が入力データに使用されます。このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
decoding |
アンマーシャルコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。(DBCS データには UTF-8 を使用することをお勧めします。これは、一部の ASCII 区切り文字の 16 進値が 2 バイト文字に含まれる 16 進値と一致することがあるためです。)このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
encoding |
マーシャルコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
order |
アンマーシャルプロセスの間の、選択したノードの子の順序を指定します。
|
postcoding |
出力データのコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。このプロパティーを指定しないと、encoding プロパティーに指定した値が出力データに使用されます。このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
public |
今後の開発用に予約済み |
top |
ルートノードのフラグ: マーシャル/アンマーシャルのサポート (T/F)。 |
ルートノードから編集したプロパティーは、OTD に包括的に適用されます。たとえば、ルートノードから変更したレベル 3 の区切り文字は、レベル 3 のすべてのノードの区切り文字に適用されます。特定のセグメントのプロパティーは排他的に編集できますが、このためには、セグメントが参照する特定の OTD をプロジェクトにコピー&ペーストします。特定のセグメントの編集については、「OTD セグメントの追加および編集」を参照してください。
OTD をプロジェクトにコピー&ペーストします。OTD がプロジェクトエクスプローラツリーのプロジェクトに追加されます。
OTD をダブルクリックして、OTD エディタでプロジェクトを開きます。
エディタの「オブジェクト型定義」区画で、OTD のルートノードを選択します。エディタの「プロパティー」区画にルートプロパティーが表示されます。
「プロパティー」区画で、プロパティーを編集する任意のプロパティーフィールドをクリックします。
すべてのノードレベルの区切り文字は、ルートノードから設定 (および変更) します。デフォルトのレベル 1 の区切り文字は ASCII 以外の文字であることに注意してください。いったん変更すると、文字として入力し直すことはできません (ただし、ペーストは可能)。OTD の特定セグメントの編集については、「OTD セグメントの追加および編集」を参照してください。
OTD エディタで、「オブジェクト型定義」区画のルートノードを選択します (この例では ADT_A02 とします)。「プロパティー」区画で、delim プロパティーフィールドをダブルクリックします。省略記号 (...) ボタンがフィールドに表示されます。省略記号ボタンをクリックします。区切り文字リストエディタが表示されます (次の図を参照)。
OTD エディタの「プロパティー」フィールドでどのレベルのフィールドをダブルクリックしても、そのフィールドは編集可能になるか、またはオプションのリストが表示されます。レベル 3 の「区切り文字バイト」フィールドをダブルクリックします (前の図を参照)。現在の区切り文字をナンバー記号 (#) に変更し、次のフィールドに Tab で移動して、「了解」をクリックします。
OTD に存在するレベル 3 のすべてのノードの区切り文字がナンバー記号 (#) になります。ただし、特定のセグメントで別途指定されている場合は除きます。次の図は、オブジェクト型定義ツリー内のさまざまなレベルの例をルートノードから示しています。
すべての HL7 OTD には、HL7 標準の定義に従って、区切り文字の定義済みリストがあります。HL7 メッセージ内の区切りエンコーディング文字を変更する場合は、OTD エディタを使用してルートノードから OTD の区切り文字を変更して、HL7 メッセージで使用している区切り文字と一致させます。
区切りエンコーディング文字フィールドは、4 つのエンコーディング文字とフィールド区切り文字から構成される固定長フィールドです。5 番目 (追加) の文字は、セグメントのフィールド区切り文字として必要です。
エンコーディング文字と突き合わせた妥当性検査を行うには、次のように、事前に構築されたコラボレーションルールを変更します。
// first unmarshal the HL7 OTD payload // then get the encoding character field: String encodingChars = otdHL7_GENERIC_EVT_1.getMSH().getMsh2EncodingCharacters(); if (!encodingChars.equals(“<customer_encoding_characters>”)) { validated = false; ErrorMessage = "Validation Failure: Receiving Facility"; log( LOG_LEVEL_ERROR, "Validate HL7 Message failed: Encoding character field" ); } |
ノードは、外部データ表現内の階層化されたデータ構造内で、外部データ表現そのものと、その下位に使用される一連の区切り文字を定義します。ノードで区切り文字リストを定義している場合、上位の区切り文字リストは、このノード自体とその下位に一切影響しません。区切り記号リストは、通常、ルートノードに指定します。
たとえば、次のデータを解析する場合、
a^b|c^d|e |
OTD を次のように定義できます。
この OTD の区切り文字リストは、demo-otd 要素で指定するため、OTD 全体に適用され、2 つのレベルを持ちます。
レベル 1
区切り文字 |
レベル 2
区切り文字 ^
レベル 1 の区切り文字は、2 つの要素およびフィールド 5 に適用され、レベル 2 の区切り文字はフィールド 1 から 4 に適用されます。
区切り文字リストは、この非常に簡単な例よりもずっと複雑になることがあります。たとえば、任意の特定レベルで異なるタイプの区切り文字を複数作成したり、例のようにルートノードでだけでなく、OTD 内の任意のノードで区切り文字リストを指定したりすることができます。区切り文字リストの作成手順については、「OTD エディタを使用した OTD の変更」を参照してください。
区切り文字のプロパティー
区切り文字は、区切り文字リストエディタを使用して定義します。
区切り文字のプロパティーと値を表 1–4 に示します。
表 1–4 区切り文字のプロパティー
区切り文字のプロパティーと値のオプション |
||
---|---|---|
プロパティー |
オプション |
説明 |
レベル |
定義中のノードの下の子レベル。 |
|
タイプ |
escape |
エスケープシーケンス。 |
repeat |
配列区切り文字/セパレータ。 |
|
normal |
終端文字。 |
|
区切り文字バイト |
区切り文字 (単一または複数の文字)。 |
|
優先度 |
「優先度」を参照してください。 |
|
オプションモード |
never |
入力では許可せず、出力では発行しません (区切り文字間の空のフィールドは、長さゼロのデータフィールドを意味する)。 |
allow |
空のフィールドが存在する場合はスキップし、存在しない場合、出力では区切りません。 |
|
cheer |
空のフィールドが存在する場合はスキップし、存在しない場合、出力では区切ります。 |
|
force |
入力では空の区切られたフィールドが必須で、出力では常に区切ります。 |
|
ターミネータモード |
never |
入力では許可せず、出力では発行しません (純粋なセパレータ)。 |
allow |
入力では許可し、出力では発行しません。 |
|
cheer |
入力では許可し、出力では常に発行します。 |
|
force |
入力では必須で、出力では常に発行します (純粋な終端文字)。 |
タイププロパティー - Escape オプション
escape 区切り文字は、解析時に認識されて無視されるシーケンスです。その目的は、エスケープシーケンスの使用を許可して、データ内にバイトシーケンスを組み込むことで、この存在がないと、区切り文字の出現として見なされます。
たとえば、あるレベルに通常の区切り文字「+」が存在し、エスケープ区切り文字「\+」を定義した場合、aaa+b\+c+dddは 3 つのフィールド、aaa、b\+c、および ddd として解析されます。エスケープ区切り文字を定義しなかった場合、シーケンスは 4 つのフィールド、aaa、b\、c、および ddd として解析されます。
ただし、あるレベルでエスケープ区切り文字が 1 つのみの場合、delim および array ノードでは区切り文字の定義されていない状態を表します。
区切り文字バイト
基本的には、区切り文字として使用できる文字に制限はありません。ただし、データと混同する可能性のある文字や、エスケープシーケンスと衝突する文字は避けてください。バックスラッシュ (\) は通常、エスケープ文字として使用されます。HL7 プロトコルは、エスケープシーケンスの一部に二重のバックスラッシュを使用して特別なテキストフォーマット指示を与えます。
コロン (:) は区切り文字として使用しないでください。コロンは、システムが生成した時刻文字列でリテラルとして使用されます。これは、ドメインのシャットダウン後などの復旧手順を妨げる可能性があります。
ターミネータモードプロパティー
前の例に示したツリー構造を見てみましょう。この構造では、ノード a はその区切り文字としてパイプ (|) を、サブノード b はその区切り文字としてチルダ (~) を、サブノード c はその区切り文字としてアスタリスク (*) を持っています。
オプション |
入力 |
出力 |
---|---|---|
never |
c| |
c| |
allow |
c| または c*| |
c| |
cheer |
c| または c*| |
c*| |
force |
c*| |
c*| |
オプションモードプロパティー
次の図に示したツリー構造を見てみましょう。この構造では、ノード a はその区切り文字としてパイプ (|) を、サブノード b、c、および d はいずれもその区切り文字としてアスタリスク (*) を持っています。
例 1: サブノード c が optional の場合(サブノード c とサブノード d の match パラメータの値は異なる必要がある)。
オプション |
入力 |
出力 |
---|---|---|
never |
b*d| |
b*d| |
allow |
b**d| |
b*d| |
cheer |
b**d| |
b**d| |
force |
b**d| |
b**d| |
例 2: サブノード c とサブノード d の両方が optional の場合。
オプション |
入力 |
出力 |
---|---|---|
never |
b| |
b| |
allow |
b|、b*|、または b**| |
b| |
cheer |
b|、b*|、または b**| |
b**| |
force |
b**| |
b**| |
優先度
優先度は、ある区切り文字の他の区切り文字に対する優先順位を示します。デフォルトでは、すべての区切り文字の優先度は 10 で、つまり、すべての区切り文字は同様と見なされ、固定フィールドは優先度 10 でハードコードされます。親ノードの区切り文字は、子フィールドの解析時には考慮されず、子の区切り文字 (または子が固定フィールドの場合はその長さ) のみが考慮されます。
区切り文字の優先度を変更すると、入力データストリームに異なる方法で区切り文字が適用されるようになります。次に例を示します。
ルートノード
要素 (type delim, delimiter = “^”, repeat)
フィールド1 (type fixed, length = 5)
フィールド2 (type fixed, length = 8, optional)
これは「abcde12345678^zyxvuABCDEFGH」を解析しますが、テキスト「abcde^zyxvuABCDEFGH」は、2 番目の固定フィールドが optional であっても解析されません。これは、要素と固定フィールドの区切り文字の優先度が同じであるため、要素の区切り文字が固定フィールド内で無視されるからです。固定フィールドデータ内で要素の区切り文字が調べられるようにするには、次のようにその優先度を変更します。
HL7 ライブラリ OTD は、HL7 メッセージセグメントに対応するさまざまな OTD で構成されています。メインの HL7 メッセージ OTD は、同じ HL7 ディレクトリ内にあるセグメント OTD への参照を含んでいます。
セグメントの編集
次の例では、HL7_25_ADT_A02 OTD を使用しています。OTD の特定セグメントのプロパティーを編集するには、次の手順に従います。
編集する OTD セグメントを決定したら、プロジェクトエクスプローラの「Sun」 > 「OTD ライブラリ」 > 「HL7 フォルダ」からセグメント OTD をプロジェクトにコピー&ペーストします。
エディタの「オブジェクト型定義」区画に示されているセグメント OTD の順序を書き留めておきます。元の OTD 構造を保つことが重要です。次の手順では、このリストからセグメント OTD を削除します。したがって、元のセグメント OTD の位置を書き留めておき、編集したセグメント OTD を OTD 構造内の元の位置に再配置できるようにすることが重要です (次の図を参照)。
「参照」区画の「内部」タブで、SFT セグメントを右クリックし、「削除」を選択して、セグメントを削除します。
「オブジェクト型定義」区画で、OTD ツリーから SFT セグメントを削除します。このためには、セグメントを右クリックし、ショートカットメニューから「削除」を選択します。
「参照」区画の「外部」タブで、セグメント OTD の参照のうちどれかひとつを削除します。この操作によって、このセグメント OTD に対する他のすべての参照も削除されます。
セグメント OTD をメイン OTD にインポートするには、「OTD を外部テンプレートにインポート」アイコンをクリックします。「インポート」ダイアログボックスが表示されます。
「インポート」ダイアログボックスで、プロジェクトファイルからインポートする OTD を検出して選択します。「追加」ボタンをクリックして、OTD を「インポートする OTD の選択」フィールドに追加します。「インポート」をクリックします (次の図を参照)。OTD がエディタの「参照」区画の「外部」タブに追加されます。
「参照」区画の「外部」タブから、インポートしたセグメントの参照 (この例の場合、HL7_25_SFT/SFT) を「オブジェクト型定義」区画のルートノードにドラッグ&ドロップします。セグメントがオブジェクト型定義ツリーに追加されます。
オブジェクト型定義ツリーで、セグメントを右クリックし、ショートカットメニューから「上のレベルへ」を選択して、セグメントをツリーの上位へ移動します。この手順を繰り返して、置き換え中のセグメントが存在していたのと同じ位置に新規セグメントが配置されるようにします。
変更をリポジトリに保存します。
これで、プロジェクトに配置されたセグメント OTD を開き、そのプロパティーを編集できるようになりました。
メッセージ OTD へのセグメント OTD の追加
また、OTD の外部テンプレートにほかのセグメント OTD を追加することで、OTD を変更することもできます。
OTD とインポートするセグメント OTD をプロジェクトにコピーして保存します。OTD エディタで OTD を開きます。
OTD エディタのツールバーで、「OTD を外部テンプレートにインポート」アイコンをクリックします。「インポート」ダイアログボックスが表示されます。
「インポート」ダイアログボックスで、プロジェクトファイルからインポートする OTD を検出して選択します。「追加」ボタンをクリックして、OTD を「インポートする OTD の選択」フィールドに追加します。「インポート」をクリックします。OTD がエディタの「参照」区画の「外部」タブに追加されます。
「参照」区画の「外部」タブから、セグメント OTD 参照を「オブジェクト型定義」区画のルートノードにドラッグ&ドロップします。セグメント OTD がオブジェクト型定義ツリーに追加されます。
変更をリポジトリに保存します。
OTD エディタの「オブジェクト型定義」区画 (中央の区画) には、OTD のノード、要素、およびフィールドが表示されます。これらのいずれかを選択すると、その項目のプロパティーが「プロパティー」区画に表示されます。
ノードのプロパティー
OTD エディタで HL7 OTD を開くと、ルートノードのプロパティーが「プロパティー」区画に表示されます。設定できるノードのプロパティーを次の表に示します。
ノードプロパティーの説明 |
|
---|---|
name |
ノードの表示名。これは、事実上任意の文字列にすることができます。 |
javaName |
プロパティーアクセサベース名。これは、通常、表示名から引き出され、Java 識別子に対する制限に適合するように変更されます。Sun Enterprise Service Bus によって自動的に提供されます。 |
javaType |
Java 型。自動的に割り当てられ、編集できません。 |
comment |
自由形式のテキスト (実行時には無効)。 |
delim |
指定された区切り文字。「区切り文字の指定」を参照してください。 |
nodeType |
マーシャル/アンマーシャルフォーマットを制御します。「ノードタイプの指定」を参照してください。 |
antecoding |
入力データのコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。このプロパティーを指定しないと、decoding プロパティーに指定した値が入力データに使用されます。このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
decoding |
アンマーシャルコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。(DBCS データには UTF-8 を使用することをお勧めします。これは、一部の ASCII 区切り文字の 16 進値が 2 バイト文字に含まれる 16 進値と一致することがあるためです。)このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
encoding |
マーシャルコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
order |
アンマーシャルプロセスの間の、選択したノードの子の順序を指定します。
|
postcoding |
出力データのコーディングを指定します (219 ページの「データエンコーディングの指定」参照)。このプロパティーを指定しないと、encoding プロパティーに指定した値が出力データに使用されます。このプロパティーは、top プロパティーが true に設定されている場合のみ表示されます。 |
public |
今後の開発用に予約済み |
showDelim |
nodeType が区切られている場合。 |
top |
ルートノードのフラグ: マーシャル/アンマーシャルのサポート (T/F)。 |
javaName プロパティーは変更しないでください。
要素のプロパティー
次の図に、要素レベルに関連付けられた一連のプロパティーを示します。
設定できる要素のプロパティーを次の表に示します。
要素プロパティーの説明 |
|
---|---|
name |
要素の表示名。 |
javaName |
プロパティーアクセサベース名。 |
javaType |
Java 型。自動的に割り当てられ、編集できません。 |
comment |
自由形式のテキスト (実行時には無効)。 |
access |
アクセス仕様。 |
optional |
フラグ: この要素が省略可能かどうか (T/F) ルート、または選択したノードの子には適用されません。 |
repeat |
フラグ: このノードは複数回の出現を許可されるかどうか (T/F) ルート、または選択したノードの子には適用されません。 |
maxOccurs |
ノードが反復の場合に、ノードの最大出現回数を指定します。ノードが反復でない場合、プロパティーは影響しませんが、値 >1 に設定されている場合、検証時にエラーが表示されることがあります。 |
delim |
区切り文字仕様 (「区切り文字の指定」参照)。 |
nodeType |
マーシャル/アンマーシャルフォーマットを制御します。 |
showDelim |
nodeType が区切られている場合。 |
Public |
将来の使用向けで、現在はアクティブではありません。 |
Top |
マーシャル/アンマーシャルがサポートされているかどうかを指定します (true または false)。デフォルト値は true です。 |
javaName プロパティーは変更しないでください。
フィールドのプロパティー
次の図に、フィールドレベルに関連付けられた一連のプロパティーを示します。
設定できるフィールドのプロパティーを次の表に示します。
フィールドプロパティーの説明 |
|
---|---|
name |
フィールドの表示名。 |
javaName |
プロパティーアクセサベース名。 |
javaType |
Java 型: java.lang.String またはバイト配列 (byte[]) のいずれか。 |
comment |
自由形式のテキスト (実行時には無効)。 |
access |
アクセス仕様。 |
optional |
フィールドがインスタンスに存在しないことを許可されるかどうかを指定します。「値」フィールドをクリックすると、true と false が切り替わります。フィールドが選択した要素ノードの子である場合は適用されません。 |
repeat |
ノードが複数回の出現を許可されるかどうかを指定します。「値」フィールドをクリックすると、true と false が切り替わります。フィールドが選択した要素ノードの子である場合は適用されません。 |
maxOccurs |
ノードが反復の場合に、ノードの最大出現回数を指定します。ノードが反復でない場合、プロパティーは影響しませんが、値 >1 に設定されている場合、検証時にエラーが表示されることがあります。 |
delim |
区切り文字仕様 (「区切り文字の指定」参照)。 |
initial |
親ノードの作成時またはリセット時に設定される、フィールドの初期値。指定した場合、ノードにデータが取り込まれる前に、ノードに割り当てられます。 |
match |
nodeType が区切られている場合、データに対する完全一致を実行します。 |
nodeType |
マーシャル/アンマーシャルフォーマットを制御します。 |
align |
match プロパティーのバイト整列の基準を指定します。 |
decoding |
nodeType が fixed の場合のみ表示されます。アンマーシャルコーディングを指定します(DBCS データには UTF-8 を使用することをお勧めします。これは、一部の ASCII 区切り文字の 16 進値が 2 バイト文字に含まれる 16 進値と一致することがあるためです)。 |
encoding |
nodeType が fixed の場合のみ表示されます。マーシャルコーディングを指定します。 |
length |
nodeType が fixed の場合のみ表示されます。フィールドの長さを指定します。デフォルト値は 0 です。 |
javaName プロパティーは変更しないでください。
nodeType プロパティーフィールドをクリックすると、フィールドが編集できるようになります。矢印ボタンをクリックすると、選択メニューが表示されます。プロパティーオプションの説明を次の表に示します。
ノードタイプのプロパティーオプション |
||||
---|---|---|---|---|
オプション |
説明 |
要素 |
フィールド |
内部 |
array |
array は区切られた構造です。反復される場合、出現は repeat 区切り文字によって区切られます。最後の出現は、normal 区切り文字で終端処理できます。 |
はい |
はい |
単一またはグループ |
delim |
delim (区切り) 構造。反復される場合、出現は normal 区切り文字によって区切られます。 |
はい |
はい |
単一またはグループ |
fixed |
fixed は固定長を意味し、負でない整数によって指定されます (また、0 は親ノードデータの終わりを意味します)。 |
はい |
はい |
単一またはグループ |
group |
group は、繰り返しなどのために、組織的なグループ化を可能にします。要素のみに適用されます。 |
はい |
いいえ |
グループ |
trans |
trans (一時) は、スクラッチパッドフィールドとして、内部ツリーのみに表示されます。外部データ表現には出現せず、子として trans nodeType のみを持つことができます。 |
はい |
はい |
選択、単一、またはグループ |
OTD ノードを移動した場合は、そのノードの nodeType をリセットします。
ノードの管理
OTD エディタでは、次の操作が可能です。
ノードおよび要素を OTD に「追加」する。
OTD からノードおよび要素を「削除」する。
ノードが削除されると、ノードと、このノードに関連付けられていた子 (データ要素) の両方が削除されます。
OTD 内のノードを「取り除く」。
ノードが取り除かれると、このノードに関連付けられていた子 (データ要素) のみが削除され、ノード自体は維持されます。取り除きは、ノードに対してのみ実行できます。
これらのコマンドには、ノードのコンテキストメニューからアクセスします。
他のほとんどのアダプタと異なり、SNA アダプタは OTD ウィザードで構成されていません。OTD ウィザードは、通常、アダプタプロジェクトで使用するコラボレーションの作成を容易にします。OTD ウィザードが使用可能な場合、最小限の機能を提供するためにスケルトンのコラボレーションが作成され、これをアプリケーションのニーズに適合するように変更します。SNA アダプタのように、OTD ウィザードがない場合、コラボレーションは完全にゼロから作成します。
プロジェクトエクスプローラで、ターゲットのプロジェクトを右クリックします。
「新規」 > 「コラボレーション定義 (Java)」を選択します。
コラボレーション定義ウィザード (Java)の手順 1 と 2 を完了します。
「検索」ドロップダウンボックスをたどって、新規コラボレーションで使用する OTD、SeeBeyond.eWays.SNALU62 を選択します。
目的の OTD 名を強調表示し、「追加」ボタンをクリックします。
必要に応じて、コラボレーションで使用する OTD のインスタンス名を変更します。
「完了」ボタンをクリックします。
SNA アダプタ OTD を実装する新規コラボレーションが作成されます。コラボレーションで使用できる SNA アダプタのメソッドについては、関連する Javadoc を参照してください。