この章では、Oracle BPEL Process ManagerおよびOracle Mediatorで動作する、Oracleファイル・アダプタおよびOracle FTPアダプタの使用方法について説明します。Oracleファイル/FTPアダプタの概念、機能、構成および使用例に関する情報も参照できます。
この章には、次の項が含まれます。
注意: Oracle JCA Adapter for Files/FTPという用語は、Oracleファイル・アダプタおよびOracle FTPアダプタを指します。これらは非常に似た機能を持ちますが、個別のアダプタです。 |
Oracle BPEL PMとメディエータには、Oracleファイル/FTPアダプタが組み込まれています。Oracleファイル/FTPアダプタを使用すると、ローカル・ファイルシステムやリモート・ファイルシステムのファイルを(ファイル転送プロトコル(FTP)を使用して)BPELプロセスまたはメディエータで交換(読取りおよび書込み)できるようになります。ファイルは、XMLとXML以外のデータ形式のどちらでもかまいません。
この項には、次の項目が含まれます。
Oracleファイル/FTPアダプタはJCA 1.5アーキテクチャに基づいています。JCAでは、異機種間のエンタープライズ情報システム(EIS)の統合に標準アーキテクチャを提供します。Oracleファイル/FTPアダプタのJCAバインディング・コンポーネントでは、基盤となるJCA相互作用がOracle BPEL PM統合のサービス(JCAバインディングを使用したWSDL
)として公開されています。Oracle JCAアダプタのアーキテクチャの詳細は、第1章「Oracle JCAアダプタの概要」を参照してください。
Oracleファイル/FTPアダプタはOracle BPEL PMと自動的に統合されます。JDeveloper BPELデザイナの「コンポーネント・パレット」からFTPアダプタの「ファイル・アダプタ」をドラッグ・アンド・ドロップすると、図4-1に示すように、アダプタ構成ウィザードが起動して「ようこそ」ページが表示されます。
このウィザードでOracleファイル/FTPアダプタを選択して構成できます。アダプタ構成ウィザードでは、図4-2に示すように、サービス名の入力を求められます。
構成が完了すると、Oracle JDeveloperの「アプリケーション・ナビゲータ」セクションにWSDL
とJCA
のファイルのペアが作成されます。(JDeveloper)このJCA
ファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。
アダプタ構成ウィザードの「操作タイプ」ページで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のページが表示され、構成情報の入力を求められます。表4-1に実行可能な操作をリスト表示し、指定する必要のある構成情報が説明されている項を示します。
表4-1 Oracle BPEL Process Managerについてサポートされている操作
操作 | 参照先 |
---|---|
Oracleファイル・アダプタ |
- |
|
第4.3.1項「Oracleファイル・アダプタのRead Fileの説明」 |
|
第4.3.2項「Oracleファイル・アダプタのWrite Fileの説明」 |
|
第4.3.3項「Oracleファイル・アダプタの同期読取りの説明」 |
|
第4.3.4項「Oracleファイル・アダプタのファイル・リスティングの説明」 |
Oracle FTPアダプタ |
- |
|
第4.3.5項「Oracle FTPアダプタのGet Fileの説明」 |
|
第4.3.6項「Oracle FTPアダプタのPut Fileの説明」 |
|
第4.3.7項「Oracle FTPアダプタの同期Get Fileの説明」 |
|
第4.3.8項「Oracle FTPアダプタのファイル・リスティングの説明」 |
Oracle JCAアダプタとOracle BPEL PMの統合の詳細は、第1章「Oracle JCAアダプタの概要」を参照してください。
Oracleファイル/FTPアダプタはメディエータと自動的に統合されます。JDeveloperデザイナでOracleファイル/FTPアダプタ・サービスを作成すると、アダプタ構成ウィザードが起動します。
このウィザードでOracleファイル/FTPアダプタを選択して構成できます。構成が完了すると、JDeveloperの「アプリケーション・ナビゲータ」セクションにWSDL
とJCA
のファイルのペアが作成されます。このJCA
ファイルには、アダプタ構成ウィザードで指定する構成情報が含まれます。
アダプタ構成ウィザードの「操作タイプ」ページで、実行する操作の選択を求められます。選択内容に応じて、アダプタ構成ウィザードの別のページが表示され、構成情報の入力を求められます。表4-2に実行可能な操作をリスト表示し、指定する必要のある構成情報が説明されている項を示します。アダプタおよびメディエータの詳細は、第1章「Oracle JCAアダプタの概要」を参照してください。
表4-2 Oracle Mediatorについてサポートされている操作
操作 | 参照先 |
---|---|
Oracleファイル・アダプタ |
- |
|
第4.3.1項「Oracleファイル・アダプタのRead Fileの説明」 |
|
第4.3.2項「Oracleファイル・アダプタのWrite Fileの説明」 |
|
第4.3.3項「Oracleファイル・アダプタの同期読取りの説明」 |
|
第4.3.4項「Oracleファイル・アダプタのファイル・リスティングの説明」 |
Oracle FTPアダプタ |
- |
|
第4.3.5項「Oracle FTPアダプタのGet Fileの説明」 |
|
第4.3.6項「Oracle FTPアダプタのPut Fileの説明」 |
|
第4.3.7項「Oracle FTPアダプタの同期Get Fileの説明」 |
|
第4.3.8項「Oracle FTPアダプタのファイル・リスティングの説明」 |
コンポジットは、設計されて単一アプリケーションにデプロイされるサービス、サービス・コンポーネント(Oracle BPEL PMおよびメディエータ)、ワイヤおよび参照のアセンブリです。コンポジットにより、メッセージに記述された情報が処理されます。コンポジットの詳細は、composite.xml
ファイルに格納されます。Oracleファイル/FTPアダプタとSOAコンポジットの統合の詳細は、第3.2.4項「Oracle SOAコンポジットとアダプタの統合」を参照してください。
Oracleファイル/FTPアダプタを使用すると、ローカルやリモートのファイルシステムのディレクトリを操作するようにBPELプロセスまたはメディエータを構成できます。この項では、Oracleファイル/FTPアダプタの次の機能について説明します。
注意: 大量の同時メッセージを使用するように設計されたOracleファイル/FTPアダプタを使用するコンポジットの場合は、オペレーティング・システムのオープン・ファイル数パラメータを大きい値に設定する必要があります。たとえば、Linuxのオープン・ファイル数パラメータを |
Oracleファイル/FTPアダプタでは、次のファイル形式の読取りおよび書込みが可能で、設計時と実行時の両方でアダプタ・トランスレータ・コンポーネントが使用されます。
Oracleファイル/FTPアダプタでは、ファイル・コンテンツを不透明(Opaque)オブジェクトとして処理し、コンテンツを(変換を実行せずに)元の形式で渡すこともできます。不透明(Opaque)オプションでは、構造をXSDで取得できないJPGやGIFなどのバイナリ・データや、変換の不要なデータが処理されます。
トランスレータにより、様々なフォーマットのネイティブ・データからXMLへの変換を、Oracleファイル/FTPアダプタで実行できるようになります。ネイティブ・データは単純な形式(フラット構造)または複雑な形式(親子関係)のいずれかです。 トランスレータでは、XMLフォーマットのデータと非XML(ネイティブ)フォーマットのデータの両方を処理できます。
Oracle FTPアダプタは、すべてのプラットフォームでRFC 959準拠のほとんどのFTPサーバーをサポートしています。Oracle FTPアダプタでは、その他のFTPサーバーをサポート可能にするプラガブル・メカニズムも利用できます。さらに、Oracle FTPアダプタは、SolarisおよびLinuxでSSLによるFTP(FTPS)をサポートしています。Oracle FTPアダプタはまた、SSHトランスポートを使用したSFTP(セキュアFTP)もサポートしています。
注意: Oracle FTPアダプタは、バージョン3以降のSFTPサーバーをサポートしています。 |
Oracleファイル/FTPアダプタでは、インバウンド方向およびアウトバウンド方向でファイルの交換が行われます。交換の方向により、Oracleファイル/FTPアダプタで実行されるタスクの内容は異なります。
Oracle BPEL PMまたはメディエータに送信されるインバウンド・ファイルの場合、Oracleファイル/FTPアダプタでは次の操作が実行されます。
ファイルシステムのポーリングによる一致ファイルの検索
設計時に定義されたネイティブ・スキーマ(NXSD)に基づくファイル・コンテンツの読取りおよび変換
変換済コンテンツのXMLメッセージとしてのパブリッシュ
Oracleファイル/FTPアダプタのこの機能はファイル読取り操作と呼ばれ、この機能を提供するコンポーネントはファイル・リーダーです。この操作は、Java Connector Architecture(JCA)インバウンド機能と呼ばれます。
Oracle BPEL PMまたはメディエータから送信されるアウトバウンド・ファイルの場合、Oracleファイル/FTPアダプタでは次の操作が実行されます。
BPELまたはメディエータからのメッセージの受信。
設計時に指定されたXMLコンテンツの書式設定。
出力ファイルの生成。出力ファイルは、基準(経過時間、ファイル・サイズおよびメッセージ数)に基づいて作成されます。これらの基準の組合せを出力ファイル用に指定することもできます。
Oracleファイル/FTPアダプタのこの機能はファイル書込み操作と呼ばれます。この操作は、JCAアウトバウンド相互作用と呼ばれます。
インバウンドおよびアウトバウンドの方向ごとに、Oracleファイル/FTPアダプタでは一連の構成パラメータが使用されます。例:
インバウンドのOracleファイル/FTPアダプタでは、入力ファイルが配置されるインバウンド・ディレクトリ用のパラメータと、ディレクトリをポーリングする頻度が設定されます。
アウトバウンドのOracleファイル/FTPアダプタでは、ファイルを書き込むアウトバウンド・ディレクトリ用のパラメータと、使用するファイル・ネーミング規則が設定されます。
注意: パブリッシュ・サイズ、メッセージ数およびポーリング頻度などの構成パラメータを変更するには、アダプタ構成ウィザードを使用する必要があります。 JCAファイル内のこれらのパラメータの値を手動で変更しないでください。 |
ファイル・リーダーではポーリング規則がサポートされており、いくつかの後処理オプションが用意されています。処理後にファイルを削除するか、移動するか、またはそのまま保持するかを指定できます。ファイル・リーダーでは、単一のメッセージとしてではなく、ファイル・コンテンツを分割してバッチで公開できます。この機能は、Oracleファイル/FTPアダプタのパフォーマンス・チューニングに使用できます。ファイル・リーダーでは、ファイルが何度も配信されることはありません。
Oracleファイル/FTPアダプタの読取りと書込みの機能の詳細は、次の項を参照してください。
ファイルに複数のメッセージがある場合には、特定数のバッチでメッセージをパブリッシュすることを選択できます。これはデバッチと呼ばれます。デバッチ中、再開と同時にファイル・リーダーは、前回の実行時に中断した場所から処理するため、メッセージが重複することはありません。XMLフォーマットとネイティブ・フォーマットのファイルでは、ファイルのデバッチ処理がサポートされています。JCA
ファイル内のpublish sizeパラメータの値を手動で変更しないでください。このパラメータを変更するには、アダプタ構成ウィザードを使用する必要があります。
最終バッチがデバッチ・シナリオに達したときに呼び出されるバッチ通知コールバック(Javaクラス)を登録できます。
<service ... <binding.jca ... <property name="batchNotificationHandler">java://oracle.sample.SampleBatchCalloutHandler </property>
ここでのプロパティ値はjava://{custom_class}
を指定し、そこにoracle.sample.SampleBatchCalloutHandler
が実装される必要があります。
package oracle.tip.adapter.api.callout.batch; public interface BatchNotificationCallout extends Callout { public void onInitiateBatch(String rootId, String metaData) throws ResourceException; public void onFailedBatch(String rootId, String metaData, long currentBatchSize, Throwable reason) throws ResourceException; public void onCompletedBatch(String rootId, String metaData, long finalBatchSize) throws ResourceException;
これは、whileループ内でinvokeアクティビティを使用してターゲット・ファイルを処理するOracleファイル/FTPアダプタの機能です。この機能を使用すると、大きいファイルを適宜処理できます。
無効なペイロードが提供された場合、ChunkedReadのシナリオでは例外がスローされません。変換例外(NXSD仕様に違反する不正レコード)が発生すると、エラーが発生した行や列などの詳細を含む変換例外メッセージがリターン・ヘッダーに移入されます。すべての変換エラーがフォルトになるわけではありません。このようなエラーは、リターン・ヘッダーに値としてマニフェスト化されます。jca.file.IsMessageRejected
およびjca.file.RejectionReason
ヘッダーの値をチェックして、例外が発生したかどうかを確認する必要があります。さらに、jca.file.NoDataFound
ヘッダーの値をチェックすることもできます。
Oracleファイル/FTPアダプタでファイルを特定の順序で処理する場合は、ソート・パラメータを構成する必要があります。たとえば、Oracleファイル/FTPアダプタのソート・パラメータは、ファイルをタイムスタンプの昇順または降順で処理するように構成できます。
Oracleファイル/FTPアダプタのソート・シナリオの場合、次の前提条件を満たす必要があります。
同期操作の使用
インバウンドJCAファイルへの次のプロパティの追加
<property name="ListSorter" value="oracle.tip.adapter.file.inbound.listing.TimestampSorterAscending"/> <property name="SingleThreadModel" value="true"/>
Oracleファイル/FTPアダプタでは、アウトバウンド・ファイルやアウトバウンド・ディレクトリの論理名または物理名を動的に指定できます。動的なアウトバウンド・ディレクトリを指定する方法は、第4.3.2.2項「アウトバウンド・ファイル・ディレクトリの作成」を参照してください。
Oracle FTPアダプタはSSLによるFTP(FTPS)とセキュアFTP(SFTP)をサポートしており、ネットワークを介したセキュアなファイル転送が可能です。
詳細は、第4.4.3項「Oracle FTPアダプタでのセキュアFTPの使用」および第4.4.4項「Oracle FTPアダプタでのSFTPの使用」を参照してください。
Oracleファイル・アダプタはインバウンド・ディレクトリからファイルを取得して処理し、処理したファイルを出力ディレクトリに送信します。ただし、Oracleファイル・アダプタには非トランザクションの性質があるため、このプロセス中にOracle RACバックエンドまたはSOA管理サーバーでフェイルオーバーが発生すると、ファイルが2回処理されます。その結果、出力ディレクトリに重複ファイルが生じる可能性があります。
Oracle FTPアダプタのプロキシ・サポート機能を使用すると、ファイアウォール外部のFTPサーバーやプロキシ・サーバーを介してのみアクセス可能なFTPサーバーとの間でデータを転送および取得できます。プロキシ・サーバーにより、イントラネット上のホストからインターネット上のホストに間接的に接続できます。図4-3に、プロキシ・サーバーが接続を作成してクライアントとリモートFTPサーバーとの直接接続をシミュレートする様子を示します。
HTTPプロキシ機能を使用するには、プロキシ・サーバーでHTTP接続を介したFTP通信量をサポートしている必要があります。また、この機能でサポートされるのはパッシブ・データ接続のみです。Oracle FTPアダプタの構成方法は、第4.4.5項「HTTPプロキシ用のOracle FTPアダプタの構成」を参照してください。
Oracle BPEL PMおよびメディエータの場合、Oracleファイル/FTPアダプタは、BPELプロセスやメディエータに対するファイル名、ディレクトリ、ファイル・サイズ、最終変更時間などのファイル・メタデータのみのパブリッシュをサポートしており、ペイロードは除外されます。このプロセスでは、このメタデータを以降の処理に使用できます。たとえば、プロセスで別の参照をコールし、以降の処理のためにファイル名とディレクトリ名を渡すことができます。Oracleファイル/FTPアダプタを通知サービスとして使用し、インバウンド・ディレクトリに新規ファイルが出現するたびにプロセスに通知できます。この機能を使用するには、読取り操作の構成時にJDeveloperウィザードで「ファイルの内容を読み取らない」チェック・ボックスを選択します。
Oracle BPEL PMおよびメディエータの場合、Oracleファイル・アダプタは大きいファイルを添付として転送する機能をサポートしています。この機能を使用するには、読取り操作の構成時にJDeveloperウィザードで「ファイルを添付ファイルとして読取り」チェック・ボックスを選択します。このオプションを選択すると、ある場所から別の場所へ大量のデータが添付として不透明に転送されます。たとえば、大量のMS Word文書、イメージおよびPDFをコンポジット・アプリケーション内でコンテンツを処理せずに転送できます。大きなペイロードを添付として渡す方法については、第4.5.6項「添付ファイルとしてのOracleファイル・アダプタのRead File」を参照してください。
さらに、Oracleファイル・アダプタにより、ファイルを添付として書き込む機能が提供されます。ファイルを添付として書き込むときに標準ペイロードも所有している場合は、添付ファイルが書き込まれ、ペイロードは無視されます。
注意: 大きなペイロードを不透明スキーマとして渡すことはできません。 |
Oracleファイル/FTPアダプタは、インバウンド・アダプタのエンドポイントのアクティブ化の制御に使用可能なファイルベースのトリガーをサポートしています。ファイルベースのトリガーの使用方法は、第4.3.1.4項「ファイル・ポーリング」を参照してください。
プロセス・モデラーでは、処理のためにファイルを取得する前に前処理を行ったり、宛先フォルダにファイルを書き出す前に後処理を行う必要がある状況が発生する場合があります。たとえば、Oracleファイル/FTPアダプタで受信されたファイルは圧縮または暗号化される可能性があるため、ファイルを処理する前に、アダプタでファイルを解凍または復号化する必要があります。この場合、カスタム・コードを使用して、ファイルを処理する前に解凍または復号化する必要があります。Oracleファイル/FTPアダプタでは、ファイルの前処理や後処理のためにプラグインできるカスタム・コードの使用がサポートされています。
ファイルの前処理および後処理の実装は、Oracleファイル/FTPアダプタの次の通信モードに制限されています。
Read FileまたはGet File
Write FileまたはPut File
同期Read File
チャンク読取り
この項には、次の項目が含まれます。
ファイルの前処理および後処理のメカニズムは、パイプラインおよびバルブとして構成されます。この項では、パイプラインおよびバルブについて説明します。
パイプラインには、カスタム定義された一連のバルブが含まれます。ファイルシステムからパイプラインにロードされたストリームは、順序付けられた一連のバルブによって処理され、処理の後に、変更されたストリームがアダプタに返されます。
バルブは、パイプライン処理における主要な実行コンポーネントです。バルブでは、受信したコンテンツを処理して、処理済のコンテンツを次のバルブに転送します。たとえば、暗号化され、かつ圧縮されたファイルをOracleファイル/FTPアダプタで受信するというシナリオでは、解凍バルブの後に復号化バルブを使用するパイプラインを構成できます。図4-4に示すように、ファイル・コンテンツは解凍バルブで解凍された後、復号化バルブに転送され、復号化バルブで復号化されて、最終的なコンテンツがOracleファイル/FTPアダプタで使用できるようになります。
ファイルの前処理および後処理のメカニズムを構成するには、パイプラインを定義して、対応するJCA
ファイルでパイプラインを構成する必要があります。
パイプラインを構成する手順は、次のとおりです。
すべてのバルブにValve
またはStagedValve
インタフェースを実装する必要があります。
ヒント: バルブを最初から実装するかわりに、ビジネス要件に応じて |
例4-1 に、サンプルのValveインタフェースを示します。
例4-1 Valveインタフェース
package oracle.tip.pc.services.pipeline; import java.io.IOException; /** <p> * Valve component is resposible for processing the input stream * and returning a modified input stream. * The <code>execute()</code> method of the valve gets invoked * by the caller (on behalf) of the pipeline. This method must * return the input stream wrapped within an InputStreamContext. * The Valve is also responsible for error handling specifically * * The Valve can be marked as reentrant in which case the caller * must call the <code>execute()</code> multiple times and each * invocation must return a new input stream. This is useful, if * you are writing an UnzipValve since each iteration of the valve * must return the input stream for a different zipped entry. * <b> You must note that only the first Valve in the pipeline can * be reentrant </b> * * The Valve has another flavor <code>StagedValve</code> and if * the valve implements StagedValve, then the valve must store * intermediate content in a staging file and return it whenever * required. * </p> */ public interface Valve { /** * Set the Pipeline instance. This parameter can be * used to get a reference to the PipelineContext instance. * @param pipeline */ public void setPipeline(Pipeline pipeline); /** Returns the Pipeline instance. * @return */ public Pipeline getPipeline(); /** Returns true if the valve has more input streams to return * For example, if the input stream is from a zipped file, then * each invocation of <code>execute()</code> returns a different * input stream once for each zipped entry. The caller calls * <code>hasNext()</code> to check if more entries are available * @return true/false */ public boolean hasNext(); /** Set to true if the caller can call the valve multiple times * e.g. in case of ZippedInputStreams * @param reentrant */ public void setReentrant(boolean reentrant); /** Returns true if the valve is reentrant. * @return */ public boolean isReentrant(); /** The method is called by pipeline to return the modified input stream * @param in * @return InputStreamContext that wraps the input stream along with required metadata * @throws PipelineException */ public InputStreamContext execute(InputStreamContext in) throws PipelineException, IOException; /** * This method is called by the pipeline after the caller publishes the * message to the SCA container. * In the case of a zipped file, this method gets called repeatedly, once * for each entry in the zip file. * This should be used by the Valve to do additional tasks such as * delete the staging file that has been processed in a reentrant scenario. * @param in The original InputStreamContext returned from <code>execute()</code> */ public void finalize(InputStreamContext in); /**Cleans up intermediate staging files, input streams * @throws PipelineException, IOException */ public void cleanup() throws PipelineException, IOException; }
StagedValve
には、ステージング・ファイルの中間コンテンツが格納されます。例4-2に、Valve
インタフェースを拡張するStagedValve
インタフェースを示します。
例4-2 Valveインタフェースを拡張するStagedValveインタフェース
package oracle.tip.pc.services.pipeline; import java.io.File; /** * A special valve that stages the modified * input stream in a staging file. * If such a <code>Valve</code> exists, then * it must return the staging file containing * the intermediate data. */ public interface StagedValve extends Valve { /** * @return staging file where the valve stores its intermediate results */ public File getStagingFile(); }
例4-3に、Valve
インタフェースを実装するAbstractValve
クラスのサンプルを示します。
例4-3 Valveインタフェースを実装するAbstractValveインタフェース
package oracle.tip.pc.services.pipeline; import java.io.IOException; /** * A bare bone implementation of Valve. The user should extend from * AbstractValve rather than implementing a Valve from scratch * */ public abstract class AbstractValve implements Valve { /** * The pipeline instance is stored as a member */ private Pipeline pipeline = null; /** * If reentrant is set to true, then the Valve must adhere to the following: * i) It must the first valve in the pipeline ii) Must implement hasNext * method and return true if more input streams are available A reentrant * valve will be called by the pipeline more than once and each time the * valve must return a different input stream, for example Zipped entries * within a zip file */ private boolean reentrant = false; /* * Save the pipeline instance. * * @see oracle.tip.pc.services.pipeline.Valve#setPipeline(oracle.tip.pc.services.pipeline .Pipeline) */ public void setPipeline(Pipeline pipeline) { this.pipeline = pipeline; } /* * Return the pipeline instance (non-Javadoc) * * @see oracle.tip.pc.services.pipeline.Valve#getPipeline() */ public Pipeline getPipeline() { return this.pipeline; } /* * Return true if the valve is reentrant (non-Javadoc) * * @see oracle.tip.pc.services.pipeline.Valve#isReentrant() */ public boolean isReentrant() { return this.reentrant; } /* * If set to true, the valve is reentrant (non-Javadoc) * * @see oracle.tip.pc.services.pipeline.Valve#setReentrant(boolean) */ public void setReentrant(boolean reentrant) { this.reentrant = reentrant; } /* * By default, set to false For valves that can return more than one * inputstreams to callers, this parameter must return true/false depending * on the availability of input streams (non-Javadoc) * * @see oracle.tip.pc.services.pipeline.Valve#hasNext() */ public boolean hasNext() { return false; } /* * Implemented by concrete valve (non-Javadoc) * * @see oracle.tip.pc.services.pipeline.Valve#execute(InputStreamContext) */ public abstract InputStreamContext execute(InputStreamContext in) throws PipelineException, IOException; /* * Implemented by concrete valve (non-Javadoc) * * @see oracle.tip.pc.services.pipeline.Valve#finalize(oracle.tip.pc.services.pipeline.In putStreamContext) */ public abstract void finalize(InputStreamContext in); /* * Implemented by concrete valve (non-Javadoc) * * @see oracle.tip.pc.services.pipeline.Valve#cleanup() */ public abstract void cleanup() throws PipelineException, IOException; }
例4-4に、AbstractValve
クラスを拡張するAbstractStagedValve
クラスを示します。
例4-4 AbstractValveクラスを拡張するAbstractStagedValveクラス
package oracle.tip.pc.services.pipeline; import java.io.File; import java.io.IOException; public abstract class AbstractStagedValve extends AbstractValve implements StagedValve { public abstract File getStagingFile(); public abstract void cleanup() throws IOException, PipelineException; public abstract InputStreamContext execute(InputStreamContext in) throws IOException, PipelineException; }
詳細は、付録B「Oracle JCAアダプタ・バルブ」を参照してください。
バルブをコンパイルするには、bpm-infra.jar
ファイルを使用する必要があります。bpm-infra.jar
ファイルは、$MW_HOME/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar
にあります。
bpm-infra.jar
ファイルに対するSOAプロジェクトを参照するには、次の手順を使用します。
「アプリケーション・ナビゲータ」で、「SOAプロジェクト」を右クリックします。
「プロジェクト・プロパティ」を選択します。「プロジェクト・プロパティ」ダイアログが表示されます。
「ライブラリとクラスパス」をクリックします。図4-5に示すように、「ライブラリとクラスパス」ペインが表示されます。
「Jar/ディレクトリの追加」をクリックします。「アーカイブまたはディレクトリの追加」ダイアログが表示されます。
参照してbpm-infra.jar
ファイルを選択します。Bpm-infra.jar
ファイルは、$MW_HOME/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar
にあります。
「OK」をクリックします。bpm-infra.jar
ファイルが「クラスパス・エントリ」に表示されます。
bpm-infra.jar
ファイルを使用してバルブをコンパイルします。
コンパイルされたバルブを含むJAR
ファイルをsoainfra
ドメインのクラスパスに追加して、Oracle WebLogic Serverクラスパスで使用できるようにします。たとえば、$MW_HOME/user_projects/domains/soainfra/lib
などです。
注意:
|
パイプラインを構成するには、次のスキーマに準拠するXMLファイルを作成する必要があります。
<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.oracle.com/adapter/pipeline"> <xs:element name="pipeline"> <xs:complexType> <xs:sequence> <xs:element ref="valves"> <xs:complexType> <xs:sequence> <xs:element ref="valve" maxOccurs="unbounded"> <xs:complexType mixed="true"> <xs:attribute name="reentrant" type="xs:NMTOKEN" use="optional" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:attribute name="useStaging" type="xs:NMTOKEN" use="optional" /> <xs:attribute name="batchNotificationHandler" type="xs:NMTOKEN" use=" optional" /> </xs:element> </xs:schema
パイプラインに対してSimpleUnzipValve
およびSimpleDecryptValve
の2つのバルブを使用して構成したサンプルのXMLファイルを次に示します。
<?xml version="1.0"?> <pipeline xmlns="http://www.oracle.com/adapter/pipeline"> <valves> <valve>valves.SimpleUnzipValve</valve> <valve> valves.SimpleDecryptValve </valve> </valves> </pipeline>
pipeline
.xml
ファイルをSOAプロジェクト・ディレクトリに追加する必要があります。パイプラインをOracleファイル/FTPアダプタと統合するには、この手順が必須です。図4-6に、InboundUnzipAndOutboundZip
プロジェクトに追加されたサンプルのpipeline
.xml
ファイル(unzippipeline.xml
)を示します。
SOAプロジェクトの一部であるパイプラインは、次のプロパティを追加してインバウンドJCAファイルを変更することにより登録する必要があります。
<property name="PipelineFile" value="pipeline.xml"/>
たとえば、図4-6に示すように、JCAファイル(FileInUnzip_file.jca
)には、Unzip
パイプラインをOracleファイル・アダプタに登録するために次のプロパティが追加されています。
<property name="PipelineFile" value="unzippipeline.xml"/>
単純なバルブを使用したシナリオがある場合もあります。単純なバルブとは、リエントラント性などの追加メタデータやbatchNotificationHandlers
を必要としないバルブのことです。単純なバルブを使用するシナリオの場合、パイプラインは、次のサンプルに示すようにActivationSpec
またはInteractionSpec
プロパティとして構成できます。
<adapter-config name="FileInUnzip" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" UIincludeWildcard="*.zip" adapterRef=""/> <endpoint-activation portType="Read_ptt" operation="Read"> <activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec"> <property../> <property name="PipelineValves" value="valves.SimpleUnzipValve,valves.SimpleDecryptValve"/> </activation-spec> </endpoint-activation> </adapter-config>
注意:
|
注意:
|
リエントラント・バルブを使用すると、Zipファイル内の個別エントリを処理できます。Zipファイル内のすべてのエントリを処理するシナリオでは、各エントリがData Encryption Standard(DES)を使用して暗号化されますが、reentrant="true"
属性を解凍バルブに次のように追加することにより、バルブを構成できます。
<?xml version="1.0"?>
<pipeline xmlns="http://www.oracle.com/adapter/pipeline">
<valves>
<valve reentrant="true">valves.ReentrantUnzipValve</valve>
<valve> valves.SimpleDecryptValve </valve>
</valves>
</pipeline>
この例では、Zipファイル全体が処理されるまで、パイプラインによってReentrantUnzipValve
の次にSimpleDecryptValve
が同じ順序で繰り返し起動されます。つまり、まずReentrantUnzipValve
が起動されて圧縮された最初のエントリのデータを返し、次に、そのエントリがSimpleDecryptValve
に送られて復号化され、最終的なコンテンツがアダプタに返されます。このプロセスが、Zipファイル内のすべてのエントリが処理されるまで繰り返されます。
また、バルブにはsetMessageKey()
APIを使用してメッセージ・キーを設定する必要があります。詳細は、付録B「複数ファイルの処理用の解凍バルブ」を参照してください。
Zipファイルのエラー処理
Zipファイル内の個別のエントリに対して変換エラーが発生する場合、変換エラーのあるエントリは拒否され、他のエントリが処理されます。
パブリッシュ操作中のエラーが発生する場合、パブリッシュ操作は再試行され、再試行セマンティックが保持されます。再試行セマンティックが保持されない場合、元のファイルが拒否されてパイプラインは終了します。
BatchNotificationHandler
APIは、Oracleファイル/FTPアダプタのインバウンドのデバッチ機能とともに使用されます。デバッチ・シナリオでは各ファイルに複数メッセージが含まれ、クラッシュ・リカバリに対するなんらかのブックキーピングが必要となります。このことはBatchNotificationHandler
APIによって容易になります。このAPIによりバッチが開始、発生または終了するたびにパイプラインから通知を受け取ります。次にBatchNotificationHandler
インタフェースを示します。
package oracle.tip.pc.services.pipeline; /* * Whenever the caller processes de-batchable files, each file can * have multiple messages and this handler allows the user to plug in * a notification mechanism into the pipeline. * * This is particularly useful in crash recovery situations */ public interface BatchNotificationHandler { /* * The Pipeline instance is set by the PipelineFactory when the * BatchNotificationHandler instance is created */ public void setPipeline(Pipeline pipeline); public Pipeline getPipeline(); /* * Called when the BatchNotificationHandler is instantiated */ public void initialize(); /* * Called by the adapter when a batch begins, the implementation must return * a BatchContext instance with the following information: * i) batchId: a unique id that will be returned every time onBatch is invoked by called * ii)line/col/record/offset: for error recovery cases */ public BatchContext onBatchBegin(); /* * Called by the adapter when a batch is submitted. The parameter holds the * line/column/record/offset for the successful batch that is published. * Here the implementation must save these in order to recover from crashes */ public void onBatch(BatchContext ctx); /* * Called by the adapter when a batch completes. This must be used to clean * up */ public void onBatchCompletion(boolean success); }
デバッチを含むパイプラインを使用するには、BatchNotificationHandler
インスタンスを使用したパイプラインを次のように構成する必要があります。
<?xml version="1.0"?> <pipeline xmlns="http://www.oracle.com/adapter/pipeline" batchNotificationHandler="oracle.tip.pc.services.pipeline.ConsoleBatchNotificationHandler"> <valves> <valve reentrant="true">valves.SimpleUnzipValve</valve> <valve>valves.SimpleDecryptValve</valve> </valves> </pipeline>
Oracleファイル・アダプタとOracle FTPアダプタには、uniqueMessageSeparator
プロパティなどのインバウンド・エラー処理機能が用意されています。
デバッチ処理(1つのファイルに複数のメッセージがある場合)では、不正メッセージの開始部分からファイルの終わりまでが拒否されます。各メッセージに一意のセパレータがあり、いずれのデータの一部でもない場合、拒否される部分はより細かくなります。その場合、ネイティブ・スキーマのスキーマ要素にuniqueMessageSeparator
プロパティを定義し、この一意のメッセージ・セパレータの値を取得できます。1つのファイル内の複数レコードの解析(デバッチ処理)中、このプロパティがアダプタ・トランスレータの動作を制御します。このプロパティを使用することにより、大きなバッチ・ファイルに不正メッセージが検出された場合でもリカバリが可能になります。不正レコードが検出されると、アダプタ・トランスレータは次の一意のメッセージ・セパレータ境界にスキップし、そこから続行します。このプロパティを設定しないと、不正レコード以降のすべてのレコードが拒否されます。
次のスキーマ・ファイルにuniqueMessageSeparator
プロパティの使用例を示します。
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:nxsd="http://xmlns.oracle.com/pcbpel/nxsd"
targetNamespace="http://TargetNamespace.com/Reader"
xmlns:tns="http://TargetNamespace.com/Reader"
elementFormDefault="qualified" attributeFormDefault="unqualified"
nxsd:encoding="US-ASCII" nxsd:stream="chars"
nxsd:version="NXSD" nxsd:uniqueMessageSeparator="${eol}">
<xsd:element name="emp-listing">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="emp" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="GUID" type="xsd:string" nxsd:style="terminated"
nxsd:terminatedBy="," nxsd:quotedBy=""">
</xsd:element>
<xsd:element name="Designation" type="xsd:string"
nxsd:style="terminated" nxsd:terminatedBy=","
nxsd:quotedBy=""">
</xsd:element>
<xsd:element name="Car" type="xsd:string" nxsd:style="terminated"
nxsd:terminatedBy="," nxsd:quotedBy=""">
</xsd:element>
<xsd:element name="Labtop" type="xsd:string"
nxsd:style="terminated" nxsd:terminatedBy=","
nxsd:quotedBy=""">
</xsd:element>
<xsd:element name="Location" type="xsd:string"
nxsd:style="terminated" nxsd:terminatedBy=","
nxsd:quotedBy=""">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<!--NXSDWIZ:D:\work\jDevProjects\Temp_BPEL_process\Sample2\note.txt:-->
<!--USE-HEADER:false:-->
拒否されたメッセージ、接続エラーおよびメッセージ・エラーの処理の詳細は、第2.21.1項「拒否されたメッセージの処理」を参照してください。
この項では、Oracleファイル/FTPアダプタがサポートするスレッド・モデルについて説明します。Oracleファイル/FTPアダプタを抑制または抑制解除するには、スレッド・モデルの知識が必要です。Oracleファイル/FTPアダプタでは、次のスレッド・モデルを使用します。
デフォルトのスレッド・モデルでは、インバウンドのOracleファイル/FTPアダプタの各エンドポイントに対してポーラーが作成されます。ポーラーは、ファイル・メタデータをメモリー内キューにエンキューします。このファイル・メタデータはプロセッサ・スレッドのグローバル・プールによって処理されます。図4-7はデフォルトのスレッド・モデルを示しています。
次の手順で、デフォルトのスレッド・モデルの機能を明確に示します。
ポーラーは、入力ディレクトリ内のファイルを定期的に検索します。ポーラーがファイルを検索する間隔は、インバウンドJCA
ファイルのPollingFrequency
パラメータで指定されます。
ポーラーは、構成済のインバウンド・ディレクトリで検出した新規ファイルごとに、ファイル名、ファイル・ディレクトリ、変更時間、ファイル・サイズなどの情報を内部のメモリー内キューにエンキューします。
注意: 新規ファイルとは処理されていないファイルです。 |
プロセッサ・ワーカー・スレッドのグローバル・プールは、メモリー内キューのファイルの処理を待機します。
プロセッサ・ワーカー・スレッドは内部キューからファイルを取得し、次のアクションを実行します。
適切なトランスレータ(テキスト、バイナリ、XMLまたは不透明データを読み取るトランスレータなど)にファイルの内容をストリームします。
トランスレータによるXMLの結果をSCAインフラストラクチャにパブリッシュします。
ファイル処理後の削除やアーカイブなど、必要な後処理を実行します。
Oracleファイル/FTPアダプタのデフォルトのスレッド動作を変更できます。スレッド・モデルを変更すると、Oracleファイル/FTPアダプタの抑制動作が変更されます。以降の各項では、Oracleファイル/FTPアダプタの変更されたスレッド動作について説明します。
シングル・スレッド・モデル
シングル・スレッド・モデルは、ポーラーがプロセッサの役割を果たせるようにする、変更されたスレッド・モデルです。ポーラー・スレッドは、同じスレッド内のファイルを処理します。このモデルでは、プロセッサ・スレッドのグローバル・プールは使用されません。シングル・スレッド・モデルのプロパティは、インバウンドJCAファイルで次のように定義できます。
<activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec"> <property../> <property name="SingleThreadModel" value="true"/> <property../> </activation-spec>
パーティション化スレッド・モデル
パーティション化スレッド・モデルは、メモリー内キューがパーティション化され、各コンポジット・アプリケーションがそれぞれのメモリー内キューを取得する、変更されたスレッド・モデルです。Oracleファイル/FTPアダプタは、プロセッサ・ワーカー・スレッドのグローバル・プールに依存しないで独自のプロセッサ・スレッドを作成し、エンキューされたファイルを処理できます。パーティション・モデルのプロパティは、インバウンドJCAファイルで次のように定義できます。
<activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec"> <property../> <property name="ThreadCount" value="4"/> <property../> </activation-spec>
この例で、パーティション・モデルのプロパティ定義は次のようになります。
ThreadCount
プロパティが0
に設定されている場合、スレッド動作はシングル・スレッド・モデルと同様になります。
ThreadCount
プロパティが-1
に設定されている場合、グローバル・スレッド・プールが使用され、動作はデフォルトのスレッド・モデルと同じになります。
ThreadCount
プロパティの最大値は40
です。
Oracleファイル/FTPアダプタでは、インバウンド操作とアウトバウンド操作を抑制するためのノブを提供することでパフォーマンス・チューニング機能をサポートしています。Oracleファイル/FTPアダプタでは、アウトバウンド操作のパフォーマンス・チューニングに使用できるノブも提供されます。
チューニングの実行に関する詳細は、『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』のOracle JCA Adapters for Files/FTPに関する項を参照してください。
Oracleファイル/FTPアダプタは、Oracle BPEL Process ManagerおよびOracle Mediatorサービス・エンジンでのアクティブ/アクティブ・トポロジに対する高可用性機能をサポートしています。この機能は、インバウンド操作とアウトバウンド操作の両方でサポートされています。
Oracleファイル/FTPアダプタは、1つのアクティブ化における複数ディレクトリのポーリングをサポートしています。JDeveloperで単一ディレクトリではなく複数のディレクトリを指定できます。これは、物理ディレクトリと論理ディレクトリの両方に適用可能です。
注意: インバウンドのOracleファイル・アダプタが着信ファイルを複数のディレクトリでポーリングするように構成されている場合は、ファイル・リーダーがこれらのディレクトリのポーリングを開始する前に、すべての最上位ディレクトリ(入力ファイルが表示されるインバウンド・ディレクトリ)が存在している必要があります。 |
1つ以上のインバウンド・ディレクトリを選択した後、サブディレクトリの再帰的な処理が必要かどうかも指定できます。「ファイルを再帰的に処理します」オプションを選択した場合は、ディレクトリが再帰的に処理されます。図4-8に示すように、デフォルトでは、このオプションが「ファイル・ディレクトリ」ページで選択されます。
複数のディレクトリを選択した場合、生成されるJCAファイルではディレクトリのセパレータとしてセミコロン(;)が使用されます。ただし、他のセパレータへの変更も可能です。その場合は、生成されたJCAファイルに手動でDirectorySeparator="
選択したセパレータ
"
を追加します。たとえば、セパレータとしてカンマ(,)を使用する場合は、まず物理ディレクトリ内でセパレータを","に変更してから、JCAファイルに<property name="DirectorySeparator" value=","/>
を追加します。
さらに、ディレクトリを再帰的に処理し、1つ以上のサブディレクトリに適切な権限がない場合、インバウンド・アダプタは処理時に例外をスローします。この例外を無視する場合は、次の例に示すようにcomposite.xml
でignoreListingErrors
の名前を持つバインディング・プロパティを定義する必要があります。
<service name="FlatStructureIn"> <interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/file/FlatStructureIn/#wsdl.inte rface(Read_ptt)"/> <binding.jca config="FlatStructureIn_file.jca"> <property name="ignoreListingErrors" type="xs:string" many="false">true</property> </binding.jca> </service>
Oracleファイル/FTPアダプタを使用すると、既存のファイルに追加するアウトバウンド相互作用を構成できます。「既存のファイルに追加します」オプションを使用すると、アウトバウンド起動で同じファイルに書き込むことができます。ファイル名に追加するには、2つの方法があります。
静的 - アウトバウンドのOracleファイル・アダプタのJCAファイルに追加します。
動的 - ヘッダー・メカニズムを使用します。
注意: SFTPシナリオの場合、追加モードはサポートされておらず、既存のファイルに追加されるかわりにファイルが上書きされます。 |
「ファイル構成」ページで「既存のファイルに追加します」オプションを選択すると、「メッセージ数の到達」、「経過時間の超過」、「ファイル・サイズの超過」などのバッチ処理オプションが無効化されます。図4-9に、「既存のファイルに追加します」オプションを示します。
ウィザードで「追加」を選択すると、バッチ処理オプションが無効化されます。また、静的ファイル・ネーミング規則ではなく動的ファイル・ネーミング規則を指定すると、次のエラー・メッセージが表示されます。
You cannot choose to Append Files and use a dynamic file naming convention at the same time
Oracle FTPアダプタで追加機能を使用する場合は、FTPサーバーがAPPEコマンドをサポートしていることを確認してください。
Oracle SOA Suiteの以前のバージョンでは、インバウンドのOracle FTPアダプタはNLST
(名前リスト)FTPコマンドを使用してFTPサーバーから取得したファイル名のリストを読み取っていました。ただし、NLSTコマンドはディレクトリ名を返さないため、ディレクトリ内での再帰的処理はできませんでした。11g リリースでは、Oracle FTPアダプタはかわりにLIST
コマンドを使用します。
ただし、LIST
コマンドによるレスポンスはFTPサーバーによって異なります。LIST
コマンドに起因する微妙な差異を標準の方法に取り入れるために、次のパラメータがOracle FTPアダプタのデプロイメント・ディスクリプタに追加されています。
defaultDateFormat: このパラメータでは、デフォルトの日付書式の値を指定します。FTPサーバー上では、これは古いファイルの値です。このパラメータのデフォルト値はMMM d yyyy
です。これは、UNIX型のほとんどのFTPサーバーが古いファイルの最終変更時のタイムスタンプをMMM d yyyy
の書式で返すためです。たとえば、Jan 31 2006
に変更します。
FTPコマンドライン・クライアントでls -l
コマンドを使用すると、FTPサーバーのデフォルトの日付書式を確認できます。たとえば、Linuxで稼動しているvsftpdサーバーの場合、ls -l
は次の結果を返します。
-rw-r--r-- 1 500 500 377 Jan 22 2005 test.txt
Microsoft Windows NT FTPサーバーの場合、defaultDateFormat
はMM-dd-yy hh:mma
です。たとえば、03-24-09 08:06AM <
DIR
> oracle
のようになります。
recentDateFormat: このパラメータでは、最新の日付書式の値を指定します。FTPサーバー上では、これは最近作成されたファイルの値です。
このパラメータのデフォルト値はMMM d HH:mm
です。これは、UNIX型のほとんどのFTPサーバーが最近作成されたファイルの最終変更日付をMMM d HH:mm
の書式で返すためです。たとえば、Jan 31 21:32
のようになります。
FTPコマンドライン・クライアントでls -l
コマンドを使用すると、FTPサーバーのデフォルトの日付書式を確認できます。たとえば、Linuxで稼動しているvsftpdサーバーの場合、ls -l
は次の結果を返します。
150 Here comes the directory listing. -rw-r--r-- 1 500 500 377 Jan 30 21:32 address.txt -rw-r--r-- 1 500 500 580 Jan 3121:32 container.txt .....................................................................................
Microsoft Windows NT FTPサーバーの場合、recentDateFormat
パラメータはMM-dd-yy hh:mma
というフォーマットになります。たとえば、03-24-09 08:06AM <
DIR
> oracle
のようになります。
serverTimeZone: サーバーのタイムゾーン(America/Los_Angelesなど)です。このパラメータを空白に設定すると、Oracle FTPアダプタを実行しているサーバーのデフォルト・タイムゾーンが使用されます。
listParserKey: LIST
コマンドによるレスポンスをどのように解析するかをOracle FTPアダプタに指示します。デフォルト値はUNIXです。この場合、Oracle FTPアダプタは、UNIX型FTPサーバーの一般的なパーサーを使用します。UNIX
以外にサポートされている値には、Microsoft Windows NT FTPサーバーに固有のWIN
およびWINDOWS
があります。
注意: ロケール言語がFTPサーバーとオペレーティング・システムで異なる場合があります。FTPサーバーと稼働元のオペレーティング・システムのロケールが同じだと仮定しないでください。ロケールが異なる場合は、 |
serverLocaleLanguage: このパラメータでは、言語のロケール・コンストラクトを指定します。
serverLocaleCountry: このパラメータでは、国のロケール・コンストラクトを指定します。
serverLocaleVariant: このパラメータでは、バリアントのロケール・コンストラクトを指定します。
デプロイメント・ディスクリプタのパラメータの構成
通常、FTPサーバーの標準の日付書式は、FTPサーバーのインストール時に構成されます。FTPサーバーでdefaultDateFormatにMMM d yyyyの書式を、recentDateFormatにMMM d HH:mmの書式を使用する場合、Oracle FTPアダプタは、その対応するデプロイメント・ディスクリプタで同じ書式を使用する必要があります。
コマンドラインFTPでls -lを入力すると、次の内容を確認できます。
200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-r--r-- 1 500 500 377 Jan 22 21:32 1.txt -rw-r--r-- 1 500 500 580 Jan 22 21:32 2.txt .................................................................................
これは、FTPサーバーのrecentDateFormatパラメータです。たとえば、MMM d HH:mm(Jan 22 21:32)のように表示されます。同様に、サーバーに古いファイルがある場合、そのサーバーでは時と分の部分が表示されません。その場合は次のように表示されます。
-rw-r--r-- 1 500 500 377 Jan 22 2005 test.txt
これはデフォルトの日付書式です。たとえば、MMM d yyyy(Jan 22 2005)のように表示されます。
さらに、特定のタイムゾーンで実行しているFTPサーバーのタイムスタンプを解析するために、Oracle FTPアダプタでserverTimeZoneパラメータが使用されます。その値には、PSTのような略称かAmerica/Los_Angelesのような完全名のいずれかが指定されます。
さらに、FTPサーバーを異なるロケールで実行している場合もあります。言語、国、バリアントによるロケールを構成するために、serverLocaleLanguage、serverLocaleCountryおよびserverLocaleVariantの各パラメータを使用します。ここで
言語は小文字2文字のISO-639コードで指定します(例: en)。
国は大文字2文字のISO-3166コードで指定します(例: US)。
バリアントはベンダーおよびブラウザ固有のコードで指定します。
これらのロケール・パラメータが指定されていない場合、Oracle FTPアダプタはシステム・ロケールを使用してタイムスタンプを解析します。
さらに、FTPサーバーをSOAスイートとは異なるシステムで実行している場合は、マシン間のタイムゾーンの差異を処理する必要があります。Oracle FTPアダプタを実行しているシステムとFTPサーバーの時差をミリ秒に換算し、その値をcomposite.xml
ファイルのバインディング・プロパティtimestampOffsetとして追加します。
たとえば、FTPサーバーがローカル時間よりも6時間進んでいる場合は、次のエンドポイント・プロパティをサービスまたは参照に追加する必要があります。
<service name="FTPDebatchingIn"> <interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/ftp/FTPDebatchingIn/#wsdl. interface(Get_ptt)"/> <binding.jca config="DebatchingIn_ftp.jca"> <property name=" timestampOffset" type="xs:string" many="false" source="" override="may"> 21600000</property> </binding.jca> </service>.
LIST
コマンドを適切に処理できないFTPサーバーもあります。その場合は、リスト表示にNLST
コマンドを使用します。ただし、NLST
ではディレクトリを再帰的に処理できません。
NLST
コマンドを使用する場合は、例に示すように、次のプロパティをJCAファイルに追加する必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<adapter-config name="FTPDebatchingIn" adapter="Ftp Adapter"
xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
<connection-factory location="eis/Ftp/FtpAdapter" UIincludeWildcard="*.txt"
adapterRef=""/>
<activation-spec
className="oracle.tip.adapter.ftp.inbound.FTPActivationSpec">
…………………………………………..
…………………………………………..
<property name="UseNlst" value="true"/>
</activation-spec>
</endpoint-activation>
</adapter-config>
リソース・アダプタは、エンタープライズ情報システム(EIS)とのアウトバウンド接続を確立する際に、有効なセキュリティ資格証明を使用してサインオンする必要があります。J2CA 1.5仕様に従って、Oracle WebLogic Serverではアウトバウンド接続についてコンテナ管理のサインオンとアプリケーション管理のサインオンの両方がサポートされています。実行時に、Oracle WebLogic Serverは、起動するクライアント・コンポーネントのデプロイメント・ディスクリプタまたはリソース・アダプタのデプロイメント・ディスクリプタのres-auth
要素で指定された情報に基づいて、選択されたサインオン・メカニズムを判別します。この項では、Oracle WebLogic Serverのコンテナ管理のサインオンを使用して、Oracle JCAアダプタのユーザー名とパスワードを保護する手順について説明します。
Oracle WebLogic ServerとEISの両方で、独立したセキュリティ・レルムが保守されます。コンテナ管理のサインオンを使用すると、Oracle WebLogic Serverにサインオンできるのみでなく、EISに別途サインオンしなくてもリソース・アダプタを介してEISにアクセスするアプリケーションを使用できます。Oracle WebLogic Serverでは、コンテナ管理のサインオンに資格証明マッピングが使用されます。Oracle WebLogicセキュリティ・プリンシパル(認証済の個別ユーザーまたはクライアント・アプリケーション)の資格証明(ユーザー名/パスワードのペアまたはセキュリティ・トークン)が、EISへのアクセスに必要な対応する資格証明にマップされます。デプロイ済の任意のリソース・アダプタに適用可能なセキュリティ・プリンシパルについて、資格証明マッピングを構成できます。
資格証明マッピングを構成するには、対応するアダプタのweblogic-ra.xml
ファイルでユーザー名とパスワードを指定する方法と、Oracle WebLogic Server管理コンソールにアクセスして次の手順を実行する方法があります。
Oracle WebLogic Server管理コンソールにログインします。
「ドメイン構造」ペインで「デプロイメント」をクリックします。図4-10に示すように、デプロイ済のアプリケーションとアダプタが表示されます。
図4-10 Oracle WebLogic Server管理コンソール - 「デプロイメントの概要」ページ
セキュリティ資格証明を作成する必要のあるアダプタをクリックします。たとえば、FtpAdapter
をクリックします。図4-11に示すように、「FtpAdapterの設定」ページが表示されます。
図4-11 Oracle WebLogic Server管理コンソール - 「FtpAdapterの設定」ページ
「セキュリティ」タブをクリックします。図4-12に示すように、「FtpAdapterの設定」ページの「スタンドアロン・リソース・アダプタ・ロール」ペインが表示されます。
図4-12 Oracle WebLogic Server管理コンソール - 「FtpAdapterの設定」ページ
「資格証明マッピング」タブをクリックします。
「資格証明マッピング」ペインで「新規作成」をクリックします。図4-13に示すように、「新しいセキュリティ資格証明マッピングの作成」ページが表示されます。
図4-13 Oracle WebLogic Server管理コンソール - 「新しいセキュリティ資格証明マッピングの作成」ページ
図4-14に示すように、「eis/Ftp/FtpAdapter」(Oracle FTPアダプタのJNDI)を選択し、Oracle FTPアダプタのセキュリティ資格証明マップ・エントリを作成します。
図4-14 Oracle WebLogic Server管理コンソール - 「新しいセキュリティ資格証明マッピングの作成」ページ
「次へ」をクリックします。図4-15に示すように、「新しいセキュリティ資格証明マッピングの作成 - WebLogic Serverユーザー」ページが表示されます。
図4-15 Oracle WebLogic Server管理コンソール - 「新しいセキュリティ資格証明マッピングの作成」ページ
注意: 「初期接続作成用ユーザー」および「未認証WLSユーザー」オプションの場合、資格証明マッピングはサポートされていません。 |
図4-16に示すように、「構成済みユーザー名」を選択し、「WebLogic Serverユーザー名」フィールドにOracle WebLogic Serverユーザー名を入力します。たとえば、weblogic
と入力します。これはデフォルト・ユーザー名です。
図4-16 Oracle WebLogic Server管理コンソール - 「新しいセキュリティ資格証明マッピングの作成」ページ
「次へ」をクリックします。「新しいセキュリティ資格証明マッピングの作成 - EISユーザー名およびパスワード」ページが表示されます。
図4-17に示すように、「EISユーザー名」フィールドにEISユーザー名を入力し、「EISパスワード」フィールドにEISパスワードを入力し、「パスワードの確認」フィールドにEISパスワードを再入力してパスワードを確認します。
図4-17 Oracle WebLogic Server管理コンソール - 「新しいセキュリティ資格証明マッピングの作成」ページ
「終了」をクリックします。図4-18に示すように、新しいセキュリティ資格証明マッピングが作成されます。
図4-18 Oracle WebLogic Server管理コンソール - 「FtpAdapterの設定」ページ
次の各項では、Oracleファイル/FTPアダプタについて説明します。
インバウンド方向では、Oracleファイル・アダプタにより、ファイルシステムからのファイルのポーリングおよび読取りが行われて処理されます。この項では、Oracleファイル・アダプタのインバウンド・ファイル読取り機能の概要を説明します。BPELプロセスまたはメディエータでOracleファイル・アダプタを使用するように構成するには、アダプタ構成ウィザードを使用します。Oracleファイル・アダプタを構成すると、インバウンドのWSDL
およびJCA
ファイルのペアが作成されます。
次の各項では、Oracleファイル・アダプタのRead Fileの概念について説明します。
Oracleファイル・アダプタを使用したインバウンド操作では、図4-19に示すように「Read File」操作を選択します。
図4-20に示すアダプタ構成ウィザードの「ファイル・ディレクトリ」ページでは、インバウンド・ファイルの読取りに使用するディレクトリや、正常に処理されたファイルを配置するディレクトリの情報を指定できます。ディレクトリ内のファイルを再帰的に処理することも選択できます。さらに、複数のディレクトリも指定できます。
次の項では、指定するファイル・ディレクトリ情報について説明します。
Oracle BPEL PMとメディエータが関係するコンポジットでは、インバウンドのディレクトリ名を物理パスまたは論理パスとして指定できます。物理パスはc:\inputDir
のような値です。
注意: インバウンドのOracleファイル・アダプタが着信ファイルを複数のディレクトリでポーリングするように構成されている場合は、ファイル・リーダーがこれらのディレクトリのポーリングを開始する前に、すべての最上位ディレクトリ(入力ファイルが表示されるインバウンド・ディレクトリ)が存在している必要があります。 |
コンポジットでは、論理プロパティはインバウンドJCA
ファイルで指定され、その論理/物理マッピングはバインディング・プロパティを使用して解決されます。設計時に一度論理パラメータを指定し、必要に応じて後から物理ディレクトリ名を変更できます。
たとえば、論理入力ディレクトリ名がInputFileDir
の場合、生成されるインバウンドJCA
ファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?> <adapter-config name="FlatStructureIn" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" UIincludeWildcard="*.txt" adapterRef=""/> <endpoint-activation operation="Read"> <activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec"> <property name="UseHeaders" value="false"/> <property name="LogicalDirectory" value="InputFileDir"/> <property name="Recursive" value="true"/> <property name="DeleteFile" value="true"/> <property name="IncludeFiles" value=".*\.txt"/> <property name="PollingFrequency" value="10"/> <property name="MinimumAge" value="0"/> <property name="OpaqueSchema" value="false"/> </activation-spec> </endpoint-activation> </adapter-config>
composite.xml
ファイルで、対応する論理ActivationSpec
またはInteractionSpec
の物理パラメータ値(この場合はディレクトリ・パス)を指定します。これにより、論理ディレクトリ名と実際の物理ディレクトリ名のマッピングが解決されます。
<service name="FlatStructureIn"> <interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/file/FlatStructureIn/#wsdl. interface(Read_ptt)"/> <binding.jca config="FlatStructureIn_file.jca"> <property name=" InputFileDir" type="xs:string" many="false" source="" override="may"> /home/user/inputDir</property> </binding.jca> </service>
このオプションでは、正常に処理されたファイルを配置するディレクトリを指定できます。また、アーカイブ・ディレクトリを論理名として指定できます。この場合は、第4.3.1.2.1項「SOAコンポジットでのインバウンドの物理または論理ディレクトリ・パスの指定」で説明されている論理ディレクトリから物理ディレクトリへのマッピングを行う必要があります。
図4-21に示すアダプタ構成ウィザードの「ファイルのフィルタ処理」ページでは、取得または無視するファイルの詳細を指定できます。
Oracleファイル・アダプタは、インバウンド方向のファイル・リスナーとして機能します。Oracleファイル・アダプタにより、ローカルまたはリモートのファイルシステム上の指定したディレクトリがポーリングされ、指定したネーミング基準に一致するファイルが検索されます。
次の項では、指定するファイル・フィルタ処理情報について説明します。
Oracleファイル・アダプタがインバウンド・ファイルのポーリングに使用するネーミング規則を指定します。また、処理対象外にするファイルのネーミング規則も指定できます。2つのネーミング規則を選択できます。Oracleファイル・アダプタにより、インバウンド・ディレクトリに配置されるファイルが検索されます。
ファイル・ワイルドカード(po*.txt
)
po
で始まり.txt
で終わるすべてのファイルが取得されます。この規則はWindowsオペレーティング・システムの標準に準拠しています。
正規表現(po.*\.txt
)
po
で始まり.txt
で終わるすべてのファイルが取得されます。この規則は、Java Development Kit(JDK)の正規表現(regex)構文に準拠しています。
注意:
|
正規表現を使用する場合、「インクルード・ファイルの名前パターン」および「処理対象外ファイルの名前パターン」フィールドで指定する値は、JDKの正規表現(regex)構文に準拠している必要があります。どちらのフィールドにも、異なるregexパターンを別々に指定する必要があります。「インクルード・ファイルの名前パターン」フィールドおよび「処理対象外ファイルの名前パターン」フィールドは、インバウンドWSDL
ファイルのIncludeFiles
およびExcludeFiles
パラメータに対応します。
注意: regexパターンはJDK regexパターンに準拠しています。JDK regexパターンに準じると、任意の文字列が任意の回数発生するパターンの正しいコノテーションはピリオドとプラス記号です( |
インバウンドOracleファイル・アダプタで、po
で始まり、拡張子がtxt
であるすべてのファイル名を取得するには、名前パターンが正規表現である場合は、「インクルード・ファイルの名前パターン」フィールドでpo.*\.txt
として指定する必要があります。次にこのregexパターンの例で使用された記号の意味を示します。
ピリオド(.
)は任意の文字を表します。
アスタリスク(*
)は任意の発生数を表します。
ピリオドが続くバックスラッシュ(\.)は、エスケープ文字のバックスラッシュで示されているように、文字としてのピリオド(.)を表します。
「処理対象外ファイルの名前パターン」フィールドも同様に構成します。
「インクルード・ファイルの名前パターン」フィールドと「処理対象外ファイルの名前パターン」フィールドの式に重複がある場合、処理対象外ファイルの式が優先されます。たとえば、「インクルード・ファイルの名前パターン」がabc*.txt
に設定され、「処理対象外ファイルの名前パターン」がabcd*.txt
に設定されている場合、abcd*.txt
ファイルは受信されません。
注意: 「インクルード・ファイルの名前パターン」フィールドには名前パターンを入力する必要があり、空白のままにすることはできません。入力しなかった場合、インバウンド・アダプタ・サービスはインバウンド・ディレクトリ内に存在するすべてのファイルを読み取り、不正な結果を招きます。 |
表4-3にJava regex構文の詳細を示します。
注意: JDK regexのパターン名を、プラス記号( |
一致対象 | 構文 |
---|---|
文字 |
- |
文字 |
|
バックスラッシュ文字 |
|
8進数値 |
|
8進数値 |
|
8進数値 |
|
16進数値 |
|
16進数値 |
|
タブ文字 |
|
改行文字 |
|
キャリッジ・リターン文字 |
|
用紙送り文字 |
|
警告(ベル)文字 |
|
エスケープ文字 |
|
|
|
- |
- |
文字クラス |
- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
- |
定義済の文字クラス |
- |
任意の文字(行の終了文字と一致する場合もある) |
- |
数字: |
|
数字以外: |
|
空白文字: |
|
空白文字以外: |
|
単語文字: |
|
単語以外の文字: |
|
最長一致数量子 |
- |
|
|
|
|
|
|
|
|
|
|
|
|
Java regex構文の詳細は、次のサイトを参照してください。
FileList操作ではjava.file.IncludeFilesプロパティは公開されません。このプロパティは、次の例のようにアダプタ相互作用の設計中に構成され、ヘッダーを通じてオーバーライドすることはできません。
<adapter-config name="ListFiles" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" UIincludeWildcard="*.txt" adapterRef=""/> <endpoint-interaction portType="FileListing_ptt" operation="FileListing"> <interaction-spec className="oracle.tip.adapter.file.outbound.FileListInteractionSpec"> <property name="PhysicalDirectory" value="%INP_DIR%"/> <property name="PhysicalDirectory" value="%INP_DIR%"/><property name="Recursive" value="true"/>
<property name="Recursive" value="true"/>
<property name="IncludeFiles" value=".*\.txt"/>
</interaction-spec>
</endpoint-interaction>
</adapter-config>
この例では、いったん設定されたIncludeFilesは変更できません。
図4-22に示すアダプタ構成ウィザードの「ファイル・ポーリング」ページでは、次に示すインバウンド・ポーリング・パラメータを指定できます。
新しいファイルを取得するためにインバウンド・ディレクトリをポーリングする頻度。
取得するファイルの最短経過時間。たとえば、このポーリング・パラメータにより、大きなファイルが処理用に取得される前に、ディレクトリに完全にコピーできるようになります。経過時間は最終更新時のタイムスタンプで決定されます。たとえば、ファイルの書込みに3分から4分かかることがわかっている場合は、最短経過時間を5分に設定します。入力ディレクトリでファイルが検出されても、更新時間から5分経過していない場合、まだ書込みが行われている可能性があるためファイルは取得されません。
注意:
|
トリガー・ファイルの使用
デフォルトでは、エンドポイントがアクティブ化されると、インバウンドのOracleファイル/FTPアダプタによるポーリングが開始されます。ただし、より厳密にポーリングを制御する場合は、ファイルベースのトリガーを使用できます。Oracleファイル/FTPアダプタでは、指定のトリガー・ファイルがローカル・ディレクトリまたはリモート・ディレクトリで検出されると、そのファイルのポーリングがインバウンド・ディレクトリ内で開始されます。
たとえば、あるBPELプロセスがファイルをディレクトリに書き込んでおり、第2のBPELプロセスが同じディレクトリでファイルをポーリングしているとします。第1のプロセスによる全ファイルの書込みが完了した後でのみ、第2のプロセスによるディレクトリのポーリングを開始するために、トリガー・ファイルを使用できます。第1のプロセスを、最後にトリガー・ファイルを作成するように構成できます。第2のプロセスは、トリガー・ファイルを検出した後でインバウンド・ディレクトリのポーリングを開始します。
トリガー・ファイル・ディレクトリは、インバウンドのポーリング・ディレクトリと同一でなくてもかまいません。ただし、トリガー・ファイル・ディレクトリおよびインバウンドのポーリング・ディレクトリが同じ場合は、図4-21に示すように、トリガー・ファイルの名前がアダプタ構成ページで指定したファイル・フィルタに類似していないことを確認する必要があります。
トリガー・ファイルの内容が読み取られることはないため、インバウンドのreceiveアクティビティのペイロードとして使用しないでください。
表4-4に、インバウンド・サービスのJCAファイルに指定する必要があるパラメータを示します。
表4-4 トリガー・ファイルのパラメータ
パラメータ | 説明 | 例 |
---|---|---|
または
|
Oracleファイル/FTPアダプタがトリガー・ファイルを検索するディレクトリの物理名または論理名。
|
|
|
トリガー・ファイル名。 |
|
|
トリガー・メカニズムとして使用される計画。次の値をとります。 EndpointActivation: アダプタは、コンポジットがアクティブ化されるたびにトリガー・ファイルを検索します。注意: コンテナの起動、アプリケーションの再デプロイ、Oracle Enterprise Managerによるコンポジット・アプリケーションのリタイアまたはアクティブ化を行うたびに、コンポジットがアクティブ化されます。 コンテナを再起動するたびに、指定されたディレクトリでトリガー・ファイルが検出されるまでコンポジット・アプリケーションはトリガーされません。 OnceOnly: アダプタは、その存続期間で1回のみトリガー・ファイルを検索します。検出されたトリガー・ファイルは、再起動後および再デプロイ後も記憶されます。 EveryTime: アダプタは、各ポーリング・サイクルでトリガー・ファイルを検索します。 |
|
インバウンド・サービスにおけるJCAファイルのサンプルを次に示します。
<?xml version="1.0" encoding="UTF-8"?> <adapter-config name="FlatStructureIn" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" UIincludeWildcard="*.txt" adapterRef=""/> <endpoint-activation operation="Read"> <activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec"> <property.../> <property name="TriggerFilePhysicalDirectory" value="/tmp/flat/ArchiveDir"/> </activation-spec> </endpoint-activation> </adapter-config>
Oracleファイル・アダプタではいくつかの後処理オプションをサポートしています。ファイルの処理後、図4-22の「ファイル・ポーリング」ページで指定した場合はファイルが削除されます。また、図4-20の「ファイル・ディレクトリ」ページで指定した場合は、完了(アーカイブ)ディレクトリにファイルを移動することもできます。
次に表示されるアダプタ構成ウィザードのページは、図4-23の「メッセージ」ページです。このページでは、変換用のXSDスキーマ・ファイルを選択できます。
ネイティブ・フォーマット変換が不要である場合は(JPGまたはGIFイメージが処理中であるなど)、「ネイティブ・フォーマット変換は不要」チェック・ボックスを選択します。ファイルはBase64エンコーディングで渡されます。
トランスレーションにはXSDファイルが必要です。新しいスキーマの定義、または既存のデータ型定義(DTD)やCOBOLコピーブックの変換を行うには、「ネイティブ・フォーマットのスキーマの定義」を選択します。これにより、ネイティブ・フォーマット・ビルダー・ウィザードが起動されます。このウィザードは、カンマ区切り値(CSV)、固定長、DTDおよびCOBOLコピーブックなどのファイル形式を使用したネイティブ・スキーマ・ファイルの作成を支援します。ネイティブ・スキーマ・ファイルの作成後、「スキーマ・ファイルのURL」および「スキーマ要素」フィールドが入力された「メッセージ」ページが表示されます。詳細は、第6.1.1項「サポートされているファイル形式」を参照してください。
Oracleファイル・アダプタの構成が終了すると、インバウンド・サービスのJCA
ファイルが生成されます。ファイル名は、アダプタ構成ウィザードの「サービス名」ページで指定したサービス名と同じです。後からウィザードを再起動して、操作定義を変更できます。
ActivationSpec
パラメータには、インバウンド構成情報が含まれています。ActivationSpec
と一連のインバウンドOracleファイル・アダプタ・プロパティは、インバウンドJCA
ファイルの一部です。
表4-5に、インバウンドJCAファイルのサンプルのプロパティを示します。
表4-5 インバウンド・サービスのサンプルのJCAプロパティ
プロパティ | サンプル値 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ActivationSpec
プロパティの値は、設計時にアダプタ構成ウィザードで指定されます(表4-5を参照)。インバウンドOracleファイル・アダプタでは、次の構成プロパティが使用されます。
PollingFrequency
MinimumAge
PhysicalDirectory
LogicalDirectory
PublishSize
PhysicalArchiveDirectory
LogicalArchiveDirectory
IncludeFiles
ExcludeFiles
UseHeaders
ListSorter
ThreadCount
Recursive
MaxRaiseSize
これらの構成プロパティの説明は、このマニュアルの付録Aを参照してください。
図4-24に示すように、ペイロードを除いて、Oracleファイル・アダプタは次のヘッダー・メタデータをインバウンド・サービスからパブリッシュします。
jca.file.FileName
: ファイル名
jca.file.Directory
: ディレクトリ名
jca.file.Batch
: デバッチ処理におけるバッチの一意の名前
jca.file.BatchIndex
: デバッチ処理におけるバッチ内の各メッセージのバッチ索引
jca.file.Size
: ファイル・サイズ
jca.file.LastModifiedTime
: ファイルの最終変更時間
アウトバウンド方向では、Oracleファイル・アダプタはサービス・エンジンからのメッセージを受信し、ファイルシステムのファイルに書き込みます。この項では、Oracleファイル・アダプタのアウトバウンド・ファイル書込み機能の概要を説明します。BPELプロセスまたはメディエータ・サービスでOracleファイル・アダプタを使用するように構成するには、アダプタ構成ウィザードを使用します。これにより、アウトバウンドのWSDL
とJCA
のファイルのペアが作成されます。
この項には、次の項目が含まれます。
Oracleファイル・アダプタを使用したアウトバウンド操作では、図4-25に示すように「Write File」操作を選択します。
「出力ヘッダーの追加」チェック・ボックスは、「Write File」を選択した場合に表示されます。このチェック・ボックスを選択すると、アダプタWSDLに、ヘッダー・スキーマをポイントする出力メッセージが含められます(次の太字部分)。
<wsdl:definitions name="fileout3" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/SOAApp1/NewJCAFmwk/ fileout3"xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:FILEAPP="http://xmlns.oracle.com/pcbpel/adapter/file/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/file/SOAApp1/NewJCAFmwk/ fileout3" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">"xmlns:opaque="http://xmlns.oracle.com/pcbpel/adapter/opaque/"
<plt:role name="Write_role" >
<plt:portType name="tns:Write_ptt" />
</plt:role>
</plt:partnerLinkType>"
<wsdl:types>
<schema TargetNamespace="http://xlmns.oracle.com/pcbpel/adapter/opaque/" xmlns:opaque="http://xmlns.oracle.com/pcbpel/adapter/opaque/" xmlns="http://www.w3.org/2001/XMLSchema" > <element name="opaqueElement" type="base64Binary" /> </schema> <schema targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/" xmlns="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" <element name="OutboundFileHeaderType" > <complexType> <sequence> <element name="filename" type="string" /> <element name="directory" type="string" /> </sequence> </complexType> </element> </schema></wsdl:types>
<wsdl:message name="Write_msg">
<wsdl:part name="opaque" element="opaque:opaqueElement"/>
</wsdl:message>
<wsdl:message name="Output_msg"> <wsdl:part name="body" element="FILEAPP:OutboundFileHeaderType"/> </wsdl:message><wsdl:portType name="Write_ptt">
<wsdl:operation name="Write">
<wsdl:input message="tns:Write_msg"/>
<wsdl:output message="tns:Output_msg"/></wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
編集モードで出力ヘッダーの更新チェック・ボックスを選択すると、出力メッセージ/ヘッダー・スキーマがアダプタWSDLから削除されます。
アウトバウンド操作では、アウトバウンド・ディレクトリ、使用するアウトバウンド・ファイル・ネーミング規則、および必要な場合は使用するバッチ・ファイル規則も指定できます。
図4-26に示すアダプタ構成ウィザードの「ファイル構成」ページでは、発信ファイルのディレクトリやアウトバウンド・ファイル・ネーミング規則を指定できます。
次の項では、指定するファイル構成情報について説明します。
アウトバウンド・ディレクトリ名を物理または論理パスとして指定できます。物理パスはc:\outputDir
のような値です。
論理アウトバウンド・ディレクトリ名がOutputFileDir
の場合、論理パラメータを指定すると、生成されるJCA
ファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?> <adapter-config name="FlatStructureOut" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" adapterRef=""/> <endpoint-interaction operation="Write"> <interaction-spec className="oracle.tip.adapter.file.outbound.FileInteractionSpec"> <property name="LogicalDirectory" value="OutputFileDir"/> <property name="FileNamingConvention" value="%yyMMddHHmmssSS%_%SEQ%_ %yyyyMMdd%_%SEQ%.out.%SEQ%"/> <property name="Append" value="false"/> <property name="NumberMessages" value="1"/> <property name="OpaqueSchema" value="false"/> </interaction-spec> </endpoint-interaction> </adapter-config>
JDeveloperウィザードの「外部参照」スイムレーンでアウトバウンド・アダプタを選択します(composite.xmlのタブに表示されます)。アウトバウンド・アダプタの「プロパティ・インスペクタ」でバインディング・プロパティを作成します(下方向にスクロールして表示する必要があります)。「プロパティの作成」ボックスが表示されてから、「名前」フィールドにOutputFileDir
と入力し、「値」フィールドに実際の出力ディレクトリ名(例: C:\outputDir
)を入力します。composite.xmlファイルは次のようになります。
<reference name="FlatStructureOut"> <interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/file/FlatStructureOut/#wsdl. interface(Write_ptt)"/> <binding.jca config="FlatStructureOut_file.jca"> <property name="OutputFileDir" type="xs:string" many="false" override="may">C:\outputDir</property> </binding.jca> </reference>
メディエータでは、アウトバウンド・ディレクトリ名を物理または論理パスとして指定できます。物理パスはc:\inputDir
のような値です。
図4-20に示すように、「ファイル・ディレクトリ」ページで設計時に論理名を指定し、「エンドポイント・プロパティ」で論理/物理マッピングを指定できます。たとえば、WriteFile
はアウトバウンド・アダプタ・サービスです。設計時には、論理ディレクトリ名としてOutDir
を指定しています。
アウトバウンド操作の場合は、動的なアウトバウンド・ディレクトリ名を指定できます。変数を設定すると、動的なアウトバウンド・ディレクトリ名を指定できます。
<?xml version="1.0" encoding="UTF-8"?> <adapter-config name="ReadAddressChunk" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" adapterRef=""/> <endpoint-interaction operation="ChunkedRead"> <interaction-spec className="oracle.tip.adapter.file.outbound.ChunkedInteractionSpec"> <property name="PhysicalDirectory" value="C:\foo"/> <property name="FileName" value="dummy.txt"/> <property name="ChunkSize" value="1"/> </interaction-spec> </endpoint-interaction> </adapter-config>
この例では、JCA
ファイルで物理ディレクトリが"C:\foo"
に設定されていますが、実行時、このディレクトリ名は割り当てられた値に動的に変更されます。この例では、物理ディレクトリは動的に"C:\out"
に変更されます。動的なアウトバウンド・ディレクトリ名を指定するには、次の手順を実行します。
invokeアクティビティをダブルクリックします。
「変数の参照」アイコンをクリックします。
「変数チューザ」ダイアログで「オブジェクトの作成」アイコンをクリックします。
図4-27に示すように、タイプがxsd:string
の変数MyDir
を作成します。
「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックし、「コピー操作」タブをクリックします。
「作成」と「コピー操作」を順番にクリックします。「コピー操作の作成」ダイアログが表示されます。
図4-28に示すように、「コピー操作の作成」ダイアログで「タイプ」から「式」を選択してディレクトリ名とパスを指定します。このディレクトリに出力ファイルが書き込まれます。
「コピー操作の作成」ダイアログで「OK」をクリックし、「Assign」ダイアログで「OK」をクリックします。「.bpel
」ページが表示されます。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「プロパティ」タブをクリックします。
「プロパティ」列からjca.file.Directory
プロパティを選択し、「値」をMyDir
(ステップ4で作成したディレクトリ)に設定します。図4-29に示すように、「タイプ」列がinput
に設定されていることを確認してください。
注意: 動的ディレクトリを使用する場合は、 |
発信ファイルに使用するネーミング規則を指定します。po.txt
などの完全に静的な名前は入力できません。これは発信ファイル名の一意性を保つためで、ファイルが意図せず上書きされるのを防ぎます。そのかわり、発信ファイル名は静的部分と動的部分で構成されている必要があります。
図4-26に示したファイルの例では、接頭辞と接尾辞の部分は静的です(例: po_
および.xml
)。名前の%SEQ%
変数は動的部分で、順序番号やタイムスタンプ(タイムスタンプのファイルを作成する場合の変数はpo_%yyMMddHHmmss%.xml
)になります。
発信ファイルのネーミング規則として、po_
で始まり順序番号と拡張子txt
が続く名前を選択する場合には、po_%SEQ%.txt
と指定する必要があります。
発信ファイルのネーミング規則として、po_
で始まりyyyy.MM.dd
というパターンのタイムスタンプと拡張子txt
が続く名前を選択する場合には、po_%yyyy.MM.dd%.txt
と指定する必要があります。たとえば、発信ファイル名はpo_2004.11.29.txt
になります。
さらに、ファイル・ネーミング規則を組み合せることもできます。たとえば、po_%SEQ%_%yyyy.MM.dd%_%SEQ%.txt
のようにファイル・ネーミング規則を指定できます。
注意: タイムスタンプ・パターンの使用時に、後続のコールで同じタイムスタンプが生成されてメッセージが失われることがあります。その解決策は、タイムスタンプ・パターンを順序パターンと組み合せることです。または、ミリ秒に最も近いタイムスタンプ・パターンを使用することもできます。その場合、アダプタはファイル名の一意性に対処します。 |
アウトバウンドの同期的読取りには正規表現を使用できません。そのような場合には、正確なファイル名がわかっている必要があります。
タイムスタンプは日付と時間のパターンの文字列で指定します。日付と時間のパターン文字列では、引用符で囲まれていないA
からZ
およびa
からz
の文字は、日付または時間の文字列のコンポーネントを表すパターン文字と認識されます。テキストは、解釈されないように一重引用符('
)で囲むことができます。文字''
は一重引用符を表します。その他すべての文字は解釈されません。
表4-6にJavaのパターン文字の定義を示します。
表4-6 Javaのパターン文字
文字 | 日付または時間コンポーネント | 表示内容 | 例 |
---|---|---|---|
|
紀元 |
テキスト |
|
|
年 |
年 |
|
|
年における月 |
月 |
|
|
年における週 |
数値 |
|
|
月における週 |
数値 |
|
|
年における日 |
数値 |
|
|
月における日 |
数値 |
|
|
月における曜日 |
数値 |
|
|
週における日 |
テキスト |
|
|
午前/午後 |
テキスト |
|
|
1日における時間(0-23) |
数値 |
|
|
1日における時間(1-24) |
数値 |
|
|
午前/午後における時間(0-11) |
数値 |
|
|
午前/午後における時間(1-12) |
数値 |
|
|
1時間における分 |
数値 |
|
|
1分における秒 |
数値 |
|
|
ミリ秒 |
数値 |
|
|
タイムゾーン |
一般的なタイムゾーン |
|
|
タイムゾーン |
RFC 822タイムゾーン |
|
次にパターンの異なる表示内容を示します。
テキスト
書式設定において、パターン文字が4文字以上の場合は、完全な表記が使用されます。それ以外の場合、可能であれば、省略表記が使用されます。解析では、パターン文字の数にかかわらず、どちらの表記も使用できます。
数値
書式設定において、パターン文字の数は最小桁数になり、これに満たない場合は最小桁数まで0が表示されます。解析において、2つの隣接したフィールドを区別する必要がない場合、パターン文字の数は無視されます。
年
書式設定において、パターン文字が2文字の場合は、年は2桁に切り捨てられます。それ以外の場合は数値として解釈されます。
解析において、パターン文字が3文字以上の場合は、桁数にかかわらず、年は文字どおりに解釈されます。パターンMM/dd/yyyy
を使用すると、01/11/12
はJan 11, 12 A.D.
と解析されます。
年のパターンが省略されている(y
またはyy
)解析において、省略された年は複数の世紀に対して解釈されます。日付は、時間インスタンス作成の80年前から20年後までの間の日付に調整されます。たとえば、パターンMM/dd/yy
を使用してJan 1, 1997
を作成した場合、文字列05/04/64
がMay 4, 1964
と解釈される一方で、文字列01/11/12
はJan 11, 2012
と解釈されます。解析中、数字が2つ含まれる文字列のみがデフォルトの世紀に解析されます。1桁の文字列、3桁以上の文字列またはすべてが数字ではない2桁の文字列(たとえば-1
)など、それ以外の数値文字列は文字どおりに解釈されます。そのため、01/02/3
または01/02/003
は、同じパターンを使用してJan 2, 3 AD
と解析されます。また、01/02/-3
はJan 2, 4 BC
と解析されます。
月
パターン文字が3
桁以上の場合、月はテキストとして解釈されます。それ以外の場合は数値として解釈されます。
一般的なタイムゾーン
タイムゾーンに名前がある場合はテキストとして解釈されます。GMT
オフセット値を表すタイムゾーンの場合、次の構文が使用されます。
GMTOffsetTimeZone:
GMT
Sign Hours:
Minutes
Sign: one of
+ -
Hours:
Digit
Digit Digit
Minutes:
Digit Digit
Digit: one of
0 1 2 3 4 5 6 7 8 9
Hours
は0
から23
の間で、Minutes
は00
から59
の間です。書式設定はロケールに依存せず、数字はUnicode標準のBasic Latinブロックから取得する必要があります。
解析では、RFC 822タイムゾーンも使用できます。
書式設定では、RFC 822の4桁のタイムゾーンが使用されます。
RFC822TimeZone:
Sign TwoDigitHours Minutes
TwoDigitHours:
Digit Digit
TwoDigitHours
は00
から23
の間である必要があります。その他の定義は、一般的なタイムゾーンと同じです。
解析では、一般的なタイムゾーンも使用できます。
アウトバウンド操作の場合は、動的なアウトバウンド・ファイル名を指定できます。変数を設定すると、動的なアウトバウンド・ファイル名を指定できます。
<?xml version="1.0" encoding="UTF-8"?> <adapter-config name="ReadAddressChunk" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" adapterRef=""/> <endpoint-interaction operation="ChunkedRead"> <interaction-spec className="oracle.tip.adapter.file.outbound.ChunkedInteractionSpec"> <property name="PhysicalDirectory" value="C:\foo"/> <property name="FileName" value="dummy.txt"/> <property name="ChunkSize" value="1"/> </interaction-spec> </endpoint-interaction> </adapter-config>
この例では、JCAファイルで物理ディレクトリが"C:\foo"
に設定されていますが、実行時、このディレクトリ名は割り当てられた値に動的に変更されます。この例では、物理ディレクトリは動的に"C:\out"
に変更されます。動的なアウトバウンド・ディレクトリ名を指定するには、次の手順を実行します。
invokeアクティビティをダブルクリックします。
「変数の参照」アイコンをクリックします。
「変数チューザ」ダイアログで「オブジェクトの作成」アイコンをクリックします。
図4-27に示すように、タイプがxsd:string
の変数file
を作成します。
「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックし、「コピー操作」タブをクリックします。
「作成」と「コピー操作」を順番にクリックします。「コピー操作の作成」ダイアログが表示されます。
図4-28に示すように、「コピー操作の作成」ダイアログで「タイプ」から「式」を選択してファイル名を指定します。このファイルに出力ファイルが書き込まれます。
「OK」を数回クリックしてassignアクティビティのダイアログを終了します。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「プロパティ」タブをクリックします。
「プロパティ」列からjca.file.FileName
プロパティを選択し、「値」をfile
(ステップ4で作成したファイル)に設定します。図4-30に示すように、「タイプ」列がinput
に設定されていることを確認してください。
注意: 動的ファイルを使用する場合は、 |
最も簡単なシナリオの場合、1つのメッセージに1つのファイルの書込みを指定します。また、バッチ・ファイル書込みに関するアウトバウンドの規則も指定できます。これにより、1つのバッチ・ファイルでパブリッシュするメッセージ数を指定できます。次に示すバッチ・ファイルの設定は、図4-26の「ファイル構成」ページで指定されています。
メッセージ数の到達
到達した際に新しい発信ファイルを作成する値を指定します。
経過時間の超過
超過した際に新しい発信ファイルを作成する値を指定します。
注意: 「経過時間の超過」バッチ処理基準が評価されて新しい発信ファイルが作成されるのは、起動の発生時のみです。 |
たとえば、「経過時間の超過」を15秒に指定した場合、最初に受信したメッセージは、バッチ処理条件が有効でないため15秒が経過しても書き込まれません。第2のメッセージを受信すると、第1のメッセージに対してバッチ処理条件が有効になり、経過時間が15秒を超過した時点で出力ファイルが作成されます。
ファイル・サイズの超過
到達した際に発信ファイルを作成するファイル・サイズを指定します。たとえば、受信したメッセージ数に3
を、ファイル・サイズに1MBという値を指定したとします。合計すると1MB以上になる2つのメッセージや、1MBに満たない3つのメッセージを受信した場合に、出力ファイルが作成されます。
注意:
|
バッチ処理中にOracleファイル・アダプタになんらかの問題が発生した場合、リカバリでは中断した場所からバッチ処理が開始されます。
次に表示されるアダプタ構成ウィザードのページは、図4-31の「メッセージ」ページです。このページでは、変換用のXSDスキーマ・ファイルを選択できます。
インバウンド方向のスキーマの指定と同様に、このページでは次のタスクを実行できます。
ネイティブ・フォーマット変換の要不要の指定
変換用のXSDスキーマ・ファイルの選択
CSV、固定長、DTDおよびCOBOLコピーブックなどのファイル形式からXSDファイルの作成が可能なネイティブ・フォーマット・ビルダー・ウィザードの起動
「メッセージ」ページの詳細は、第4.3.1.6項「ネイティブ・データ変換」を参照してください。
アダプタ構成ウィザードを使用したOracleファイル・アダプタの構成が完了すると、アウトバウンド操作用のWSDL
とJCA
のファイルのペアが生成されます。ファイルには、図2-8「アプリケーション・プロファイルのデプロイメント」に示したアダプタ構成ウィザードの「サービス名」ページで指定したサービス名に基づいて名前が付けられます。後からウィザードを再起動して、操作定義を変更できます。
サンプルのアウトバウンドJCA
ファイルには、表4-7に記載されている情報が格納されます。
表4-7 アウトバウンド・サービスのサンプルのJCAプロパティ
プロパティ | サンプル値 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
アウトバウンドOracleファイル・アダプタでは、次の構成パラメータが使用されます。
PhysicalDirectory
LogicalDirectory
NumberMessages
ElapsedTime
FileSize
FileNamingConvention
Append
これらの構成プロパティの説明は、このマニュアルの付録Aを参照してください。
アウトバウンド方向では、Oracleファイル・アダプタはファイルの現在のコンテンツをポーリングして読み取ります。この項では、Oracleファイル・アダプタのアウトバウンドの同期ファイル読取り機能の概要について説明します。ファイルを同期的に読み取るには、図4-32に示すように「同期Read File」操作を選択します。
アダプタ構成ウィザードの各ページは「Read File」操作の場合と同様ですが、「ファイル名」ページは異なります。図4-33に示すように、「ファイル名」フィールドでは読み取るファイルの名前を指定できます。
Oracleファイル・アダプタのこの機能では、BPELアクティビティを使用してターゲット・ディレクトリからファイルのリストを取得します。このファイルのリストはXML文書として返され、ファイル名、ディレクトリ名、ファイル・サイズ、最終変更時間などの情報が記載されています。この項では、Oracleファイル・アダプタのファイル・リスティング機能の概要について説明します。BPELプロセスまたはメディエータ・サービスでOracleファイル・アダプタを使用するように構成するには、アダプタ構成ウィザードを使用します。これにより、アウトバウンドのWSDL
とJCA
のファイルのペアが作成されます。
注意: 標準Java APIには作成時間を取得するためのメカニズムがないため、ファイル作成時間プロパティ 例: <creationTime xmlns="http://xmlns.oracle.com/pcbpel/adapter/file/FAListFiles/FAListFilesTest/ReadS/">0</creationTime> |
この項には、次の項目が含まれます。
ファイルのリストを表示するには、図4-34に示すように「List Files」操作を選択する必要があります。
図4-35に示すアダプタ構成ウィザードの「ファイル・ディレクトリ」ページでは、リスト表示操作のファイル名の読取りに使用するディレクトリの情報を指定できます。ディレクトリ内のファイルを再帰的にリスト表示することもできます。
次の項では、指定するファイル・ディレクトリ情報について説明します。
Oracle BPEL PMとメディエータが関係するコンポジットでは、ディレクトリ名を物理パスまたは論理パスとして指定できます。物理パスはC:\inputDir
のような値です。
コンポジットでは、論理プロパティはJCA
ファイルで指定され、その論理/物理マッピングはバインディング・プロパティを使用して解決されます。設計時に論理ディレクトリを指定し、必要に応じて後からディレクトリ名を変更できます。
たとえば、論理入力ディレクトリ名がC:\inputDir
の場合、生成されるJCA
ファイルは次のようになります。
<adapter-config name="ListFiles" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" UIincludeWildcard="*.txt" adapterRef=""/> <endpoint-interaction portType="FileListing_ptt" operation="FileListing"> <interaction-spec className="oracle.tip.adapter.file.outbound.FileListInteractionSpec"> <property name="PhysicalDirectory" value="C:\inputDir"/> <property name="Recursive" value="true"/> <property name="IncludeFiles" value=".*\.txt"/> </interaction-spec> </endpoint-interaction> </adapter-config>
図4-36に示すアダプタ構成ウィザードの「ファイルのフィルタ処理」ページでは、取得または無視するファイルの詳細を指定できます。
Oracleファイル・アダプタはファイル・リスナーとして機能し、ローカルまたはリモートのファイルシステムの指定されたディレクトリをポーリングして、指定されたネーミング基準に一致するファイルを検索します。
次の項では、指定するファイル・フィルタ処理情報について説明します。
Oracleファイル・アダプタがインバウンド・ファイルのポーリングに使用するネーミング規則を指定します。また、処理対象外にするファイルのネーミング規則も指定できます。2つのネーミング規則を選択できます。Oracleファイル・アダプタにより、インバウンド・ディレクトリに配置されるファイルが検索されます。
ファイル・ワイルドカード(po*.txt
)
po
で始まり.txt
で終わるすべてのファイルが取得されます。この規則はオペレーティング・システムの標準に準拠しています。
正規表現(po.*\.txt
)
po
で始まり.txt
で終わるすべてのファイルが取得されます。この規則は、Java Development Kit(JDK)の正規表現(regex)構文に準拠しています。
注意:
|
正規表現を使用する場合、「インクルード・ファイルの名前パターン」および「処理対象外ファイルの名前パターン」フィールドで指定する値は、JDKの正規表現(regex)構文に準拠している必要があります。どちらのフィールドにも、異なるregexパターンを別々に指定する必要があります。「インクルード・ファイルの名前パターン」フィールドおよび「処理対象外ファイルの名前パターン」フィールドは、インバウンドWSDL
ファイルのIncludeFiles
およびExcludeFiles
パラメータに対応します。
注意: regexパターンはJDK regexパターンに準拠しています。JDK regexパターンに準じると、任意の文字列が任意の回数発生するパターンの正しいコノテーションはピリオドとプラス記号です( |
インバウンドOracleファイル・アダプタで、po
で始まり、拡張子がtxt
であるすべてのファイル名を取得するには、名前パターンが正規表現である場合は、「インクルード・ファイルの名前パターン」フィールドでpo.*\.txt
として指定する必要があります。次にこのregexパターンの例で使用された記号の意味を示します。
ピリオド(.
)は任意の文字を表します。
アスタリスク(*
)は任意の発生数を表します。
ピリオドが続くバックスラッシュ(\.)は、エスケープ文字のバックスラッシュで示されているように、文字としてのピリオド(.)を表します。
「処理対象外ファイルの名前パターン」フィールドも同様に構成します。
「インクルード・ファイルの名前パターン」フィールドと「処理対象外ファイルの名前パターン」フィールドの式に重複がある場合、処理対象外ファイルの式が優先されます。たとえば、「インクルード・ファイルの名前パターン」がabc*.txt
に設定され、「処理対象外ファイルの名前パターン」がabcd*.txt
に設定されている場合、接頭辞abcd*.txt
が付いたファイルはすべて受信されます。
注意: JDK regexのパターン名を、プラス記号( |
Java regex構文の詳細は、次のサイトを参照してください。
http://java.sun.com/j2se/1.5.0/docs/api
注意: ファイルは読み取られないため、ネイティブ・データ変換は行われません。 |
インバウンド方向では、Oracle FTPアダプタはOracleファイル・アダプタのRead File操作と同様に機能し、処理のためにファイルシステムのファイルをポーリングして取得します。主な違いは、Oracle FTPアダプタがリモートでのファイル交換に使用されることです。FTPアダプタをリモートでのファイル交換用に構成するために、図4-37に示すように、アダプタ構成ウィザードでは後で使用するFTPサーバーへの接続情報が求められます。
デフォルトのアダプタ・インスタンスのJNDI名はeis/Ftp/FtpAdapter
です。または、カスタム名を使用します。実行時にこの名前でFTPサーバーに接続されます。
ログイン後、Get File(読取り)操作と配信するファイル・タイプを選択します。図4-38にこの選択内容を示します。
デプロイメント・ディスクリプタのserverType
プロパティは、データ転送時に行セパレータを判別するために使用されます。 プロパティ値としてunix
、win
またはmac
を指定できます。これらの値は、FTPサーバーが稼働しているオペレーティング・システムを表します。デフォルトでは、serverTypeプロパティの値はunix
です。
値mac
を指定すると、行セパレータとして\r
が使用されます。unix
を指定すると\n
が使用され、win
を指定すると\r\n
が使用されます。アウトバウンド操作時に行セパレータを書き込むために、NXSDトランスレータ・コンポーネントによってこのプロパティが使用されることに注意してください。
これ以降のGet File操作のアダプタ構成ウィザードのページは、ファイルのRead File操作のページと同じです。表4-8は、表示されるページと各機能の説明が記載されている項を示しています。
表4-8 Get File操作のアダプタ構成ウィザードのページ
ページ | 参照先 |
---|---|
ファイル・ディレクトリ(図4-20) |
第4.3.1.2項「インバウンド・ファイル・ディレクトリの指定」 |
ファイルのフィルタ処理(図4-21) |
|
ファイル・ポーリング(図4-22) |
|
メッセージ(図4-23) |
第4.3.1.6項「ネイティブ・データ・トランスレーション」 |
上級ユーザーは、その他のアダプタ構成ウィザードのページを使用することもできます。それが図4-39のページで、図4-22の「ファイル・ポーリング」ページで次のいずれかまたは両方の選択を行った後にのみ表示されます。
「正常な取得後にファイルを削除」チェック・ボックスの選択を解除
「ファイルの最小経過時間」フィールドの値を0より大きな値に設定
このページでは、リモートFTPサーバー上のファイルの変更時間を取得する方法を指定できます。
注意: Oracle FTPアダプタでは、タイムスタンプのリスト表示と取得に
これらのカテゴリに該当しない場合、この注意事項は適用されません。 |
ファイルシステム
このオプションを使用すると、ファイルシステムのリスト・コマンドを使用してファイルの変更時間を日付/時間の書式で取得できます。ただし、このオプションはあまり使用されず、サポートしていないFTPサーバーもあります。使用しているサーバーでファイルシステムのリスト・コマンドがサポートされているかどうか、どのコマンドライン構文を使用するか、およびどのように出力を解析するかは、FTPサーバーのドキュメントを参照してください。
たとえば、ファイルシステムのリスト・コマンドquote mdtm
filename
がサポートされており、次の情報が返ってきたとします。
213 20050602102633
開始索引、終了索引およびファイル変更時間の日付/時間の書式をカンマ区切りの単一の値(4,18,yyyyMMddHHmmssなど)として日付書式/時間書式フィールドに指定します。
ここで
4はファイル変更時間の開始索引です。
18はファイル変更時間の終了索引です。
yyyyMMddHHmmssは、quote mdtm
filename
コマンドで取得されたファイル変更時間の日付/時間の書式です。
結果のJCAファイルには、次のパラメータと値が含まれます。
<property name=" FileModificationTime " value=" FileSystem "/> <property name=" ModificationTimeFormat" value=" 4,18,yyyyMMddHHmmss "/>
タイムゾーンの問題を処理するには、タイムスタンプの違いを理解している必要があります。FTPサーバーのタイムゾーンは、Windowsの「日付と時刻のプロパティ」(たとえば、Windowsのタスク・バーに表示されている時刻をダブルクリック)を使用して決定されます。Oracle FTPアダプタを実行しているシステムとFTPサーバーの時差をミリ秒に換算し、その値をcomposite.xml
ファイルのバインディング・プロパティとして追加します。
<binding.jca config="FlatStructureIn_file.jca"> <property name="timestampOffset" source="" type="xs:string" many="false" override="may">238488888</property--> </binding.jca>
ディレクトリ・リスティング
このオプションを使用すると、FTPディレクトリ・リスティング・コマンドを使用してファイル変更時間から日付/時間書式を取得できます。たとえば、ディレクトリ・リスティング・コマンド(ls -l
)で次の情報が返ってきたとします。
12-27-04 07:44AM 2829 NativeData2.txt
開始索引、終了索引およびファイル変更時間の日付/時間の書式を、カンマ区切りの単一の値(0
,17
, MM-dd-yy hh:mma
など)として、「旧ファイルの日付書式/時刻書式」フィールドまたは「最新ファイルの日付書式/時刻書式」フィールドに指定します。
ここで
0
はファイル変更時間の開始索引です。
17
はファイル変更時間の終了索引です。
MM-dd-yy hh:mmaは、ls -l
コマンドで取得されたファイル変更時間の日付/時間のフォーマットです。この例では、「最新ファイルの日付書式/時刻書式」フィールドに値が入力されています。このフィールドはネーミング規則に準拠しており、書式が最新のファイルから取得されたことを意味します。一方、「旧ファイルの日付書式/時刻書式」フィールドでは最も古いファイルから書式が取得されます。
結果のJCAファイルには、次のパラメータと値が含まれます。
<property name=" FileModificationTime " value=" DirListing"/> <property name=" ModificationTimeFormat" value="0,17, MM-dd-yy hh:mma "/>
タイムゾーンの問題を処理するには、タイムスタンプの違いを理解している必要があります。FTPサーバーのタイムゾーンは、Windowsの「日付と時刻のプロパティ」(たとえば、Windowsのタスク・バーに表示されている時刻をダブルクリック)を使用して決定されます。Oracle FTPアダプタを実行しているシステムとFTPサーバーの時差をミリ秒に換算し、その値をcomposite.xml
ファイルのバインディング・プロパティとして追加します。
<binding.jca config="FlatStructureIn_file.jca"> <property name="timestampOffset" source="" type="xs:string" many="false" override="may">238488888</property--> </binding.jca>
ファイル名サブストリング
このオプションを使用すると、ファイル名から変更時間を取得できます。たとえば、ファイル名がfixedLength_20050324.txt
の場合、次の値を指定できます。
「サブストリング開始索引」フィールドの開始索引(12
など)
「終了索引」フィールドの終了索引(20
など)
ファイル名でファイル変更時間を表すためにJavaのSimpleDateFormat
に準拠している「日付書式/時間書式」フィールドの日付と時間の書式(yyyyMMdd
など)
結果のJCAファイルには、次のパラメータと値が含まれます。
<property name=" FileModificationTime " value=" Filename"/> <property name=" FileNameSubstringBegin " value="12 "/> <property name=" FileNameSubstringEnd " value="20"/> <property name=" ModificationTimeFormat " value=" yyyyMMdd "/>
「アダプタ構成ウィザード」を完了すると、JDeveloperの「アプリケーション」セクションに構成ファイルが作成されます。
エラー処理の詳細は、図2-21「カスタム・アダプタ構成ウィザードのJCAプロパティ画面」を参照してください。
また、次のサンプルに示すように、DefaultDateFormat
パラメータおよびRecentDateFormat
パラメータをOracle FTPアダプタのデプロイメント・ディスクリプタに追加することも必要となります。
<non-managed-connection managedConnectionFactoryClassName="oracle.tip.adapter.ftp.FTPManagedConnection Factory"> <property name="host" value="localhost"/> <property name="port" value="21"/> <property name="username" value="****"/> <property name="password" value="****"/> <property name="listParserKey" value="UNIX"/> <property name="defaultDateFormat" value="MMM d yyyy"/> <property name="recentDateFormat" value="MMM d HH:mm"/> </non-managed-connection>
DefaultDateFormat
パラメータおよびRecentDateFormat
パラメータの詳細は、第4.2.21項「Oracle FTPアダプタのディレクトリ内のファイルの再帰的処理」を参照してください。
アウトバウンド方向では、Oracle FTPアダプタはOracleファイル・アダプタのWrite File操作と同様に機能します。BPELプロセスまたはメディエータ・サービスからメッセージを受信し、ファイル内のメッセージをファイルシステム(この場合はリモート)に書き込みます。メッセージをリモート・システムに書き込む必要があるため、図4-37に示すように、アダプタ構成ウィザードではアダプタ・インスタンスのJNDI名でFTPサーバーに接続するように求められます。
ログイン後、Put File(書込み)操作と配信するファイル・タイプを選択します。図4-40にこの選択内容を示します。
これ以降のPut File操作のアダプタ構成ウィザードのページは、Oracleファイル・アダプタのWrite File操作のページと同じです。表4-9に、表示されるページとその機能の説明が記載されている項を示します。
表4-9 Put File操作のアダプタ構成ウィザードのページ
ページ | 参照先 |
---|---|
ファイル構成(図4-26) |
第4.3.2.2項「アウトバウンド・ファイル・ディレクトリの作成」 |
メッセージ(図4-31) |
第4.3.2.3項「ネイティブ・データ・トランスレーション」 |
「アダプタ構成ウィザード」を完了すると、JDeveloperの「アプリケーション」セクションに構成ファイルが作成されます。
アウトバウンド方向では、Oracle FTPアダプタはOracleファイル・アダプタの同期Read File操作と同様に機能し、ファイルシステムのファイルをポーリングして取得し、ファイルの現在のコンテンツを読み取ります。主な違いは、Oracle FTPアダプタがリモートでのファイル交換に使用されることです。このポーリングのため、アダプタ構成ウィザードでは後で使用するFTPサーバーへの接続情報が求められます。ファイルを同期的に読み取るには、図4-41に示すように「同期Get File」操作を選択します。
Oracle FTPアダプタのファイル・リスティングの概要は、第4.3.4項「Oracleファイル・アダプタのファイル・リスティングの説明」に記載されているOracleファイル・アダプタのファイル・リスティングの概要と似ています。Oracle FTPアダプタはターゲット・ディレクトリでファイルをポーリングして、ターゲット・ディレクトリのファイルを指定されたFTPの場所でリストします。ファイルのコンテンツは読み取られませんOracle FTPアダプタのこの機能では、invokeアクティビティを使用してターゲット・ディレクトリからファイルのリストを取得します。このファイルのリストはXML文書として返され、ファイル名、ディレクトリ名、ファイル・サイズ、最終変更時間などの情報が記載されています。
注意: 標準Java APIには作成時間を取得するためのメカニズムがないため、FTPの場合、ファイル作成時間プロパティ
|
BPELプロセスまたはメディエータ・サービスでOracle FTPアダプタを使用するように構成するには、アダプタ構成ウィザードを使用します。これにより、アウトバウンドのWSDL
とJCA
のファイルのペアが作成されます。
ファイルのリストを表示するには、アダプタ構成ウィザードの「操作タイプ」ページで「List Files」
操作を選択します。アダプタ構成ウィザードの「ファイル・ディレクトリ」ページでは、リスト表示操作のファイル名の読取りに使用するディレクトリの情報を指定する必要があります。ディレクトリ内のファイルを再帰的にリスト表示することもできます。アダプタ構成ウィザードの「ファイルのフィルタ処理」ページでは、取得または無視するファイルの詳細を指定できます。
Oracle FTPアダプタはリスナーとして機能し、ローカルまたはリモートのファイルシステムの指定されたディレクトリをポーリングして、指定されたネーミング基準に一致するファイルを検索します。
次の各項では、Oracleファイル/FTPアダプタの各種構成タスクについて説明します。
リモートFTPサーバーにアクセスするには、次の資格証明を構成する必要があります。
ユーザー名: リモートFTPサーバーで使用するユーザー名
パスワード: リモートFTPサーバーで使用するパスワード
ポート: 21
ホスト: リモートFTPサーバーのIPアドレス
これらの資格証明を構成するには、Oracle WebLogic Serverコンソールを使用してweblogic-ra.xml
ファイルを変更する必要があります。
これを行うには、Oracle WebLogic Server管理コンソールで次の手順を実行します。
左側のナビゲーション・ペインから、「デプロイメント」を選択します。
右側に表示されるデプロイメントの表から、「FtpAdapter」を選択します。
FtpAdapterの「構成」サブタブを選択し、「アウトバウンド接続プール」を選択します。
javax.resource.cci.ConnectionFactory
を展開し、変更するインスタンスを選択します(たとえば、HA以外の使用例では、eis/Ftp/FtpAdapter
インスタンスを選択します)。
次の各項では、アクティブ/アクティブ・トポロジに対する高可用性のためにOracleファイル/FTPアダプタを構成する際の要件と手順について説明します。
高可用性を実現するようにOracleファイル/FTPアダプタを構成するには、次の前提条件が満たされていることを確認する必要があります。
クラスタリングされた複数のプロセスで、同じ物理ディレクトリが使用されている必要があります。
connection-factoryでコントロール・ディレクトリと同じ共有ディレクトリが指定され、その名前が一致している必要があります。たとえば、一方のconnection-factoryのデプロイメント・ディスクリプタでcontrolDir
の値として/shared/control_dir
が指定されている場合は、もう一方のデプロイメント・ディスクリプタでも同じ値が指定されている必要があります。
アダプタを正常に機能させるために、リモート・フォルトに対するフォルト・ポリシーとフォルト・バインディングが作成されている必要があります。フォルト・ポリシーとフォルト・バインディングの詳細は、第2.21項「エラー処理」を参照してください。
JCAファイル内にMaxRaiseSize
プロパティを設定する必要があります。
注意: 大きなペイロードについては、次の設定を追加して <xa-set-transaction-timeout>true</xa-set-transaction-timeout> <xa-transaction-timeout>1000</xa-transaction-timeout> |
注意: Windowsプラットフォームの場合は、入力ディレクトリと出力ディレクトリが正規化されていることを確認する必要があります。たとえば、 |
注意: すべてのプラットフォームで、入力ディレクトリ名または出力ディレクトリ名をJavaシステム・プロパティfile.separator値で終了しないようにしてください。たとえば、 |
Oracleファイル/FTPアダプタでは、1つのノードのみが分散トポロジで特定のファイルを処理する必要があります。データベース表をコーディネータとして使用すると、インバウンド操作でのOracleファイル/FTPアダプタの可用性が向上します。
コーディネータとしてのデータベース表の使用
データベース表をコーディネータとして使用して、インバウンドのOracleファイル/FTPアダプタサービスの可用性を高めるには、次の手順を使用します。
注意: データベースをコーディネータとして使用する場合は、グローバル・トランザクション・タイムアウトを増やす必要があります。 |
データベース表の作成
データベース・スキーマはsoainfraの一部として事前作成されているため、この手順を実行する必要はありません。
Oracleファイル・アダプタのデプロイメント・ディスクリプタの変更
Oracle WebLogic Server管理コンソールで、eis/HAFileAdapter
に対応するconnection-instanceのOracleファイル・アダプタのデプロイメント・ディスクリプタを変更します。
Oracle WebLogic Server管理コンソールにログインします。コンソールにアクセスするには、http://
servername
:portnumber
/console
にナビゲートします。
「ドメイン構造」の左ペインで「デプロイメント」をクリックします。
右ペインの「デプロイメントの概要」の下にあるFileAdapterをクリックします。
「構成」タブをクリックします。
「アウトバウンド接続プール」タブをクリックし、javax.resource.cci.ConnectionFactoryを開いて図4-42に示すように構成済のコネクション・ファクトリを表示します。
図4-42 Oracle WebLogic Server管理コンソール - 「FileAdapterの設定」ページ
「eis/HAFileAdapter」をクリックします。高可用性に対応するコネクション・ファクトリのアウトバウンド接続プロパティが表示されます。
図4-43に示すようにコネクション・ファクトリのプロパティを更新します。
図4-43 Oracle WebLogic Server管理コンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ
Oracleファイル/FTPアダプタに関するコネクション・ファクトリ内の新規パラメータは、次のとおりです。
controlDir
- 制御ファイルを格納するディレクトリ構造に設定します。1つのクラスタ内で複数のWebLogic Serverインスタンスを実行する場合は、共有の場所に設定する必要があります。
inboundDataSource
- 値をjdbc/SOADataSource
に設定します。これは、高可用性に対応するスキーマが事前作成されるデータソースです。事前作成されたスキーマ・ファイルは、$BEA_HOME/AS11gR1SOA/rcu/integration/soainfra/sql/adapter/createschema_adapter_oracle.sql
で参照できます。それ以外の場所にスキーマを作成するには、このスクリプトを使用します。別のスキーマを選択した場合は、それに応じてinboundDataSourceプロパティを設定する必要があります。
次の例に示すように、コネクション・ファクトリを使用するためにBPELプロセスまたはメディエータのシナリオを構成します。
<adapter-config name="FlatStructureIn" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/HAFileAdapter" UIincludeWildcard="*.txt" adapterRef=""/> <endpoint-activation portType="Read_ptt" operation="Read"> <activation-spec className="oracle.tip.adapter.file.inbound.FileActivationSpec"../> <property../> <property../> </activation-spec> </endpoint-activation> </adapter-config>
注意: コネクション・ファクトリでは、ロケーション属性が |
Oracleファイル/FTPアダプタでは、複数の参照が同じディレクトリに書き込まれた場合に相互にオーバーライドされないようにする必要があります。次のロック機能を使用すると、アウトバウンド操作でのOracleファイル/FTPアダプタの可用性が向上します。
データベースmutex
ユーザー定義mutex
データベースMutexの使用
データベース表をコーディネータとして使用して、アウトバウンドのOracleファイル/FTPアダプタサービスの可用性を高めるには、次の手順を使用します。
注意: データベースをコーディネータとして使用する場合は、グローバル・トランザクション・タイムアウトを増やす必要があります。 |
データベース表の作成
データベース・スキーマはsoainfraの一部として事前作成されているため、この手順を実行する必要はありません。
Oracleファイル・アダプタのデプロイメント・ディスクリプタの変更
Oracle WebLogic Server管理コンソールで、eis/HAFileAdapter
に対応するconnection-instanceのOracleファイル・アダプタのデプロイメント・ディスクリプタを変更します。
Oracle WebLogic Server管理コンソールにログインします。コンソールにアクセスするには、http://
servername
:portnumber
/console
にナビゲートします。
「ドメイン構造」の左ペインで「デプロイメント」をクリックします。
右ペインの「デプロイメントの概要」の下にあるFileAdapterをクリックします。
「構成」タブをクリックします。
「アウトバウンド接続プール」タブをクリックし、javax.resource.cci.ConnectionFactoryを開いて図4-42に示すように構成済のコネクション・ファクトリを表示します。
「eis/HAFileAdapter」をクリックします。高可用性に対応するコネクション・ファクトリの「アウトバウンド接続のプロパティ」ページが表示されます。
図4-44に示すようにコネクション・ファクトリのプロパティを更新します。
図4-44 Oracle WebLogic Server管理コンソール - 「javax.resource.cci.ConnectionFactoryの設定」ページ
Oracleファイル/FTPアダプタに関するコネクション・ファクトリ内の新規パラメータは、次のとおりです。
controlDir
- 制御ファイルを格納するディレクトリ構造に設定します。1つのクラスタ内で複数のWebLogic Serverインスタンスを実行する場合は、共有の場所に設定する必要があります。
inboundDataSource
- 値をjdbc/SOADataSource
に設定します。これは、高可用性に対応するスキーマが事前作成されるデータソースです。事前作成されたスキーマは、$BEA_HOME/AS11gR1SOA/rcu/integration/soainfra/sql/adapter/createschema_adapter_oracle.sql
で参照できます。それ以外の場所にスキーマを作成するには、このスクリプトを使用します。別のスキーマを選択した場合は、それに応じてinboundDataSourceプロパティを設定する必要があります。
outboundDataSource
- 値をjdbc/SOADataSource
に設定します。これは、高可用性に対応するスキーマが事前作成されるデータソースです。事前作成されたスキーマは、$BEA_HOME/AS11gR1SOA/rcu/integration/soainfra/sql/adapter/createschema_adapter_oracle.sql
で参照できます。それ以外の場所にスキーマを作成するには、このスクリプトを使用します。その場合は、outboundDataSourceプロパティを設定する必要があります。
outboundLockTypeForWrite
- Oracle Databaseを使用する場合は値をoracle
に設定します。デフォルトでは、Oracleファイル/FTPアダプタは、メモリー内mutexを使用してアウトバウンドの書込み操作をロックします。書込み操作の同期化のために、次の値のいずれかを選択する必要があります。
memory
- Oracleファイル/FTPアダプタは、メモリー内mutexを使用してファイルシステムへのアクセスを同期化します。
oracle - アダプタはOracle Databaseの順序を使用します。
db
- アダプタは、事前作成されたデータベース表(FILEADAPTER_MUTEX
)をロック・メカニズムとして使用します。このオプションは、Oracle Databaseスキーマ以外のスキーマを使用している場合にのみ使用します。
user-defined
- アダプタはユーザー定義mutexを使用します。ユーザー定義mutexを構成するには、mutexインタフェース"oracle.tip.adapter.file.Mutex"
を実装し、名前が"oracle.tip.adapter.file.mutex"
で、アウトバウンド参照のmutexの完全修飾クラス名の値を指定した新規バインディング・プロパティを構成する必要があります。
次の例に示すように、コネクション・ファクトリを使用するためにBPELプロセスまたはメディエータのシナリオを構成します。
<adapter-config name="FlatStructureOut" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/HAFileAdapter" adapterRef=""/> <endpoint-interaction portType="Write_ptt" operation="Write"> <interaction-spec className="oracle.tip.adapter.file.outbound.FileInteractionSpec"> <property../> <property../> </interaction-spec> </endpoint-interaction> </adapter-config>
注意: コネクション・ファクトリでは、ロケーション属性が |
Oracle FTPアダプタでは、Windows、SolarisおよびLinuxでセキュアFTP機能を使用できます。Windowsの場合、この機能はOpenSSLを使用したFileZilla FTPサーバーで動作確認されています。この項では、セキュアFTP機能の概要と、この機能のインストールおよび構成方法を説明します。
この項には、次の項目が含まれます。
機密データがリモート・サーバーへ転送される環境(クレジット・カード情報のHTTPサーバーへの送信など)では、セキュリティの問題は非常に重要です。このような場合、セキュリティには主に次の2つの要件があります。
データ交換をしているリモート・サーバーの信頼性
データの傍受を試みる第三者からの保護
Secure Socket Layer(SSL)の証明書と暗号化は、この2つのセキュリティ要件を満たすことに重点が置かれています。FTPでSSLが使用される場合、そのセキュリティ・メカニズムはFTPS(またはFTP over SSL)と呼ばれます。
SSL環境でクライアントの信頼を得るために、サーバーは認識済の認証局から証明書(X.509証明書など)を取得します。FTPサーバーを設定する際には、OpenSSLを使用してサーバーの証明書を作成します。どのクライアントも、初めは少数のパーティしか信頼しません。サーバーが信頼されているパーティの1つである場合、またはサーバーの証明書がそれらのパーティのいずれかで発行されたものである場合、間接的であるにしても信頼を得たことになります。たとえば、サーバーの証明書が、認証局Bから発行された証明書を持つ認証局Aから発行されたもので、クライアントがBを信頼していればそれで問題ありません。図4-45に示す設定では、サーバーの証明書は信頼できる証明書として、直接クライアントの証明書ストアにインポートされます。
送信前に暗号化し、受信後に復号することで、転送するデータは盗用されなくなります。データが大量な場合、(データの暗号化と復号に同じ鍵を使用する)対称型暗号化は公開鍵と秘密鍵を使用する方法よりもはるかに高速です。対称型暗号化はFTPSで使用される方法です。ただし、クライアントとサーバーがデータの暗号化や復号に同じ鍵を使用するには、共通の鍵について合意する必要があります。通常、クライアントが次のタスクを実行することで合意が成立します。
セッション鍵の生成(データの暗号化と復号に使用)
サーバーの証明書の一部であるサーバーの公開鍵を使用したセッション鍵の暗号化
サーバーへの鍵の送信
サーバーは秘密鍵を使用してこのセッション鍵を復号化し、クライアントに送信する前にそのセッション鍵を使用してファイル・データを暗号化します。
次の各項では、SolarisおよびLinux用のセキュアFTPのインストールおよび構成方法について説明します。
OpenSSLは、SSLプロトコルのオープン・ソースの実装です。OpenSSLは基本的な暗号機能を実装し、ユーティリティ関数を提供します。FTPサーバーとして使用するSolarisまたはLinuxのホストにOpenSSLをインストールして構成します。
次のURLに移動します。
http://www.openssl.org/source
使用可能なファイルのリストでopenssl-0.9.7g.tar.gz
を検索します。例:
3132217 Apr 11 17:21:51 2005 openssl-0.9.7g.tar.gz (MD5) (PGP sign)
次のファイルをダウンロードします。
openssl-0.9.7g.tar.gz
openssl-0.9.7g.tar.gz.md5(MD5
リンクの先)
openssl-0.9.7g.tar.gz.asc(PGP sign
リンクの先)
gunzip
を使用して次のファイルを解凍します。
gunzip openssl-0.9.7g.tar.gz
次のtarファイルを解凍します。
tar xvf openssl-0.9.7g.tar
次の場所にディレクトリを変更します。
cd openssl-0.9.7g
次のコマンドを実行します。
./config --prefix=/usr --openssldir=/usr/local/openssl
Bourneシェルに変更します(使用していない場合)。
sh
PATH
変数を構成およびエクスポートします。
PATH=${PATH}:/usr/ccs/bin; export PATH
次のコマンドを実行します。
make
Bourneシェルを終了します。
exit
次のコマンドを実行します。
make test
スーパーユーザーとしてログインします。
msu
必要な場合にはパスワードを入力します。
次のコマンドを実行します。
make install
vsftpdサーバーは、UNIXシステム用のセキュアで高速なFTPサーバーです。FTPサーバーとして使用するSolarisまたはLinuxのホストにvsftpdをインストールして構成します。
次の場所に移動します。
ftp://vsftpd.beasts.org/users/cevans/
vsftpd-2.0.5
をダウンロードします(tarファイルおよび署名ファイル(.asc
ファイル)が必要です)。例:
[BINARY] vsftpd-2.0.5.tar.gz. . . . . . . . . . . [Mar 19 21:26] 149K [FILE] vsftpd-2.0.5.tar.gz.asc. . . . . . . . . [Mar 19 21:26] 189B
gunzip
を使用して次のファイルを解凍します。
gunzip vsftpd-2.0.5.tar.gz
tarファイルを解凍します。
tar xvf vsftpd-2.0.5.tar
次の場所にディレクトリを変更します。
cd vsftpd-2.0.5
builddefs.h
ファイルを次のように変更します。
#undef VSF_BUILD_SSL
変更後
#define VSF_BUILD_SSL
スーパーユーザーとしてログインします。
msu
必要な場合にはパスワードを入力します。
/etc
ディレクトリに、vsftpd.conf
という名前のファイルを次の設定で作成します。
# Standalone mode listen=YES max_clients=200 max_per_ip=4 # Access rights anonymous_enable=YES #chroot_local_user=YES #userlist_enable=YES ftp_username=ftp local_enable=YES write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES chown_uploads=YES chown_username=ftp # Security anon_world_readable_only=NO allow_anon_ssl=YES ssl_enable=YES connect_from_port_20=YES hide_ids=YES pasv_min_port=50000 pasv_max_port=60000 # Features ftpd_banner="Welcome to the FTP Service" xferlog_enable=YES ls_recurse_enable=NO ascii_download_enable=NO async_abor_enable=YES # Performance one_process_model=NO idle_session_timeout=120 data_connection_timeout=300 accept_timeout=60 connect_timeout=60 anon_max_rate=50000
注意:
|
次のコマンドを実行します。
mkdir /var/ftp useradd -d /var/ftp ftp chown root /var/ftp chmod og-w /var/ftp mkdir /usr/share/empty mkdir /usr/share/ssl mkdir /usr/share/ssl/certs
次のコマンドを実行します。
openssl req -x509 -nodes -newkey rsa:1024 -keyout /usr/share/ssl/certs/vsftpd.pem -out /usr/share/ssl/certs/vsftpd.pem
vsftpd-2.0.5
ディレクトリからvsftpd
デーモンを実行します。
./vsftpd
次のタスクを実行してOracle FTPアダプタを設定します。
SolarisまたはLinuxのホストで次のコマンドを実行します。
mkdir /var/ftp/inDir mkdir /var/ftp/outDir chmod 777 /var/ftp/inDir /var/ftp/outDir
Oracle WebLogic Server管理コンソールを使用して、Oracle FTPアダプタのデプロイメント・ディスクリプタでFTP接続パラメータを指定します。
パラメータ | 説明 |
---|---|
|
|
|
チャネルのタイプ。制御チャネルまたはデータ・チャネル。可能な値は |
|
FTP over SSLのポート。デフォルトは |
|
キーストア・プロバイダのクラス。デフォルトは |
|
キーストア・タイプ。デフォルトは |
|
キーストア・アルゴリズム。デフォルトは |
|
カンマ区切りの暗号スイートのリスト。デフォルトは空白で、暗号スイートのデフォルト・リストが使用されます。ほとんどの場合、デフォルトを変更する必要はありません。 |
|
PKIプロバイダの名前。デフォルトは |
|
JSSEプロバイダの名前。デフォルトは |
これでセキュアFTPのインストールおよび構成が完了し、Oracle FTPアダプタでこの機能を使用する準備ができました。
FTPS機能はOpenSSLを使用したFileZilla FTPサーバーで動作確認されています。WindowsでFileZillaを使用する場合にOpenSSLをインストールおよび構成するには、次の各項の手順に従う必要があります。
OpenSSLは、SSLプロトコルのオープン・ソースの実装です。OpenSSLは基本的な暗号機能を実装し、ユーティリティ関数を提供します。FTPサーバーとして使用するWindowsのホストにOpenSSLをインストールして構成するには、次の手順を実行します。
次のURLに移動します。
Visual C++ 2008 Redistributables
をダウンロードしてインストールします。
Win32 OpenSSL v0.9.8k Light
をダウンロードしてインストールします。
サーバー鍵ファイルおよび証明書ファイルを作成するには、次の手順を実行します。
コマンド・プロンプトを開いてOpenSSL\bin
ディレクトリを参照します。
次のコマンドを実行します。
openssl req -new -x509 -keyout mykey.pem -out mycert.pem -days 365
サンプルのコマンド出力は次のとおりです。
C:\OpenSSL\bin>openssl req -new -x509 -keyout mykey.pem -out mycert.pem -days 365 Loading 'screen' into random state - done Generating a 1024 bit RSA private key ..........++++++ .......++++++ writing new private key to 'mykey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:CA Locality Name (eg, city) []:Belmont Organization Name (eg, company) [Internet Widgits Pty Ltd]:Test Organizational Unit Name (eg, section) []:Test Common Name (eg, YOUR name) []:Test test Email Address []:test@test.com
必要な場合にはPEMパスフレーズを入力します。
検証のためにステップ3で入力したPEMパスフレーズを再入力します
要求された詳細を入力します。
サーバー鍵(mykey.pem
)およびサーバー証明書(mycert.pem
)がOpenSSL\bin
ディレクトリに生成されます。
サーバー鍵およびサーバー証明書をFileZillaにインポートするには、次の手順を実行します。
Windowsの「スタート」メニューから、FileZillaサーバーを開きます。
「Edit」を選択して「Settings」をクリックします。
「FileZilla Server Options」ダイアログが表示されます。
「SSL/TLS settings」をクリックします。
図4-46に示すように、サーバー鍵およびサーバー証明書の詳細を入力します。
Oracle FTPアダプタではPEMフォーマットが認識されないため、サーバー鍵およびサーバー証明書をPEMフォーマットからPKCS#12フォーマットへ変換する必要があります。サーバー鍵およびサーバー証明書をPKCS#12フォーマットに変換するには、次の手順を実行します。
コマンド・プロンプトを開いてOpenSSL\bin
ディレクトリを参照します。
次のコマンドを実行します。
openssl pkcs12 -export -out mykeyz.p12 -in mycert.pem -inkey mykey.pem
コマンド出力は次のとおりです。
C:\OpenSSL\bin>openssl pkcs12 -export -out mykeyz.p12 -in mycert.pem -inkey mykey.pem Loading 'screen' into random state - done Enter pass phrase for mykey.pem: Enter Export Password: Verifying - Enter Export Password:
必要な場合にはPEMパスフレーズを入力します。このパスフレーズは、第4.4.3.3.2項「OpenSSLのサーバー鍵およびサーバー証明書の生成」でOpenSSLのサーバー鍵およびサーバー証明書を生成中に作成したパスフレーズです。
PKCS#12ファイルに対するエクスポート・パスワードを入力します。
検証のためにエクスポート・パスワードを再入力します。
要求された詳細を入力します。
mykeyz.p12
ファイルがOpenSSL\bin
ディレクトリに生成されます。
mykeyz.p12
ファイルをOracle FTPアダプタを実行中の管理対象のOracle WebLogic Serverインスタンスにコピーします。
例:
/scratch/$user/private/mykeyz.p12
Oracle FTPアダプタのデプロイメント・ディスクリプタを構成するには、次の手順を実行します。
http://
servername:portnumber
/console
にナビゲートします。
必要な資格証明を使用して、Oracle WebLogic Server管理コンソールのホーム・ページを開きます。
「ドメイン構造」ペインで「デプロイメント」を選択します。
Oracle WebLogic Server管理コンソールの「デプロイメントの概要」ページが表示されます。
「FtpAdapter」をクリックします。
Oracle WebLogic Server管理コンソールの「FtpAdapterの設定」ページが表示されます。
「構成」タブをクリックし、「アウトバウンド接続プール」タブをクリックします。
「アウトバウンド接続プールの構成表」が表示されます。
構成するFTPアダプタ・インスタンスのJNDI名を選択します。たとえば、"eis/Ftp/FtpAdapter"
と入力します。
表4-10示すデプロイメント・ディスクリプタを構成します。
表4-10 Oracleファイル/FTPアダプタのJCAプロパティ
プロパティ名 | プロパティ値 |
---|---|
|
この値には |
|
管理対象のOracle WebLogic Server ServerインスタンスのPKCS#12ファイルの場所( |
|
この値には、第4.4.3.3.4項「サーバー鍵のPEMからPKCS12フォーマットへの変換」のステップ4で生成したエクスポート・パスワードを設定します。 |
|
この値には、 |
|
この値には、 |
|
この値には、 |
|
空白のままにしておく必要があります。 |
|
空白のままにしておく必要があります。 |
SSHファイル転送プロトコル(SFTP)は、ネットワークを介したセキュアなファイル転送を可能にするネットワーク・プロトコルです。Oracle FTPアダプタでは、WindowsおよびLinuxでSFTP機能を使用できます。この項では、SFTP機能の概要と、この機能のインストールおよび構成方法を説明します。
この項には、次の項目が含まれます。
FTPは、クライアントが基礎となるSSHトランスポートを介してファイルを安全に転送できるようにするネットワーク・プロトコルです。SFTPはFTP over SSHともファイル転送プロトコル(FTP)とも異なります。図4-47に、SSHクライアントとSSHサーバーの間の通信プロセスを示します。SFTPはWindowsとLinuxでサポートされています。
SFTPの機能は、次のとおりです。
SSHプロトコルでは、暗号化に公開鍵暗号を使用します。ここでは、データがどのように暗号化されるかについて説明します。
SSHサブシステムにより、Data Encryption Standard(DES)やBlowfishなどの対称鍵暗号を使用してセッション鍵が生成されます。現在、SSHプロトコルではDiffie-Hellman鍵交換アルゴリズムを使用してセッションの対称鍵が導出されています。
セッション鍵を使用してデータが暗号化されます。
受信者の公開鍵を使用してセッション鍵が暗号化されます。受信者は秘密鍵を持っているため、Rivest-Shamir-Adleman(RSA)やDigital Signature Algorithm(DSA)など、必要なPKIアルゴリズムを使用してメッセージを復号化できます。
本来、SSHプロトコルでは、パスワードまたはセッション鍵をネットワークでの転送時に暗号化することでパスワード認証をサポートしています。また、SSHプロトコルでは「既知のホスト」というメカニズムを使用して、IPスプーフィングなどの脅威を防止します。クライアントとサーバーの両方でこのメカニズムが使用されている場合、あらゆる種類の通信を行う前に相互にアイデンティティを証明する必要があります。
SSHプロトコルは、Message Digest Algorithm 5(MD5)やSecure Hash Algorithm(SHA-1)など、広範囲に信頼されているバルク・ハッシュ・アルゴリズムを使用することで、挿入攻撃を防止します。第4.4.4.1.1項「暗号化」で説明したアルゴリズムを使用してデータ整合性チェックサムを実装することで、送信中のデータが故意に改ざんされるのを防止できます。
SSHプロトコルは、オープン・ソースのプラットフォーム間データ圧縮アルゴリズムであるzlibをサポートしています。SSHでは、ネットワーク帯域幅を低減するためにzlib
を使用して通信中のデータが圧縮されます。
OpenSSH for Windowsは、WindowsでのSSHプロトコルの無償実装です。Windows XPでOpenSSHをインストールおよび構成するには、次の手順を実行します。
Administrator権限を持つユーザーとしてログインします。
次のサイトからsetup.exe
をダウンロードします。
http://www.cygwin.com
setup.exe
を実行します。「Cygwin Net Release Setup」ウィンドウが表示されます。
「Next」をクリックします。「Choose Installation type」ウィンドウが表示されます。
ダウンロード・ソースとして「Install from Internet」を選択し、「Next」をクリックします。「Choose Installation Directory」ウィンドウが表示されます。
「root directory」はC:\cygwinのままにしておきます。「Install For」および「Default Text File Type」フィールドも、デフォルト・オプションのままにしておきます。
「Next」をクリックします。「Select Local Package Directory」ウィンドウが表示されます。
「Browse」をクリックし、ローカル・パッケージ・ディレクトリとして「C:\cygwin」を選択します。
「Next」をクリックします。「Select Connection Type」ウィンドウが表示されます。
インターネット接続の設定を選択して「Next」をクリックします。「Choose Download Site(s)」ウィンドウが表示されます。
「Available Download Sites」リストからサイトを選択して「Next」をクリックします。「Select Packages」ウィンドウが表示されます。
「View」をクリックして、インストール可能な全パッケージのリストを表示します。
デフォルト値でない場合は「openssh」を選択します。
opensshの「Binaries」ボックスを選択します。
「Next」をクリックしてインストールを開始します。
Windows XPデスクトップで、「マイ コンピュータ」を右クリックして「プロパティ」を選択します。
「詳細設定」タブをクリックし、「環境変数」をクリックします。
「新規」をクリックし、「変数名」フィールドにCYGWIN
、「変数値」フィールドにntsec
と入力します。
システム・パスにC:\cygwin\bin
を追加します。
「cygwin」ウィンドウを開きます。
ssh-host-config
と入力します。
次のプロンプトが表示されます。
Shall privilege separation be used? (yes/no)
yes
と入力します。
Shall this script create a local user 'sshd' on this machine?
yes
と入力します。
Do you want to install sshd as service?
(Say "no" if it's already installed as service) (yes/no)
yes
と入力します。
Which value should the environment variable CYGWIN have when sshd starts? It's recommended to set at least "ntsec" to be able to change user context without password. Default is "binmode ntsec tty".
ntsec
と入力します。
net start sshd
と入力してsshdサービスを開始します。
「cygwin」ウィンドウで次のコマンドを実行して、Windowsのローカル・ユーザー・アカウントをcygwinにレプリケートします。
mkpasswd --local > /etc/passwd mkgroup --local > /etc/group
設定をテストするために、「cygwin」ウィンドウにssh localhost
と入力します。
SFTP機能を使用するには、Oracle FTPアダプタのデプロイメント・ディスクリプタを変更する必要があります。
表4-11に、デプロイメント・ディスクリプタで値を指定する必要があるプロパティを示します。これらのプロパティの値は、認証のタイプとOpenSSHの場所に応じて異なります。
表4-11 SFTPのプロパティ
プロパティ | 説明 |
---|---|
|
必須: Yes デフォルト値: |
|
パスワードベース認証の場合は パスワードベース認証の場合は、 公開鍵認証の場合は、 必須: Yes |
|
これはオプション・パラメータであり、ユーザーはメッセージ暗号化に使用するセッション鍵を交換する際にデフォルトの鍵交換プロトコルを選択できます。 必須: No デフォルト値: |
|
このパラメータにより、通信中のデータを圧縮するかどうかを選択できます。 必須: No |
|
このパラメータにより、データ整合性チェックに使用するバルク・ハッシュ・アルゴリズムを選択できます。 必須: No デフォルト値: |
|
このパラメータにより、通信に使用する非対称型暗号を構成できます。 必須: No デフォルト値: |
|
秘密鍵ファイルへのパスを指定します。 必須: No |
|
次のリストから暗号を1つ指定します。
必須: No デフォルト値: blowfish-cbc |
|
SSHサーバーがファイアウォールの内側にある場合は HTTPを選択した場合は、次のパラメータの値を指定する必要があります。
必須: Yes |
Oracle FTPアダプタでパスワード認証を使用するように設定するには、表4-11に示したプロパティの値をOracle FTPアダプタのデプロイメント・ディスクリプタで指定する必要があります。authenticationType
プロパティがpassword
に設定されていることを確認してください。
表4-12のプロパティと値を指定します。
表4-12 サンプルのSFTPのプロパティとその値
プロパティ | 値 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
|
|
公開鍵認証の場合は、最初にOpenSSHを構成してからOracle FTPアダプタを設定する必要があります。Oracle FTPアダプタの設定は、OpenSSHがファイアウォールの内側で実行されるかどうかに応じて異なります。OpenSSHがファイアウォールの内側で実行される場合は、次の項を参照してください。
OpenSSHがファイアウォールの外側で実行される場合は、次の項を参照してください。
次の手順を実行します。
C:\cygwin\etc
ディレクトリに移動します。必要な場合は、公開鍵認証を強制するようにsshd_config
ファイルを構成します。詳細は、opensshのヘルプまたはマニュアルを参照してください。
C:\cygwin\bin
ディレクトリに移動します。
次のコマンドを実行して鍵のペアを生成します。
ssh-keygen -t rsa
鍵の保存先ファイルを求めるプロンプトに対して/etc/id_rsa
と入力します。
パスフレーズを入力します。
パスフレーズを再入力します。
/etc
ディレクトリに移動し、公開鍵ファイル(id_rsa.pub
)と秘密鍵ファイル(id_rsa
)の両方が生成されたことを確認します。
次のコマンドを実行して公開鍵ファイルのコピーを作成します。
cp id_rsa.pub authorized_keys
秘密鍵ファイルのコピーを安全な場所(C:\my-secured-folder\
など)に作成します。Oracle FTPアダプタ構成では、この秘密鍵ファイルが参照されます。
次のコマンドを実行してOpenSSHサーバーを再起動します。
net stop sshd net start sshd
Oracle FTPアダプタで公開鍵認証を使用するように設定するには、表4-11に示したパラメータの値をデプロイメント・ディスクリプタで指定する必要があります。authenticationType
パラメータがpublickey
に、transportProvider
パラメータがsocket
に設定されていることを確認します。privateKeyFile
パラメータには、秘密鍵ファイルの場所が含まれている必要があります。
表4-13に、公開鍵認証プロパティとその値のサンプル・リストを示します。
表4-13 サンプルのSFTPのプロパティとその値
プロパティ | 値 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
C:\my-secured-folder\id_rsa |
|
blowfish-cbc |
|
|
OpenSSHがファイアウォールの外側で実行されている場合に、Oracle FTPアダプタを公開鍵認証用に設定するには、次の手順を実行します。
表4-11に示したプロパティの値をOracle FTPアダプタのデプロイメント・ディスクリプタで指定する必要があります。authenticationType
プロパティがpublickey
に、transportProvider
プロパティがHTTP
に設定されていることを確認します。privateKeyFile
プロパティでは、秘密鍵ファイルの場所が指定されています。
Oracle FTPアダプタのデプロイメント・ディスクリプタで、次のプロキシ関連プロパティも指定します。
proxyHost
: プロキシ・ホスト名
proxyPort
: プロキシのポート番号
proxyUsername
: プロキシのユーザー名
proxyPassword
: プロキシのパスワード
useProxy
: プロキシを使用する場合はtrue
表4-14に、公開鍵認証プロパティおよびプロキシ・プロパティのサンプル・リストを示します。
表4-14 サンプルのSFTPのプロパティとその値
プロパティ | 値 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C:\my-secured-folder\id_rsa |
|
blowfish-cbc |
|
|
Oracle FTPアダプタがサポートしているプロキシはHTTPプロキシのみです。HTTPプロキシ・サポートは、プレーンFTPモードおよびSFTPモードという2つのモードで使用できます。この項では、プレーンFTPモードとSFTPモードで実行するようにOracle FTPアダプタを構成する方法について説明します。次の項目が含まれます。
Oracle FTPアダプタをプレーンFTPモードで実行する場合は、Oracle FTPアダプタのデプロイメント・ディスクリプタで特定のパラメータの値を指定する必要があります。表4-15に変更が必要なプロパティを示します。
表4-15 プレーンFTPモードのプロパティ
プロパティ | 説明 |
---|---|
|
リモートFTPサーバー名。 |
|
FTP制御ポート番号。 |
|
FTPユーザー名。 |
|
FTPパスワード。 |
|
プロキシ・ホスト名。 |
|
プロキシ・ポート番号。 |
|
プロキシ・ユーザー名。 |
|
プロキシ・パスワード。 |
|
プロキシ・タイプ。サポートされるのはHTTPプロキシ・タイプのみです。 |
|
プロキシ定義ファイルの絶対パス。 このパラメータはオプションです。 詳細は、第4.4.5.1.1項「プロキシ定義ファイル」を参照してください。 |
|
プロキシを使用する場合は |
表4-16に、Oracle FTPアダプタのデプロイメント・ディスクリプタのプロパティとその値のサンプル・リストを示します。
表4-16 サンプルのプレーンFTPモードのプロパティとその値
プロパティ | 値 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
すべてのプロキシ固有情報をプロキシ定義ファイルで指定し、このファイルを使用するようにOracle FTPアダプタのデプロイメント・ディスクリプタのproxyDefinitionFile
プロパティでアダプタを構成できます。プロキシ定義ファイルはXMLフォーマットで記述され、XMLスキーマに基づきます。例4-5に、プロキシ定義ファイルのXMLスキーマを示します。プロキシ定義ファイルは、このXMLスキーマに基づく必要があります。
例4-5 プロキシ定義ファイルのXMLスキーマ
<?xml version = \"1.0\" encoding = \"UTF-8\"?> <schema targetNamespace = "http://ns.oracle.com/ip/af/ftp/proxy" xmlns = "http://www.w3.org/2001/XMLSchema" xmlns:proxy="http://ns.oracle.com/ip/af/ftp/proxy"> <element name="ProxyDefinitions" type="proxy:ProxyDefinitionsType"/> <complexType name="ProxyDefinitionsType"> <sequence> <element name="Proxy" type="proxy:ProxyDefinition" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType> <complexType name="ProxyDefinition"> <sequence> <element name="Step" type="proxy:StepType" minOccurs="1" maxOccurs="unbounded"/> </sequence> <attribute name="key" type="ID" use="required"/> <attribute name="description" type="string" use="required"/> <attribute name="type" type="proxy:Protocol" use="optional"/> </complexType> <complexType name="StepType"> <simpleContent> <extension base="string"> <attribute name="command" type="string" use="required"/> <attribute name="args" type="string" use="required"/> </extension> </simpleContent> </complexType> <simpleType name="Protocol"> <restriction base="string"> <enumeration value="ftp" /> <enumeration value="http" /> </restriction> </simpleType> </schema>
例4-5に示したXMLスキーマに基づくサンプル・プロキシ定義ファイルは、例4-6のようになります。
例4-6 プロキシ定義ファイル
<?xml version = '1.0' standalone = 'yes'?> <proxy:ProxyDefinitions xmlns:proxy="http://ns.oracle.com/ip/af/ftp/proxy"> <Proxy key="http" description="http" type="http"> <Step command="USER" args="remote_username" /> <Step command="PASS" args="remote_password" /> </Proxy> </proxy:ProxyDefinitions>
例4-6のファイルを使用すると、Oracle FTPアダプタから次の一連のログイン・コマンドが送信されます。
USER remote_username
PASS remote_password
プロキシ定義ファイルで、Oracle FTPアダプタのデプロイメント・ディスクリプタの値を取得するように指定することもできます。その場合は次の式を使用できます。
$proxy.user
: Oracle FTPアダプタのデプロイメント・ディスクリプタのproxyUsername
パラメータの値に対応します。
$proxy.pass
: Oracle FTPアダプタのデプロイメント・ディスクリプタのproxyPassword
パラメータの値に対応します。
$remote.user
: Oracle FTPアダプタのデプロイメント・ディスクリプタのusername
パラメータの値に対応します。
$remote.pass
: Oracle FTPアダプタのデプロイメント・ディスクリプタのpassword
パラメータの値に対応します。
$remote.host
: Oracle FTPアダプタのデプロイメント・ディスクリプタのhost
パラメータの値に対応します。
$remote.port
: Oracle FTPアダプタのデプロイメント・ディスクリプタのport
パラメータの値に対応します。
例4-7に、例4-6のXMLスキーマに基づき、weblogic-ra.xml
ファイルから値を取得するサンプルのプロキシ定義ファイルを示します。
例4-7 デプロイメント・ディスクリプタから値を取得するプロキシ定義ファイル
<?xml version = '1.0' standalone = 'yes'?> <proxy:ProxyDefinitions xmlns:proxy="http://ns.oracle.com/ip/af/ftp/proxy"> <Proxy key="http" description="http" type="http"> <Step command="USER" args="$remote.user" /> <Step command="PASS" args="$remote.pass" /> </Proxy> </proxy:ProxyDefinitions>
Oracle FTPアダプタをSFTPモードで実行する場合は、Oracle FTPアダプタのデプロイメント・ディスクリプタで特定のプロパティの値を指定する必要があります。表4-17に変更が必要なプロパティを示します。
表4-17 SFTPモードのプロパティ
プロパティ | 説明 |
---|---|
|
リモートFTPサーバー名。 |
|
FTP制御ポート番号。 |
|
SFTPユーザー名。 |
|
SFTPパスワード。 |
|
プロキシ・サーバーのホスト名。 |
|
プロキシ・ポート番号。 |
|
プロキシ・ユーザー名。 |
|
プロキシ・パスワード。 |
|
SFTPモードの場合は |
|
第4.4.4.3項「Oracle FTPアダプタでのSFTPの設定」を参照してください。 |
|
値 |
表4-18に、デプロイメント・ディスクリプタのプロパティのサンプル・リストを示します。
この項は、次のOracleファイル/FTPアダプタの使用例で構成されています。
これは、大きいXML文書を小さい個別のXMLフラグメントにデバッチするOracleファイル・アダプタ機能です。
この使用例では、XMLのデバッチ・プロセスでOracleファイル・アダプタを使用し、繰返しノードとしてXMLファイルで発生する従業員のバッチを含むXMLファイルをデバッチします。その後、アダプタによってこれらのノードが処理され、個々の各ノードが個別の出力ファイルに書き込まれます。
この使用例には、次の項目が含まれます。
デバッチを実行するには、Adapters-102FileAdapterXMLDebatching
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/input/emps.xml
artifacts/schemas/employees.xsd
Adapters-102FileAdapterXMLDebatching
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
図4-48に示すように、「アプリケーション名」フィールドにSOA-XMLDebatching
と入力して「次へ」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにXMLDebatching
と入力します。
図4-49に示すように、「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
図4-50に示すように、「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
図4-51に示すように、「名前」フィールドにBPELXMLDebatching
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図4-52に示すように、SOA-XMLDebatchingアプリケーションとXMLDebatchingプロジェクトが設計領域に表示されます。
employees.xsd
ファイルをプロジェクトのxsdディレクトリにコピーします(このファイルの場所の詳細は、第4.5.1.1「前提条件」を参照)。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から「公開されたサービス」スイムレーンにOracleファイル・アダプタをドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
図4-53に示すように、「サービス名」フィールドにXMLDebatchingIn
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
図4-54に示すように、「Read File」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
図4-55に示すように、入力ディレクトリの物理パスを入力します。「ファイルのフィルタ処理」ページが表示されます。
図4-56に示すように、「インクルード・ファイルの名前パターン」フィールドに*.xml
と入力し、「ファイルが複数のメッセージを含む」チェック・ボックスを選択し、「バッチでメッセージをパブリッシュする数」ボックスの値として1
を指定します。
「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図4-57に示すように、「プロジェクトのスキーマ・ファイル」、「employees.xsd」および「employees」を順番にクリックします。
「OK」をクリックします。図4-58に示すように、「メッセージ」ページの「URL」フィールドにemployees.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-59に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xmlが表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンド・ファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにXMLOut
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Write File」を選択して「次へ」をクリックします。「ファイル構成」ページが表示されます。
図4-60に示すように、出力ディレクトリの物理パスを入力し、emp_%SEQ%.xml
を「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドに入力します。
選択されていない場合は、「メッセージ数の到達」オプションを選択します。デフォルト値は1
です。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図4-61に示すように、「プロジェクトのスキーマ・ファイル」、「employees.xsd」および「employee」を順番にクリックします。
「OK」をクリックします。図4-58に示すように、「メッセージ」ページの「URL」フィールドにemployees.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-62に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるXMLDebatchingIn内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のXMLOut内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-63のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELXMLDebatching」をダブルクリックします。「BPELXMLDebatching.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
図4-64に示すように、「名前」フィールドにReceiveEmployee
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図4-65に示すように、「XMLDebatchingIn」を選択して「OK」をクリックします。
図4-66に示すように、「Receive」ダイアログで「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。図4-67に示すように、JDeveloperの「BPELXMLDebatching.bpel」ページが表示されます。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
図4-68に示すように、「名前」フィールドにWriteEmployee
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図4-69に示すように、「XMLOut」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。図4-70に示すように、「Invoke」ダイアログが表示されます。
「OK」をクリックします。図4-71に示すように、JDeveloperの「BPELXMLDebatching.bpel」ページが表示されます。
transformアクティビティの追加
「コンポーネント・パレット」から、transformアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
transformアクティビティをダブルクリックします。「Transform」ダイアログが表示されます。
図4-72に示すように、「名前」フィールドにTransformPayload
と入力します。
「トランスフォーメーション」タブをクリックします。図4-73に示すように、「Transform」ダイアログが表示されます。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「ソース変数」ボックスで「ReceiveEmployee_Read_InputVariable」を選択し、「ソース・パート」ボックスで「employees」を選択して「OK」をクリックします。ソースとパートが選択された状態で「Transform」ダイアログが表示されます。
図4-74に示すように、「ターゲット変数」リストで「WriteEmployee_Write_InputVariable」を選択し、「ターゲット・パート」で「employee」を選択します。
「マッピングの作成」アイコンをクリックします。「XSLエディタ」ページが表示されます。
図4-75に示すように、ソースからemployeesをターゲットのemployeeにドラッグします。「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
「ファイル」、「すべて保存」を順番にクリックします。
「XSLエディタ」ページを閉じます。図4-76に示すように、「BPELXMLDebatching.bpel」ページが表示されます。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
emps.xmlファイルを入力ディレクトリにコピーし、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。
アクティビティをクリックしてアクティビティ詳細を表示します。
この使用例では、フラット構造のビジネス・プロセスでOracleファイル・アダプタを使用して、カンマ区切り値(CSV)ファイルのアドレス帳エントリを処理する方法について説明します。これらのエントリは、その後変換されて固定長フォーマットで別のファイルに書き込まれます。
この使用例には、次の項目が含まれます。
フラット構造のビジネス・プロセスを実行するには、Adapters-101FileAdapterFlatStructure
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/input/address-csv.txt
artifacts/schemas/address-csv.xsd
artifacts/schemas/address-fixedLength.xsd
artifacts/xsl/addr1Toaddr2.xsl
Adapters-101FileAdapterFlatStructure
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにSOA-FlatStructure
と入力して「OK」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」にFlatStructure
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPELFlatStructure
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図4-77に示すように、SOA-FlatStructureアプリケーションとFlatStructureプロジェクトが設計領域に表示されます。
address-csv.xsdファイルおよびaddress-fixedLength.xsdファイルをプロジェクトのスキーマ・ディレクトリにコピーします(このファイルの場所の詳細は、第4.5.2.1「前提条件」を参照)。
addr1Toaddr2.xslをプロジェクトのxslディレクトリにコピーします(このファイルの場所の詳細は、第4.5.2.1「前提条件」を参照)。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにFlatStructureIn
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「次へ」をクリックします。「操作」ページが表示されます。
「Read File」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
入力ディレクトリの物理パスを入力します。「処理済ファイルをアーカイブ」を選択します。
処理済ファイルのアーカイブ・ディレクトリの物理パスを入力します。
「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.txt
と入力して「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-csv.xsd
ファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-78に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xml
が表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにFlatStructureOut
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Write File」を選択して「次へ」をクリックします。「ファイル構成」ページが表示されます。
出力ディレクトリの物理パスを入力し、address_%SEQ%.data
を「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドに入力します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-fixedLength.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-fixedLength.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-79に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるFlatStructureIn内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のFlatStructureOut内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-80のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELFlatStructure」をダブルクリックします。「BPELFlatStructure.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにReceiveCSV
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「FlatStructureIn」を選択して「OK」をクリックします。
「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。図4-81に示すように、JDeveloperの「BPELFlatStructure.bpel」ページが表示されます。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにInvokeWrite
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「FlatStructureOut」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「OK」をクリックします。図4-82に示すように、JDeveloperの「BPELFlatStructure.bpel」ページが表示されます。
transformアクティビティの追加
「コンポーネント・パレット」から、transformアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
transformアクティビティをダブルクリックします。「Transform」ダイアログが表示されます。
「名前」フィールドにTransformPayload
と入力します。
「トランスフォーメーション」タブをクリックします。「Transform」ダイアログが表示されます。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「ソース変数」ボックスで「ReceiveCSV_Read_InputVariable」を選択し、「ソース・パート」ボックスで「body」を選択して「OK」をクリックします。ソースとパートが選択された状態で「Transform」ダイアログが表示されます。
「ターゲット変数」リストで「InvokeWrite_Write_InputVariable」を選択し、「ターゲット・パート」で「body」を選択します。
「マッパー・ファイル」フィールドの端にある「参照」ボタンをクリックし、プロジェクトのxslディレクトリからaddr1Toaddr2.xslファイルを選択します。
「OK」をクリックします。
「ファイル」、「すべて保存」を順番にクリックします。図4-83に示すように、「BPELFlatStructure.bpel」ページが表示されます。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
address-csv.txtファイルを入力ディレクトリにコピーし、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティ(invoke、receiveなど)をクリックしてアクティビティ詳細を表示します。
「ReceiveCSV」をクリックしてアクティビティ詳細を表示します。
この使用例では、メディエータがReadFile
というインバウンドOracleファイル・アダプタ・サービスを介して、ファイルシステムから顧客データをテキスト・ファイルとして受信します。ReadFile
アダプタ・サービスから、ReadFile_RS
というルーティング・サービスにメッセージが送信されます。ReadFile_RS
からアウトバウンド・アダプタ・サービスWriteFTP
にメッセージが送信されます。WriteFTP
サービスにより、メッセージが関連外部アプリケーションに配信されます。
この使用例には、次の項目が含まれます。
この例は、基本的なメディエータ・コンストラクト(サービスやルーティング・サービスなど)と、メディエータ・サービスを作成およびデプロイするJDeveloper環境を十分に理解していることを前提としています。
メディエータのフラット構造のビジネス・プロセスを実行するには、Adapters-101FileAdapterFlatStructure
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/schemas/address-csv.xsd
Adapters-101FileAdapterFlatStructure
サンプルを参照するには、Oracle SOA Sample Codeサイトにアクセスします。
使用例のアプリケーションとプロジェクトを作成するには、次の手順を実行します。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにFileFTP_RW
と入力して「次へ」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにFileRead_FTPWrite
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「汎用アプリケーションの作成 - SOA設定の設定」ページが表示されます。
「コンポジット・テンプレート」ボックスで「メディエータを使用するコンポジット」を選択します。
「終了」をクリックします。「メディエータの作成 - メディエータ・コンポーネント」ページが表示されます。
「名前」フィールドにFileRead_RS
と入力します。
「テンプレート」リストで「インタフェースを後で定義」を選択し、「OK」をクリックします。FileFTP_RW
アプリケーションとFileRead_FTPWrite
プロジェクトが設計領域に表示されます。
メッセージの構造を定義するXSDファイルをインポートするには、次の手順を実行します。
Schema
ディレクトリを作成し、このディレクトリにaddress-csv.xsd
ファイルをコピーします(このファイルの場所の詳細は、第4.5.3.1項「前提条件」を参照)。
「アプリケーション・ナビゲータ」で「FileRead_FTPWrite」を選択します。
「ファイル」メニューから「インポート」を選択します。「インポート」ダイアログが表示されます。
「インポートするものを選択」リストから「Webソース」を選択して「OK」をクリックします。「Webソース」ダイアログが表示されます。
「コピー元」フィールドの右側にある「参照」をクリックします。「ディレクトリの選択」ダイアログが表示されます。
「スキーマ」ディレクトリにナビゲートして「選択」をクリックします。ディレクトリが選択された状態で「Webソース」ダイアログが表示されます。
「OK」をクリックします。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から設計領域へ「ファイル・アダプタ」サービスをドラッグします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにReadFile
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「次へ」をクリックします。「操作」ページが表示されます。
「Read File」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
「物理パス」オプションを選択し、「参照」をクリックしてポーリング・ディレクトリを選択します。
「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.txt
と入力して「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端にある「スキーマ・ファイルを参照」ボタンをクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番に選択します。
「OK」をクリックします。
「メッセージ」ページで「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。ReadFileアダプタ・サービスが作成されます。
ファイルをFTPサーバーに書き込むアウトバウンドのOracle FTPアダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から設計領域へ「FTPアダプタ」サービスをドラッグします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにWriteFTP
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「FTPサーバー接続」ページが表示されます。
「FTPサーバーのJNDI名」フィールドでFTPサーバーのJNDI名を指定して「次へ」をクリックします。「操作」ページが表示されます。
ファイル・タイプとして「ASCII」オプションを選択します。
操作タイプとして「Put File」オプションを選択して「次へ」をクリックします。「ファイル構成」ページが表示されます。
「発信ファイルのディレクトリ(物理パス)」フィールドで、ファイルの書込み先ディレクトリを指定します。
「ファイル・ネーミング規則」フィールドで、出力ファイル名のネーミング規則を指定します。たとえば、po_%SEQ%.txt
を指定します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端にある「スキーマ・ファイルを参照」ボタンをクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番に選択します。
「OK」をクリックします。
「メッセージ」ページで「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。WriteFTPアダプタ・サービスが作成されます。
作成した3つのコンポーネント(インバウンドOracleファイル・アダプタ・サービス、メディエータ・コンポーネント、アウトバウンドOracle FTPアダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるReadFile内の小さい三角形を、「コンポーネント」領域のメディエータ・コンポーネント内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるメディエータ・コンポーネント内の小さい三角形を、「外部参照」領域のWriteFTP内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。JDeveloperのcomposite.xmlが図4-84のように表示されます。
ルーティング・サービスを作成するには、次の手順を実行します。
「ReadFile_RS」ルーティング・サービスをダブルクリックします。図4-85に示すように、「操作」ペインに「Read」操作が表示されます。
「<<フィルタ式>>」の左にある「+」記号をクリックし、ルーティング・ルールを開きます。
「次を使用して変換」フィールドの端に表示されるアイコンをクリックします。図4-86に示すように、「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択して「OK」をクリックします。
JDeveloperに「Root-Element_To_Root-Element.xsl」タブが追加されます。このタブを使用すると、ファイル・データ構造を正規のデータ構造に変換するためのドキュメント・トランスフォーメーション・ファイルをグラフィカルに作成できます。
「imp1:Address」ソース要素を「imp1:Address」ターゲット要素にドラッグ・アンド・ドロップします。「自動マップ・プリファレンス」ダイアログが表示されます。
「自動マップ中」オプションから、「祖先名を考慮した要素の一致」の選択を解除します。
「OK」をクリックします。
「ファイル」メニューから「保存」を選択します。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
実行時に、テキスト・ファイルをポーリング・ディレクトリにコピーします。Oracleファイル・アダプタによりファイルが取得されると、設計時に指定したディレクトリに書き込まれます。
この使用例では、スケーラブルなDOMプロセスでストリーミング機能を使用して、大型ファイルをディレクトリ間でコピーまたは移動する方法を説明します。
ストリーミング・オプションは、DB2のハイドレーション・ストアではサポートされません。
この使用例には、次の項目が含まれます。
大きいペイロードのストリーミング・プロセスを実行するには、Adapters-103FileAdapterScalableDOM
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/schemas/address-csv.xsd
artifacts/input/address-csv-large.txt
Adapters-103FileAdapterScalableDOM
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにSOA-ScalableDOM
と入力して「次へ」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにScalableDOM
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。SOA-ScalableDOMアプリケーションとScalableDOMプロジェクトが「アプリケーション・ナビゲータ」に表示され、「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPELScalableDOM
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。SOA-ScalableDOMアプリケーションとScalableDOMプロジェクトが設計領域に表示されます。
address-csv.xsdファイルをプロジェクトのxsdディレクトリにコピーします(このファイルの場所の詳細は、第4.5.4.1「前提条件」を参照)。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにScalableDOMIn
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Read File」を選択し、「ファイル・ストリーミングを使用します」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
入力ディレクトリの物理パスを入力します。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.txt
と入力して「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの後に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図4-87に示すように、「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-csv.xsd
ファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-88に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xmlが表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにScalableDOMOut
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Write File」を選択して「次へ」をクリックします。「ファイル構成」ページが表示されます。
出力ディレクトリの物理パスを入力し、address-csv_%SEQ%.xml
を「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドに入力します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-csv.xsd
ファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-89に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるScalableDOMIn内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のScalableDOMOut内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-90のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELScalableDOM」をダブルクリックします。「BPELScalableDOM.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにReceiveFile
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図4-91に示すように、「ScalableDOMIn」を選択して「OK」をクリックします。
「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。JDeveloperの「composite.xml」ページが図4-92のように表示されます。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにWriteFile
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「ScalableDOMOut」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「入力変数」フィールドにデフォルトの変数名が移入されます。「Invoke」ダイアログが表示されます。
「OK」をクリックします。図4-93に示すように、JDeveloperの「BPELScalableDOM.bpel」ページが表示されます。
assignアクティビティの追加
「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「名前」フィールドにAssignPayload
と入力します。
「コピー操作」タブをクリックします。図4-94に示すように、「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図4-95に示すように、「From」および「To」ペインで「変数」を開きます。
「OK」をクリックします。図4-96に示すように、「Assign」ダイアログが表示されます。
「OK」をクリックします。図4-97に示すように、JDeveloperの「BPELScalableDOM.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
address-csv-large.txt
ファイルを入力ディレクトリにコピーし、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティをクリックしてアクティビティ詳細を表示します。
これは、whileループ内でinvokeアクティビティを使用してターゲット・ファイルを処理するOracleファイル・アダプタ機能です。この機能を使用すると、大きいファイルを適宜処理できます。
この使用例には、次の項目が含まれます。
Oracleファイル・アダプタのChunkReadを実行するには、Adapters-106FileAdapterChunkedRead
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/schemas/address-csv.xsd
artifacts/schemas/address-fixedLength.xsd
artifacts/xsl/addr1Toaddr2.xsl
artifacts/input/address-csv.txt
Adapters-106FileAdapterChunkedRead
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにSOA-ChunkedRead
と入力して「次へ」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにChunkedRead
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPELChunkedRead
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図4-98に示すように、SOA-ChunkedReadアプリケーションとChunkedReadプロジェクトが設計領域に表示されます。
address-csv.xsdファイルおよびaddress-fixedLength.xsdファイルをプロジェクトのxsdディレクトリにコピーします(これらのファイルの場所の詳細は、第4.5.5.1「前提条件」を参照)。
addr1Toaddr2.xslをプロジェクトのxslディレクトリにコピーします(これらのファイルの場所の詳細は、第4.5.5.1「前提条件」を参照)。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにFileInNoPayloadIn
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Read File」を選択し、「ファイルの内容を読み取らない」ボックスを選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
入力ディレクトリの物理パスを入力します。「ファイルを再帰的に処理します」を選択します。
「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.txt
と入力して「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-99に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xmlが表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにReadAddressChunk
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「同期Read File」を選択し、「操作名」フィールドにChunkedRead
と入力して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
出力ディレクトリの物理パスを入力し、「正常な取得後にファイルを削除」を選択します。
「次へ」をクリックします。「ファイル名」ページが表示されます。
「ファイル名」フィールドにdummy.txt
と入力します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-csv.xsd
ファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-100に示すように、アウトバウンドOracleファイル・アダプタが構成され、composite.xml
が表示されます。
メタデータを手動で編集して、チャンク読取り機能を組み込みます。
ReadAddressChunk_file.jca
ファイルを開き、メタデータを次のように変更します。
<?xml version="1.0" encoding="UTF-8"?> <adapter-config name="ReadAddressChunk" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" adapterRef=""/> <endpoint-interaction portType="ChunkedRead_ptt" operation="ChunkedRead"> <interaction-spec className="oracle.tip.adapter.file.outbound.ChunkedInteractionSpec"> <property name="PhysicalDirectory" value="/tmp/chunked/in"/> <property name="FileName" value="dummy.txt"/> <property name="ChunkSize" value="1"/> </interaction-spec> </endpoint-interaction> </adapter-config>
「ファイル」、「すべて保存」を順番にクリックします。
別のアウトバウンドOracleファイル・アダプタ・サービスの追加
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにAppendChunk
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Write File」を選択し、「操作名」フィールドにWrite
と入力して「次へ」をクリックします。「ファイル構成」ページが表示されます。
出力ディレクトリの物理パスを入力し、「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドにdummy.txt
と入力し、「既存のファイルに追加します」を選択します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-fixedLength.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-fixedLength.xsd
ファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-101に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、2つのアウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるFileInNoPayloadIn内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のReadAddressChunk内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。また、「外部参照」領域のAppendChunk内の緑の三角形にもドラッグします。
JDeveloperのcomposite.xml
が図4-102のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELChunkedRead」をダブルクリックします。「BPELChunkedRead.bpel」ページが表示されます。
(x)で表された「変数」アイコンをクリックします。「変数」ダイアログが表示されます。
「作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
図4-103に示すように、次の変数を作成します(これらは後で使用します)。
<variable name="dir" type="xsd:string"/> <variable name="file" type="xsd:string"/> <variable name="outIsEOF" type="xsd:string"/> <variable name="outLineNumber" type="xsd:string"/> <variable name="outColumnNumber" type="xsd:string"/> <variable name="returnIsEOF" type="xsd:string"/> <variable name="returnLineNumber" type="xsd:string"/> <variable name="returnColumnNumber" type="xsd:string"/> <variable name="returnIsMessageRejected" type="xsd:string"/> <variable name="returnRejectionReason" type="xsd:string"/> <variable name="returnNoDataFound" type="xsd:string"/>
注意: すべての変数は、タイプxsd:stringの単純型です。 |
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにReceiveFileDetails
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「FileInNoPayloadIn」を選択して「OK」をクリックします。
「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択します。
「プロパティ」タブをクリックします。プロパティおよび対応する値の列が表示されます。
jca.file.Directoryプロパティを選択します。対応する値の列をダブルクリックします。「アダプタ・プロパティ値」ダイアログが表示されます。
「変数の参照」アイコンをクリックします。「変数XPathビルダー」ダイアログが表示されます。
「変数」を開いて「dir」を選択し、「OK」をクリックします。jca.file.Directory
の値がdir
に設定されます。
jca.file.FileName
プロパティに対して同じ手順を繰り返し、値をfileに設定します。図4-104に示すように、「Receive」ダイアログが表示されます。
「OK」をクリックします。図4-105に示すように、JDeveloperの「BPELChunkedRead.bpel」ページが表示されます。
assignアクティビティの追加
「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティの後にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「名前」フィールドにAssignChunkedRead
と入力します。
「コピー操作」タブをクリックします。図4-94に示すように、「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図4-106に示すように、ヘッダーのデフォルト値を設定します。
「OK」をクリックします。図4-107に示すように、JDeveloperの「BPELChunkedRead.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域のassignアクティビティの下にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにInvokeReadAddress
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「ReadAddressChunk」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。入力変数が移入された状態で「Invoke」ダイアログが表示されます。
同じ手順を繰り返して出力変数を選択します。図4-108に示すように、「Invoke」ダイアログが表示されます。
「OK」をクリックします。図4-109に示すように、JDeveloperの「BPELChunkedRead.bpel」ページが表示されます。
「BPELChunkedRead.bpel」ページの「ソース」タブをクリックし、作成したinvokeアクティビティの次のプロパティを追加します。
<bpelx:inputProperty name="jca.file.Directory" variable="dir"/> <bpelx:inputProperty name="jca.file.FileName" variable="file"/> <bpelx:inputProperty name="jca.file.LineNumber" ="outLineNumber"/> <bpelx:inputProperty name="jca.file.ColumnNumber" variable="outColumnNumber"/> <bpelx:inputProperty name="jca.file.IsEOF" variable="outIsEOF"/> <bpelx:outputProperty name="jca.file.LineNumber" variable="returnLineNumber"/> <bpelx:outputProperty name="jca.file.ColumnNumber" variable="returnColumnNumber"/> <bpelx:outputProperty name="jca.file.IsEOF" variable="returnIsEOF"/> <bpelx:outputProperty name="jca.file.IsMessageRejected" variable="returnIsMessageRejected"/> <bpelx:outputProperty name="jca.file.RejectionReason" variable="returnRejectionReason"/> <bpelx:outputProperty name="jca.file.NoDataFound" variable="returnNoDataFound"/>
invokeアクティビティは次のようになります。
<invoke name="InvokeReadAddress" inputVariable="InvokeReadAddress_SynchRead_InputVariable" outputVariable="InvokeReadAddress_SynchRead_OutputVariable" partnerLink="ReadAddressChunk" portType="ns3:SynchRead_ptt" operation="SynchRead"> <bpelx:inputProperty name="jca.file.Directory" variable="dir"/> <bpelx:inputProperty name="jca.file.FileName" variable="file"/> <bpelx:inputProperty name="jca.file.LineNumber" variable="outLineNumber"/> <bpelx:inputProperty name="jca.file.ColumnNumber" variable="outColumnNumber"/> <bpelx:inputProperty name="jca.file.IsEOF" variable="outIsEOF"/> <bpelx:outputProperty name="jca.file.LineNumber" variable="returnLineNumber"/> <bpelx:outputProperty name="jca.file.ColumnNumber" variable="returnColumnNumber"/> <bpelx:outputProperty name="jca.file.IsEOF" variable="returnIsEOF"/> <bpelx:outputProperty name="jca.file.IsMessageRejected" variable="returnIsMessageRejected"/> <bpelx:outputProperty name="jca.file.RejectionReason" variable="returnRejectionReason"/> <bpelx:outputProperty name="jca.file.NoDataFound" variable="returnNoDataFound"/> </invoke>
「assignアクティビティの追加」に示したように、CopyHeaders
というassignアクティビティを追加し、invokeアクティビティからreturnパラメータをコピーします。図4-110に示すように、「Assign」ダイアログが表示されます。
「OK」をクリックします。図4-111に示すように、JDeveloperの「BPELChunkedRead.bpel」ページが表示されます。
switchアクティビティの追加
switchアクティビティを「CopyHeaders」assignアクティビティの下にドラッグ・アンド・ドロップします。
switchアクティビティ内の「<case>」をダブルクリックします。「Switch Case」ダイアログが表示されます。
「名前」フィールドにDATA FOUND
と入力し、「式」ボックスで「returnNoDataFound」式を選択します。図4-112に示すように、「Switch Case」ダイアログが表示されます。
invokeアクティビティをswitchアクティビティの「<Case DATA FOUND>」にドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにInvokeAppend
と入力します。
「パートナ・リンク」フィールドで「AppendChunk」を選択します。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。入力変数が移入された状態で「Invoke」ダイアログが表示されます。
図4-113に示すように、「プロパティ」タブをクリックしてファイル変数を選択します。
「OK」をクリックします。
transformアクティビティの追加
transformアクティビティを、「<case DATA FOUND>」セクション内のInvokeAppendアクティビティの直前にドラッグ・アンド・ドロップします。
transformアクティビティをダブルクリックします。
「名前」フィールドにTransformPayload
と入力します。
「トランスフォーメーション」タブをクリックします。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「InvokeReadAddress_SyncRead_InputVariable」を選択して「OK」をクリックします。
「ターゲット変数」リストで「InvokeAppend_Write_InputVariable」を選択します。
「マッパー・ファイル」フィールドの端にある「参照」をクリックし、addr1Toaddr2.xslファイルを選択します。
「OK」をクリックします。
emptyアクティビティをswitchアクティビティの「<otherwise>」セクションにドラッグ・アンド・ドロップします。図4-114に示すように、「BPELChunkedRead.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
address-csv.txt
ファイルをプロジェクトの入力ディレクトリにコピーし(このファイルの場所の詳細は、第4.5.5.1「前提条件」を参照)、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティをクリックしてアクティビティ詳細を表示します。
これは、ファイルシステムのソース・ディレクトリから宛先ディレクトリに大量のデータを添付ファイルとして不透明にコピーまたは移動するOracleファイル・アダプタ機能です。たとえば、大量のMS Word文書、イメージおよびPDFをコンポジット・アプリケーション内でコンテンツを処理せずに転送できます。添付ファイルとしてのファイル読取り機能は、「Read File」オプションが選択されている場合にのみ使用できます。
この使用例では、大きい*.doc
ファイルを添付ファイルとして処理するOracleファイル・アダプタの機能について説明します。添付ファイルとしてファイルを読み取るこの機能は、Opaque
変換によく似ています。ただし、GB規模の添付ファイルが可能であるかどうかはデータベースの制限によって異なります。
添付ファイルとしてのOracleファイル・アダプタのファイル読取りを実行するには、大きいMS Word文書(*.doc
ファイル)が必要です。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにAttachmentApp
と入力して「次へ」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにAttachment
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPELAttachment
と入力し、「テンプレート」リストから「サービスを後で定義」を選択します。
「OK」をクリックします。図4-115に示すように、AttachmentApp
アプリケーションとAttachment
プロジェクトが設計領域に表示されます。
ローカル・ディレクトリから大きいファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにAttachmentIn
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
図4-116に示すように、「操作タイプ」に「Read File」を選択し、「ファイルを添付ファイルとして読取り」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
注意: 「キャラクタ・セット」、「エンコーディング」および「コンテンツ・タイプ」の各フィールドは無視してください。この添付ファイルの読取りを必要とするサード・パーティのアプリケーションを使用している場合にのみ、これらのフィールドに値を移入します。この使用例の添付ファイルは、最終的にアウトバウンドOracleファイル・アダプタによって使用されるため、これらの値は必要としません。 |
図4-55に示すように、入力ディレクトリの物理パスを入力して「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
図4-56に示すように、「インクルード・ファイルの名前パターン」フィールドに*.doc
と入力します。
「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-117に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xmlが表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにAttachmentOut
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Write File」を選択して「次へ」をクリックします。「ファイル構成」ページが表示されます。
図4-60に示すように、出力ディレクトリの物理パスを入力し、attachment_%SEQ%.doc
を「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドに入力します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
図4-118に示すように、「プロジェクトのWSDLファイル」→「AttachmentIn.wsdl」→「インライン・スキーマ」→「attachmentElement」の順にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにAttachmentIn.wsdlが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-119に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるAttachmentIn内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のAttachmentOut内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-120のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELAttachment」をダブルクリックします。「BPELAttachment.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにReceiveInput
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図4-121に示すように、「AttachmentIn」を選択して「OK」をクリックします。
図4-122に示すように、「Receive」ダイアログで「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。図4-123に示すように、JDeveloperの「BPELAttachment.bpel」ページが表示されます。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにWrite_Attachment
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
図4-124に示すように、「AttachmentOut」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。図4-125に示すように、「Invoke」ダイアログが表示されます。
「OK」をクリックします。図4-126に示すように、JDeveloperの「BPELAttachment.bpel」ページが表示されます。
assignアクティビティの追加
「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「名前」フィールドにAssignReference
と入力します。
「コピー操作」タブをクリックします。図4-127に示すように、「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図4-128に示すように、「From」および「To」ペインで「変数」を開きます。
注意: 要素への参照によって定義された変数の場合は、ソースとターゲットの両方が同じ要素であることが必要です。 |
「OK」をクリックします。図4-129に示すように、「Assign」ダイアログが表示されます。
「OK」をクリックします。図4-130に示すように、JDeveloperの「BPELAttachment.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
attachment.doc
ファイルをプロジェクトの入力ディレクトリにコピーし(詳細は、第4.5.6.1「前提条件」を参照)、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティをクリックしてアクティビティ詳細を表示します。
これは、invokeアクティビティを使用してターゲット・ディレクトリからファイルのリストを取得するOracleファイル・アダプタ機能です。このファイルのリストはXML文書として返され、ファイル名、ディレクトリ名、ファイル・サイズ、最終変更時間などの情報が記載されています。
この使用例には、次の項目が含まれます。
Oracleファイル・アダプタによるリスト表示を実行するには、*.txt
ファイルが必要です。*.txt
ファイルの作成および保存は、ターゲット・ディレクトリで行う必要があります。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにFileListingApp
と入力して「次へ」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにFileListing
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPELFileListing
と入力し、「テンプレート」ボックスから「一方向BPELプロセス」を選択します。
「OK」をクリックします。図4-131に示すように、FileListingAppアプリケーションとFileListingプロジェクトが設計領域に表示されます。
ターゲット・ディレクトリのファイルのリストを表示するアウトバウンドOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにListFiles
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「List Files」を選択し、「操作名」フィールドにFileListing
と入力して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
図4-55に示すように、入力ディレクトリの物理パスを入力します。
「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.txt
と入力します。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-132に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
作成した2つのコンポーネント(BPELプロセスおよびアウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のListFiles内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-133のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
文字列変数の作成
「BPELFileListing」をダブルクリックします。「BPELFileListing.bpel」ページが表示されます。
(x)で表された「変数」アイコンをクリックします。「変数」ダイアログが表示されます。
「作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
図4-134に示すように、タイプがxsd:string
の変数MyDir
を作成します(これは後で使用します)。
「OK」をクリックします。図4-135に示すように、JDeveloperの「BPELFileListing.bpel」ページが表示されます。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域のreceiveアクティビティの下にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにInvokeListFiles
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「ListFiles」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。入力変数が移入された状態で「Invoke」ダイアログが表示されます。
同じ手順を繰り返して出力変数を選択します。図4-136に示すように、「Invoke」ダイアログが表示されます。
「プロパティ」タブをクリックします。プロパティおよび対応する値の列が表示されます。
jca.file.Directoryプロパティを選択します。対応する値の列をダブルクリックします。「アダプタ・プロパティ値」ダイアログが表示されます。
「変数の参照」アイコンをクリックします。「変数XPathビルダー」ダイアログが表示されます。
「変数」を開いて「MyDir」を選択し、「OK」をクリックします。jca.file.Directory
の値がMydir
に設定されます。
「OK」をクリックします。図4-137に示すように、JDeveloperの「BPELFileListing.bpel」ページが表示されます。
assignアクティビティの追加
「コンポーネント・パレット」から、assignアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「名前」フィールドにAssignDirName
と入力します。
「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図4-138に示すように、ヘッダーの値を設定します。
「OK」をクリックします。図4-139に示すように、JDeveloperの「BPELFileListing.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
*.txt
ファイルをプロジェクトの入力ディレクトリにコピーし(詳細は、第4.5.7.1「前提条件」を参照)、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティをクリックしてアクティビティ詳細を表示します。
この使用例では、カスタム・フォーマットで定義されたネイティブ・データを処理するOracleファイル・アダプタ機能について説明します。このサンプルでは、カスタム・フォーマットはinvoice-nxsd.xsd
に定義されている請求書を表します。Oracleファイル・アダプタでは、invoice.txt
ファイルを処理してComplexStructure BPELプロセスにパブリッシュします。その後、PurchaseOrderに変換されてxmlファイルとして書き出されます。
この使用例には、次の項目が含まれます。
複雑な構造のビジネス・プロセスを実行するには、Adapters-104FileAdapterComplexStructure
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/schemas/invoice-nxsd.xsd
artifacts/schemas/po.xsd
artifacts/xsl/InvToPo.xsl
artifacts/input/invoice.txt
Adapters-104FileAdapterComplexStructure
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにSOA-ComplexStructure
と入力して「次へ」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにComplexStructure
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPEComplexStructure
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図4-140に示すように、SOA-ComplexStructureアプリケーションとComplexStructureプロジェクトが設計領域に表示されます。
invoice-nxsd.xsdファイルおよびpo.xsdファイルをプロジェクトのスキーマ・ディレクトリにコピーします(これらのファイルの場所の詳細は、第4.5.8.1「前提条件」を参照)。
InvToPo.xslをプロジェクトのxslディレクトリにコピーします(このファイルの場所の詳細は、第4.5.8.1「前提条件」を参照)。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにComplex Structure In
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Read File」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
入力ディレクトリの物理パスを入力して「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.txt
と入力して「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「invoice-nxsd.xsd」および「invoice」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにinvoice-nxsd.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-141に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xmlが表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「Oracleファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにComplexStructureOut
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Write File」を選択して「次へ」をクリックします。「ファイル構成」ページが表示されます。
出力ディレクトリの物理パスを入力し、「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドにinvoice_%SEQ%.txt
と入力します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「po.xsd」および「po」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにpo.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-142に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるComplexStructureInサービス内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のComplexStructureOut参照内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-143のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELComplexStructure」をダブルクリックします。「BPELComplexStructure.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにReceiveInvoice
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「ComplexStructureIn」を選択して「OK」をクリックします。
「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。JDeveloperの「BPELComplexStructure.bpel」ページが表示されます。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにInvokeWrite
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「ComplexStructureOut」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
「変数名」フィールドにInvokeWrite_Write_OutputVariable
と入力し、「OK」をクリックします。「Invoke」ダイアログが表示されます。
「OK」をクリックします。JDeveloperの「BPELComplexStructure.bpel」ページが表示されます。
transformアクティビティの追加
「コンポーネント・パレット」から、transformアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
transformアクティビティをダブルクリックします。「Transform」ダイアログが表示されます。
「名前」フィールドにTransformPayload
と入力します。
「トランスフォーメーション」タブをクリックします。「Transform」ダイアログが表示されます。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「ソース変数」ボックスで「ReceiveInvoice_Read_InputVariable」を選択し、「ソース・パート」ボックスで「body」を選択して「OK」をクリックします。ソースとパートが選択された状態で「Transform」ダイアログが表示されます。
「ターゲット変数」リストで「InvokeWrite_Write_OutputVariable」を選択し、「ターゲット・パート」で「body」を選択します。
「マッパー・ファイル」フィールドの端にある「マッピングの参照」アイコンをクリックし、プロジェクトのxslディレクトリからInvToPo.xslファイルを選択します。
「OK」をクリックします。
「ファイル」、「すべて保存」を順番にクリックします。図4-144に示すように、「BPELComplexStructure.bpel」ページが表示されます。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
invoice.txt
ファイルをプロジェクトの入力ディレクトリにコピーし(このファイルの場所の詳細は、第4.5.8.1「前提条件」を参照)、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。
「ReceiveInvoice」をクリックしてアクティビティ詳細を表示します。
これは、大きいXML文書を小さい個別のXMLフラグメントにデバッチするOracle FTPアダプタの機能です。この使用例では、ビジネス・プロセス・サンプルのデバッチ処理でOracle FTPアダプタを使用して、1つ以上の請求書や発注などのビジネス・レコードのバッチを含むファイルを処理する方法について説明します。これにより、発注(PO)がデバッチされて個別の出力ファイルに書き込まれます。
この使用例には、次の項目が含まれます。
複雑な構造のビジネス・プロセスを実行するには、Adapters-101FTPAdapterDebatching
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/schemas/container.xsd
artifacts/schemas/po.xsd
artifacts/xsl/InvToPo.xsl
artifacts/xsl/PoToPo.xsl
artifacts/input/container.txt
Adapters-101FTPAdapterDebatching
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにSOA-FTPDebatching
と入力して「OK」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」にFTPDebatching
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPELFTPDebatching
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図4-145に示すように、SOA-FTPDebatchingアプリケーションとFTPDebatchingプロジェクトが設計領域に表示されます。
container.xsd
ファイルおよびpo.xsd
ファイルをプロジェクトのxsd
ディレクトリにコピーします(これらのファイルの場所の詳細は、第4.5.9.1「前提条件」を参照)。
InvToPo.xsl
ファイルおよびPoToPo.xsl
ファイルをプロジェクトのxslディレクトリにコピーします(これらのファイルの場所の詳細は、第4.5.9.1「前提条件」を参照)。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracle FTPアダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から「公開されたサービス」スイムレーンにOracle FTPアダプタをドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにFTPDebatchingIn
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。図4-146に示すように、「FTPサーバー接続」ページが表示されます。
注意: このアプリケーションをデプロイする前に、Oracle FTPアダプタのデプロイメント・ディスクリプタでjndi-nameが構成済であることを確認してください。 |
「次へ」をクリックします。「操作」ページが表示されます。
図4-147に示すように、「Get File」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
入力ディレクトリの物理パスを入力して「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.txt
と入力し、「ファイルが複数のメッセージを含む」チェック・ボックスを選択し、「バッチでメッセージをパブリッシュする数」ボックスの値として1
を指定します。
「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「container.xsd」および「container」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにcontainer.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-148に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xmlが表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンドのOracle FTPアダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「FTPアダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにPurchaseOrderOut
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「FTPサーバー接続」ページが表示されます。
「次へ」をクリックします。「操作」ページが表示されます。
「Put File」を選択して「次へ」をクリックします。「ファイル構成」ページが表示されます。
出力ディレクトリの物理パスを入力し、「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドにpo_%SEQ%.txt
と入力します。
選択されていない場合は、「メッセージ数の到達」オプションを選択します。デフォルト値は1
です。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「po.xsd」および「po」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにpo.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-149に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、アウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるFTPDebatchingInサービス内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のPurchaseOrderOut参照内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-150のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELFTPDebatching」をダブルクリックします。「BPELFTPDebatching.bpel」
ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにReceive
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「FTPDebatchingIn」を選択して「OK」をクリックします。
「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。JDeveloperの「BPELFTPDebatching.bpel」
ページが表示されており、receiveアクティビティが追加されています。
invokeアクティビティの追加
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにWrite
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「PurchaseOrderOut」を選択して「OK」をクリックします。
「Receive」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
「変数」フィールドにWrite_Put_OutputVariable
と入力し、「OK」をクリックします。「Invoke」ダイアログが表示されます。
「OK」をクリックします。JDeveloperの「BPELFTPDebatching.bpel」
ページが表示されており、invokeアクティビティが追加されています。
switchアクティビティの追加
「コンポーネント・パレット」から、switchアクティビティを設計領域のreceiveアクティビティとinvokeアクティビティの間にドラッグ・アンド・ドロップします。
switchアクティビティを開きます。これにより、<case>および<otherwise>の値を入力するための画面が表示されます。
図4-151に示すように、「<case>
」セクションで「条件式の表示」アイコンをクリックします。「条件式」ポップアップ・ウィンドウが表示されます。
ポップアップ・ウィンドウ内で「XPath式ビルダー」アイコンをクリックします。「式ビルダー」ダイアログが表示されます。
図4-152に示すように、式としてstarts-with(local-name(ora:getNodes('receive_Get_InputVariable','body','/ns3:container/child::*[position()=1]')),'invoice')
を入力し、「OK」をクリックします。画面が「条件式」ポップアップ・ウィンドウに戻ります。
「<case>」セクションと「<otherwise>」セクションに1つずつ、2つのトランスフォーメーション・アクティビティを追加します。
transformアクティビティを「<case>」セクションにドラッグ・アンド・ドロップします。
transformアクティビティをダブルクリックします。
「名前」フィールドにInvToPo
と入力します。
「トランスフォーメーション」タブをクリックします。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
デフォルトを受け入れて「OK」をクリックします。
「ターゲット変数」リスト「Write_Put_OutputVariable」を選択します。
「マッパー・ファイル」フィールドの端にある「マッピングの参照」アイコンをクリックし、「InvToPo.xsl」ファイルを選択します。
「OK」をクリックします。
同じプロセスを第2のトランスフォーメーションについて繰り返します。このtransformアクティビティの場合は、マッパー・ファイルとしてPoToPo.xsl
を選択します。
図4-153に示すように、「BPELFTPDebatching.bpel」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
container.txt
ファイルをプロジェクトの入力ディレクトリにコピーし(このファイルの場所の詳細は、第4.5.9.1「前提条件」を参照)、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。また、アクティビティ(invoke、receiveなど)をクリックしてアクティビティ詳細を表示します。
この使用例では、invokeアクティビティを使用してプロセス途中の同期読取り操作を実行するOracle FTPアダプタの機能について説明します。この使用例で説明するアダプタ機能は、次のとおりです。
Oracleファイル・アダプタ(読取り操作)
Oracle FTPアダプタ(同期読取り操作)
実行時に読取り対象のファイル名を指定する機能
Oracleファイル・アダプタ(書込み操作)
このプロセスは、インバウンドOracleファイル・アダプタによる監視対象のローカル・ディレクトリにトリガー・ファイルが存在することで開始されます。トリガー・ファイルには、同期読取り操作で読み取られるファイルの名前が含まれています。このファイル名は、ヘッダーを介してアダプタに渡されます。ファイル名は、invokeアクティビティの「プロパティ」タブを使用して渡すことができます。この同期読取り操作は、FTPサーバー上のリモート・ディレクトリに対して実行されます。読取り結果は変換され、アウトバウンドOracleファイル・アダプタを介してローカル・ディレクトリに書き出されます。この項には、次の項目が含まれます。
FTPの動的同期読取りを実行するには、Adapters-102FTPAdapterDynamicSynchronousRead
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/schemas/address-csv.xsd
artifacts/schemas/address-fixedLength.xsd
artifacts/schemas/trigger.xsd
artifacts/xsl/addr1Toaddr2.xsl
artifacts/input/address_csv.txt
artifacts/input/trigger.trg
Adapters-102FTPAdapterDynamicSynchronousRead
サンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスし、「Adapters」タブを選択します。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。使用例のアプリケーションとプロジェクトを作成する手順は、次のとおりです。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにSOA-FTPDynamicSynchronousRead
と入力して「OK」をクリックします。「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」にFTPDynamicSynchronousRead
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。「SOA設定の設定」ダイアログが表示されます。
「コンポジット・テンプレート」ボックスで「BPELを使用するコンポジット」を選択して「終了」をクリックします。「BPELプロセスの作成 - BPELプロセス」ページが表示されます。
「名前」フィールドにBPELDynamicSynchronousRead
と入力し、「テンプレート」ボックスから「サービスを後で定義」を選択します。
「OK」をクリックします。図4-154に示すように、SOA-FTPDynamicSynchronousReadアプリケーションとFTPDynamicSynchronousReadプロジェクトが設計領域に表示されます。
address-csv.xsd
ファイル、address-fixedLength.xsd
ファイルおよびtrigger.xsd
ファイルをプロジェクトのxsdディレクトリにコピーします(これらのファイルの場所の詳細は、第4.5.10.1「前提条件」を参照)。
addr1Toaddr2.xsl
ファイルをプロジェクトのxslディレクトリにコピーします(このファイルの場所の詳細は、第4.5.10.1「前提条件」を参照)。
ローカル・ディレクトリからファイルを読み取るインバウンドのOracleファイル・アダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにReadTrigger
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Read File」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
入力ディレクトリの物理パスを入力して「次へ」をクリックします。「ファイルのフィルタ処理」ページが表示されます。
「インクルード・ファイルの名前パターン」フィールドに*.trg
と入力して「次へ」をクリックします。「ファイル・ポーリング」ページが表示されます。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「trigger.xsd」および「trigger」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにtrigger.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-155に示すように、インバウンドOracleファイル・アダプタが構成され、composite.xmlが表示されます。
ローカル・ディレクトリからFTPサーバーにファイルを書き込むアウトバウンドのOracle FTPアダプタ・サービスを作成するには、次の手順を実行します。
「コンポーネント・パレット」から、「FTPアダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにSyncRead
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「FTPサーバー接続」ページが表示されます。
「次へ」をクリックします。「操作」ページが表示されます。
「同期Get File」を選択して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
出力ディレクトリの物理パスを入力します。
「次へ」をクリックします。「ファイル名」ページが表示されます。
「ファイル名」フィールドにdummy.txt
と入力して「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-csv.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-csv.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-156に示すように、アウトバウンドのOracle FTPアダプタが構成され、composite.xmlが表示されます。
アウトバウンドOracleファイル・アダプタ・サービスの追加
「コンポーネント・パレット」から、「Oracleファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにWriteFile
と入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「Write File」を選択し、「操作名」フィールドにWrite
と入力して「次へ」をクリックします。「ファイル構成」ページが表示されます。
出力ディレクトリの物理パスを入力し、「ファイル・ネーミング規則(po_%SEQ%.txt)」フィールドにaddress_%SEQ%.txt
と入力します。
「次へ」をクリックします。「メッセージ」ページが表示されます。
「URL」フィールドの端に表示される「スキーマ・ファイルを参照」をクリックします。「タイプ・チューザ」ダイアログが表示されます。
「プロジェクトのスキーマ・ファイル」、「address-fixedLength.xsd」および「Root-Element」を順番にクリックします。
「OK」をクリックします。「メッセージ」ページの「URL」フィールドにaddress-fixedLength.xsdファイルが移入されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。図4-157に示すように、アウトバウンドのOracleファイル・アダプタが構成され、composite.xmlが表示されます。
作成した4つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセス、2つのアウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるReadTrigger内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のSyncRead内に緑の三角形として表示されるドロップ・ゾーンとWriteFile内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図4-158のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「BPELDynamicSynchronousRead」をダブルクリックします。「BPELDynamicSynchronousRead.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにReceiveTrigger
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「ReadTrigger」を選択して「OK」をクリックします。
「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。JDeveloperの「BPELDynamicSynchronousRead.bpel」ページが表示されます。
変数の作成とinvokeアクティビティの追加
(x)で表された「変数」アイコンをクリックします。「変数」ダイアログが表示されます。
「作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
図4-159に示すように、xsd:stringタイプのfileという変数を作成します。
「OK」をクリックして「BPELDynamicSynchronousRead.bpel」ページに戻ります。
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにInvoke_SyncRead
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「SyncRead」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「入力変数」フィールドにデフォルトの変数名が移入されます。
同じ手順を「出力変数」フィールドに対して繰り返します。
「プロパティ」タブをクリックします。プロパティおよび対応する値の列が表示されます。
jca.ftp.FileName
プロパティを選択します。対応する値の列をダブルクリックします。「アダプタ・プロパティ値」ダイアログが表示されます。
「変数の参照」アイコンをクリックします。「変数XPathビルダー」ダイアログが表示されます。
「変数」を開いて「file」を選択し、「OK」をクリックします。jca.ftp.FileName
の値がfile
に設定されます。
「OK」をクリックします。JDeveloperの「BPELDynamicSynchronousRead.bpel」ページが表示されます。
別のinvokeアクティビティの追加
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにInvokeWrite
と入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「WriteFile」を選択して「OK」をクリックします。
「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「OK」をクリックします。次に示すように、JDeveloperの「BPELDynamicSynchronousRead.bpel」ページが表示されます。
図4-160 JDeveloper - 「BPELDynamicSynchronousRead.bpel」ページ
assignアクティビティの追加
「コンポーネント・パレット」から、assignアクティビティを設計領域のReceiveTriggerアクティビティとInvoke_SyncReadアクティビティの間にドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「名前」フィールドにAssignFileName
と入力します。
「コピー操作」タブをクリックします。「Assign」ダイアログが表示されます。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図4-161に示すように、トリガーfileNameとfile変数の間にコピー操作を作成します。
「コピー操作の作成」ダイアログで「OK」をクリックします。
図4-162に示すように、「OK」をクリックしてJDeveloperの「BPELDynamicSynchronousRead.bpel」ページに戻ります。
図4-162 JDeveloper - BPELDynamicSynchronousRead.bpel
「ファイル」、「すべて保存」を順番にクリックします。
transformアクティビティの追加
「コンポーネント・パレット」から、transformアクティビティを設計領域のInvoke_SyncReadアクティビティとInvokeWriteアクティビティの間にドラッグ・アンド・ドロップします。
transformアクティビティをダブルクリックします。「Transform」ダイアログが表示されます。
「名前」フィールドにTransformPayload
と入力します。
「トランスフォーメーション」タブをクリックします。「Transform」ダイアログが表示されます。
「作成」アイコンをクリックします。「ソース変数」ダイアログが表示されます。
「ソース変数」ボックスで「InvokeSyncRead_SyncRead_OutputVariable」を選択し、「ソース・パート」ボックスで「body」を選択して「OK」をクリックします。ソースとパートが選択された状態で「Transform」ダイアログが表示されます。
「ターゲット変数」リストで「InvokeWrite_Write_InputVariable」を選択し、「ターゲット・パート」で「body」を選択します。
「マッパー・ファイル」フィールドの端にある「マッピングの参照」アイコンをクリックし、プロジェクトのxslディレクトリからaddr1Toaddr2.xsl
ファイルを選択します。
「OK」をクリックします。
「ファイル」、「すべて保存」を順番にクリックします。図4-163に示すように、「BPELDynamicSynchronousRead.bpel」ページが表示されます。
図4-163 JDeveloper - BPELDynamicSynchronousRead.bpel
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次の手順を実行する必要があります。
アプリケーション・サーバー接続を作成します。詳細は、第2.6項「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
アプリケーションをデプロイします。詳細は、第2.7項「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
Fusion Middleware Controlコンソールを使用して、デプロイ済のSOAコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
address-csv.txt
ファイルをプロジェクトの入力ディレクトリにコピーし(このファイルの場所の詳細は、第4.5.10.1「前提条件」を参照)、処理済であることを確認します。出力ディレクトリを調べて、出力ファイルが作成されていることを確認します。
デプロイしたSOAコンポジットをクリックします。「ダッシュボード」が表示されます。
「最新のインスタンス」領域で「インスタンスID」の値をメモします。
「インスタンス」タブをクリックします。SOAコンポジットのインスタンスIDがリスト表示されます。
ステップ3でメモしたインスタンスIDをクリックします。「フローのトレース」ページが表示されます。
BPELプロセス・インスタンスをクリックします。BPELプロセス・インスタンスの「監査証跡」が表示されます。
ペイロード・ノードを開いてペイロード詳細を確認します。
プロセス・フローを表示するには、「フロー」タブをクリックします。
「ReceiveTrigger」をクリックしてアクティビティ詳細を表示します。
Oracleファイル/FTPアダプタを使用すると、ある場所から別の場所にファイルをコピーまたは移動したり、ターゲット・ディレクトリからファイルを削除できます。さらに、Oracle FTPアダプタでは、ローカル・ファイルシステムとリモート・ファイルシステムの間でファイルをコピーまたは移動できます。この機能は、アウトバウンド・サービスの相互作用仕様として実装されます。そのため、BPELのinvokeアクティビティまたはメディエータのルーティング・ルールを使用してこの機能にアクセスできます。
高レベルでは、アウトバウンド・サービスを作成して、ソース・ディレクトリおよびターゲット・ディレクトリとファイル名を使用してこのサービスを構成する必要があります。
次の使用例では、アウトバウンド・サービスを使用してファイルをコピー、移動および削除できる、Oracleファイル/FTPアダプタがサポートする新機能について説明します。
第4.5.11.6項「ファイルシステムのローカル・ディレクトリからFTPサーバーのリモート・ディレクトリへのファイルの移動」
第4.5.11.7項「FTPサーバーのリモート・ディレクトリからファイルシステムのローカル・ディレクトリへのファイルの移動」
ウィザードで実行できるのはこの手順の一部のみです。これは、該当するアダプタ構成ウィザードが使用可能でないためです。生成したJCAファイルを手動で構成することにより、残りの手順を完了してください。
ファイルシステムのローカル・ディレクトリから別のローカル・ディレクトリにファイルを移動するには、次の手順を実行します。
空のBPELプロセスを作成します。
「コンポーネント・パレット」から、「ファイル・アダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにサービス名を入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「操作およびスキーマから定義(後で指定)」を選択して「次へ」をクリックします。「操作」ページが表示されます。
「同期Read File」を選択し、「操作名」フィールドにFileMove
と入力して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
注意: 同期Read Fileを選択したのは、この操作の結果として生成される |
着信ファイル用のディレクトリのダミー物理パスを入力し、「次へ」をクリックします。「ファイル名」ページが表示されます。
注意: このダミー・ディレクトリは使用されません。以降の手順でこのディレクトリを手動で変更する必要があります。 |
ダミー・ファイル名を入力し、「次へ」をクリックします。「メッセージ」ページが表示されます。
注意: 入力したダミー・ファイル名は使用されません。以降の手順でこのファイル名を手動で変更する必要があります。 |
「ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする)」を選択し、「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。これで、アウトバウンドOracleファイル・アダプタが構成されます。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のFileMove
内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。BPELコンポーネントがOracleファイル・アダプタのアウトバウンド・サービスに接続されます。
デフォルト設定を選択して、先ほど作成したFileMove
サービスのinvokeアクティビティを作成します。
次の手順では、生成したWSDL
ファイルをMoveFileService
サービス用に変更し、移動操作の新規の相互作用仕様で構成します。
次の例に示すように、FileMove_file.jca
ファイルを開いてエンドポイント相互作用を変更します。
JCAファイルは、ソース・ディレクトリおよびターゲット・ディレクトリとファイルの詳細を使用して構成する必要があります。ソース・ディレクトリおよびターゲット・ディレクトリとファイルの詳細は、JCAファイルでハードコードすることも、ヘッダー変数を使用して移入することもできます。この例では、ヘッダー変数が使用されています。
<adapter-config name="FileMove" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" adapterRef=""/> <endpoint-interaction portType="FileMove_ptt" operation="FileMove"> <interaction-spec className="oracle.tip.adapter.file.outbound.FileIoInteractionSpec"> <property name="SourcePhysicalDirectory" value="foo1"/> <property name="SourceFileName" value="bar1"/> <property name="TargetPhysicalDirectory" value="foo2"/> <property name="TargetFileName" value="bar2"/> <property name="Type" value="MOVE"/> </interaction-spec> </endpoint-interaction> </adapter-config>
注意:
|
次の手順を実行して、実際のディレクトリ名とファイル名をソース・ファイルとターゲット・ファイルのパラメータにマッピングします。
適切な名前を付けた4つの文字列変数を作成します。ソース・ディレクトリおよびターゲット・ディレクトリの詳細にこれらの変数を移入する必要があります。BPELソース・ビューに次のように表示されます。
<variables> <variable name="InvokeMoveOperation_FileMove_InputVariable" messageType="ns1:Empty_msg"/> <variable name="InvokeMoveOperation_FileMove_OutputVariable" messageType="ns1:FileMove_msg"/> <variable name="sourceDirectory" type="xsd:string"/> <variable name="sourceFileName" type="xsd:string"/> <variable name="targetDirectory" type="xsd:string"/> <variable name="targetFileName" type="xsd:string"/> </variables>
assignアクティビティを作成し、sourceDirectory
、sourceFileName
、targetDirectory
およびtargetFileName
変数に値を割り当てます。この割当て操作は、BPELソース・ビューに次の例のように表示されます。
<assign name="AssignFileDetails"> <copy> <from expression="'/home/alex'"/> <to variable="sourceDirectory"/> </copy> <copy> <from expression="'input.txt'"/> <to variable="sourceFileName"/> </copy> <copy> <from expression="'/home/alex'"/> <to variable="targetDirectory"/> </copy> <copy> <from expression="'output.txt'"/> <to variable="targetFileName"/> </copy> </assign>
この例では、/home/alex
から/home/alex
内のoutput.txt
にinput.txt
が移動されます。
注意: この例では、ソースおよびターゲットの詳細がハードコードされています。これらの詳細は、ランタイム・パラメータとして指定することもできます。 |
これらのパラメータをヘッダーとして起動操作に渡します。これらの変数値によってJCAファイルのパラメータがオーバーライドされます。
<invoke name="InvokeMoveOperation" inputVariable="InvokeMoveOperation_FileMove_InputVariable" outputVariable="InvokeMoveOperation_FileMove_OutputVariable" partnerLink="FileMove" portType="ns1:FileMove_ptt" operation="FileMove"> <bpelx:inputProperty name="jca.file.SourceDirectory" variable="sourceDirectory"/> <bpelx:inputProperty name="jca.file.SourceFileName" variable="sourceFileName"/> <bpelx:inputProperty name="jca.file.TargetDirectory" variable="targetDirectory"/> <bpelx:inputProperty name="jca.file.TargetFileName" variable="targetFileName"/> </invoke>
最後に、最初のreceiveまたはpickアクティビティを追加します。
ファイルシステムのローカル・ディレクトリから別のローカル・ディレクトリへのファイルの移動が完了しました。
ファイルシステムのローカル・ディレクトリから別のローカル・ディレクトリにファイルをコピーするには、次の手順を実行します。
第4.5.11.1項「ファイルシステムのローカル・ディレクトリから別のローカル・ディレクトリへのファイルの移動」のステップ1から12に従います。
次の例に示すように、第4.5.11.1項「ファイルシステムのローカル・ディレクトリから別のローカル・ディレクトリへのファイルの移動」のステップ14で、エンドポイント相互作用のTYPE
属性の値をMOVE
からCOPY
に変更します。
<adapter-config ...> <connection-factory .../> <endpoint-interaction ...> <interaction-spec className="oracle.tip.adapter.file.outbound.FileIoInteractionSpec"> <property .../> <property name="Type" value="COPY"/> </interaction-spec> </endpoint-interaction> </adapter-config>
ファイルを削除するには、TargetPhysicalDirectory
およびTargetFileName
パラメータが必要です。
注意: ローカル・ファイルシステム・ディレクトリからファイルを削除する場合、 |
ファイルdelete_me.txt
を/home/alex
ディレクトリから削除するには、次の手順を実行します。
第4.5.11.1項「ファイルシステムのローカル・ディレクトリから別のローカル・ディレクトリへのファイルの移動」のステップ1から12に従います。
次の例に示すように、第4.5.11.1項「ファイルシステムのローカル・ディレクトリから別のローカル・ディレクトリへのファイルの移動」のステップ14で、エンドポイント相互作用のTYPE
属性の値をDELETE
に変更します。
<adapter-config name="FileDelete" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" adapterRef=""/> <endpoint-interaction portType="FileDelete_ptt" operation="FileDelete"> <interaction-spec className="oracle.tip.adapter.file.outbound.FileIoInteractionSpec"> <property name="TargetPhysicalDirectory" value="/home/alex"/> <property name="TargetFileName" value="delete_me.txt"/> <property name="Type" value="DELETE"/> </interaction-spec> </endpoint-interaction> </adapter-config>
サイズが1GBの大きいCSVファイルをソース・ディレクトリで使用するシナリオを想定します。その場合は、次の手順を実行する必要があります。
CSVをXMLに変換します。
結果として生じたXMLをXSLを使用して変換します。
変換操作で生じたファイルを固定長ファイルに変換します。
この使用例は、BPELサンプル・ディレクトリのFlatStructure
サンプルと似ています。相違点は、1つのファイルI/O相互作用で3つの手順が発生することです。
注意: 3つの手順はすべて、1つのファイルI/O相互作用で発生します。これは、データ・ファイル内のすべてのレコードが同じタイプに属している場合にのみ該当します。 |
大きいCSVファイルを使用して前述のシナリオに記載された操作を実行するには、次の手順を実行します。
address-csv.xsd
ファイルとaddress-fixedLength.xsd
ファイルをFlatStructureサンプルからプロジェクトのxsd
ディレクトリにコピーします。
FlatStructureサンプルからプロジェクトのxsl
ディレクトリにaddr1Toaddr2.xsl
をコピーします。
次の例に示すように、ファイルI/O相互作用を構成します。高レベルでは、次の例に示すように、ソース・ディレクトリとターゲット・ディレクトリまたはファイルの詳細とともにソース・スキーマ、ターゲット・スキーマおよびXSLを相互作用仕様で指定する必要があります。
<adapter-config name="FileMove" adapter="File Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/FileAdapter" adapterRef=""/> <endpoint-interaction portType="FileMove_ptt" operation="FileMove"> <interaction-spec className="oracle.tip.adapter.file.outbound.FileIoInteractionSpec"> <property name="SourcePhysicalDirectory" value="foo1"/> <property name="SourceFileName" value="bar1"/> <property name="SourceSchema" value="xsd/address-csv.xsd"/> <property name="SourceSchemaRoot value="Root-Element"/> <property name="SourceType" value="native"/> <property name="TargetPhysicalDirectory" value="foo2"/> <property name="TargetFileName" value="bar2"/> <property name="TargetSchema" value="xsd/address-fixedLength.xsd"/> <property name="TargetSchemaRoot value="Root-Element"/> <property name="TargetType" value="native"/> <property name="Xsl value="xsl/addr1Toaddr2.xsl"/> <property name="Type" value="MOVE"/> </interaction-spec> </endpoint-interaction> </adapter-config>
次の追加のパラメータが指定されました。
SourceSchema
: ソース・スキーマの相対パス。
SourceSchemaRoot
: ソース・スキーマのルート要素。
SourceType
: データのタイプ。使用可能な他の値はXMLです。
TargetSchema
: ターゲット・スキーマの相対パス。
TargetSchemaRoot
: ターゲット・スキーマのルート要素。
TargetType
: データのタイプ。使用可能な他の値はXMLです。
Xsl
: XSLファイルの相対パス。
Oracle FTPアダプタのI/Oの使用例は、Oracleファイル・アダプタの使用例とよく似ています。ただし、注意が必要な微妙な相違点がいくつかあります。
この使用例では、同じディレクトリ内にファイルを移動しますが、これは、同じサーバー上での名前の変更操作に似ています。ほとんどのFTPサーバーは、FTPサーバーでのファイルの名前変更を行うRNFR
/RNTO
のFTPコマンドをサポートしています。
ただし、RNFR
/RNTO
コマンドをサポートしていない場合でも、バインディング・プロパティUseNativeRenameOperation
を使用すれば同じディレクトリ内にファイルを移動できます。デフォルトでは、このプロパティはTRUE
に設定されています。その場合は、Oracle FTPアダプタでネイティブのRNFR
/RNTO
コマンドが使用されます。ただし、このプロパティをFALSE
に設定すると、移動操作をエミュレートするためにGet
コマンドとPut
コマンド、さらにDelete
コマンドがOracle FTPアダプタで使用されます。
ウィザードで実行できるのはこの手順の一部のみです。これは、該当するアダプタ構成ウィザードが使用可能でないためです。生成したJCAファイルを手動で構成することにより、残りの手順を完了してください。
リモート・ディレクトリから同じFTPサーバーの別のリモート・ディレクトリにファイルを移動するには、次の手順を実行します。
空のBPELプロセスを作成します。
「コンポーネント・パレット」から、「FTPアダプタ」を「外部参照」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」フィールドにサービス名を入力します。
「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。
「次へ」をクリックします。「FTPサーバー接続」ページが表示されます。
FTPサーバーのJNDI名を入力して「次へ」をクリックします。「操作」ページが表示されます。
「同期Get File」を選択し、「操作名」フィールドにFTPMove
と入力して「次へ」をクリックします。「ファイル・ディレクトリ」ページが表示されます。
注意: 同期Get Fileを選択したのは、この操作の結果として生成される |
着信ファイル用のディレクトリのダミー物理パスを入力し、「次へ」をクリックします。「ファイル名」ページが表示されます。
注意: このダミー・ディレクトリは使用されません。以降の手順でこのディレクトリを手動で変更する必要があります。 |
ダミー・ファイル名を入力し、「次へ」をクリックします。「ファイル名」ページが表示されます。
注意: 入力したダミー・ファイル名は使用されません。以降の手順でこのファイル名を手動で変更する必要があります。 |
「次へ」をクリックします。「メッセージ」ページが表示されます。
「ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする)」を選択し、「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。これで、アウトバウンドOracleファイル・アダプタが構成されます。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のFTPMove
内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。BPELコンポーネントがOracle FTPアダプタのアウトバウンド・サービスに接続されます。
「ファイル」、「すべて保存」を順番にクリックします。
先ほど作成したFTPMove
サービスのinvokeアクティビティを作成します。
次の手順では、生成したWSDL
ファイルをFTPMove
サービス用に変更し、移動操作の新規の相互作用仕様で構成します。
次の例に示すように、FTPMove_ftp.jca
ファイルを開いてinteraction-spec
を変更します。
JCAファイルは、ソース・ディレクトリおよびターゲット・ディレクトリとファイルの詳細を使用して構成する必要があります。ソース・ディレクトリおよびターゲット・ディレクトリとファイルの詳細は、JCAファイルでハードコードすることも、ヘッダー変数を使用して移入することもできます。この例では、ヘッダー変数が使用されています。
<adapter-config name="FTPMove" adapter="Ftp Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/Ftp/FtpAdapter" adapterRef=""/> <endpoint-interaction portType="FTPMove_ptt" operation="FTPMove"> <interaction-spec className="oracle.tip.adapter.ftp.outbound.FTPIoInteractionSpec"> <property name="SourcePhysicalDirectory" value="foo1"/> <property name="SourceFileName" value="bar1"/> <property name="TargetPhysicalDirectory" value="foo2"/> <property name="TargetFileName" value="bar2"/> <property name="Type" value="MOVE"/> </interaction-spec> </endpoint-interaction> </adapter-config>
注意:
|
次の手順を実行して、実際のディレクトリ名とファイル名をソース・ファイルとターゲット・ファイルのパラメータにマッピングします。
適切な名前を付けた4つの文字列変数を作成します。ソース・ディレクトリおよびターゲット・ディレクトリの詳細にこれらの変数を移入する必要があります。BPELソース・ビューに次のように表示されます。
<variables> <variable name="InvokeMoveOperation_FileMove_InputVariable" messageType="ns1:Empty_msg"/> <variable name="InvokeMoveOperation_FileMove_OutputVariable" messageType="ns1:FileMove_msg"/> <variable name="sourceDirectory" type="xsd:string"/> <variable name="sourceFileName" type="xsd:string"/> <variable name="targetDirectory" type="xsd:string"/> <variable name="targetFileName" type="xsd:string"/> </variables>
assignアクティビティを作成し、sourceDirectory
、sourceFileName
、targetDirectory
およびtargetFileName
変数に値を割り当てます。この割当て操作は、BPELソース・ビューに次の例のように表示されます。
<assign name="AssignFTPFileDetails"> <copy> <from expression="'/home/ftp'"/> <to variable="sourceDirectory"/> </copy> <copy> <from expression="'input.txt'"/> <to variable="sourceFileName"/> </copy> <copy> <from expression="'/home/ftp/out'"/> <to variable="targetDirectory"/> </copy> <copy> <from expression="'output.txt'"/> <to variable="targetFileName"/> </copy> </assign>
この例では、input.txt
が/home/ftp
から/home/ftp/out
内のoutput.txt
に移動または名前変更されます。
注意: この例では、ソースおよびターゲットの詳細がハードコードされています。これらの詳細は、ランタイム・パラメータとして指定することもできます。 |
これらのパラメータをヘッダーとして起動操作に渡します。これらの変数値によってJCAファイルのパラメータがオーバーライドされます。
<invoke name="InvokeRenameService" inputVariable="InvokeRenameService_RenameFile_InputVariable" partnerLink="RenameFTPFile" portType="ns2:RenameFile_ptt" operation="RenameFile"> <bpelx:inputProperty name="jca.file.SourceDirectory" variable="returnDirectory"/> <bpelx:inputProperty name="jca.file.SourceFileName" variable="returnFile"/> <bpelx:inputProperty name="jca.file.TargetDirectory" variable="returnDirectory"/> <bpelx:inputProperty name="jca.file.TargetFileName" variable="targetFile"/> </invoke>
最後に、最初のreceiveまたはpickアクティビティを追加します。
リモート・ディレクトリから同じFTPサーバーの別のリモート・ディレクトリへのファイルの移動または名前変更が完了しました。
注意: FTPサーバーが <reference name="FTPMove" ui:wsdlLocation="FTPMove.wsdl"> <interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/ftp/SOAFtpIO/SOAFtpIO/FTPMove/#wsdl.interface(FTPMove_ptt)"/> <binding.jca config="FTPMove_ftp.jca"> <property name="UseNativeRenameOperation" type="xs:string" many="false" override="may">false</property> </binding.jca> </reference> |
この使用例の手順は第4.5.11.5項「あるリモート・ディレクトリから同じFTPサーバーの別のリモート・ディレクトリへのファイルの移動」の使用例と同じです。ただし、ソース・ディレクトリをローカルとして、ターゲット・ディレクトリをリモートとして構成する必要があります。
次の例に示すように、SourceIsRemote
およびTargetIsRemote
プロパティを使用して、ソース・ファイルおよびターゲット・ファイルをローカル・ファイルシステムまたはリモート・ファイルシステムのいずれに置くかを指定します。
<adapter-config name="FTPMove" adapter="Ftp Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/Ftp/FtpAdapter" adapterRef=""/> <endpoint-interaction portType="FTPMove_ptt" operation="FTPMove"> <interaction-spec className="oracle.tip.adapter.ftp.outbound.FTPIoInteractionSpec"> <property name="SourcePhysicalDirectory" value="foo1"/> <property name="SourceFileName" value="bar1"/> <property name="SourceIsRemote" value="false"/> <property name="TargetPhysicalDirectory" value="foo2"/> <property name="TargetFileName" value="bar2"/> <property name="Type" value="MOVE"/> </interaction-spec> </endpoint-interaction> </adapter-config>
注意: この例では、 |
この使用例の手順は第4.5.11.6項「ファイルシステムのローカル・ディレクトリからFTPサーバーのリモート・ディレクトリへのファイルの移動」の使用例と同じです。ただし、次の例に示すように、ソース・ディレクトリをリモートとして、ターゲット・ディレクトリをローカルとして構成する必要があります。
<adapter-config name="FTPMove" adapter="Ftp Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata"> <connection-factory location="eis/Ftp/FtpAdapter" adapterRef=""/> <endpoint-interaction portType="FTPMove_ptt" operation="FTPMove"> <interaction-spec className="oracle.tip.adapter.ftp.outbound.FTPIoInteractionSpec"> <property name="SourcePhysicalDirectory" value="foo1"/> <property name="SourceFileName" value="bar1"/> <property name="TargetPhysicalDirectory" value="foo2"/> <property name="TargetFileName" value="bar2"/> <property name="TargetIsRemote" value="false"/> <property name="Type" value="MOVE"/> </interaction-spec> </endpoint-interaction> </adapter-config>
注意: この例では、 |
あるFTPサーバーから別のFTPサーバーにファイルを移動するには、次の項に記載されている使用例を順に実行する必要があります。
第4.5.11.7項「FTPサーバーのリモート・ディレクトリからファイルシステムのローカル・ディレクトリへのファイルの移動」: ローカル・ディレクトリから別のFTPサーバーにファイルをアップロード
第4.5.11.6項「ファイルシステムのローカル・ディレクトリからFTPサーバーのリモート・ディレクトリへのファイルの移動」: FTPサーバーからローカル・ディレクトリにファイルをダウンロード
デフォルトでは、テクノロジ・アダプタを使用すると、JDeveloperアダプタ・ウィザードによって非同期WSDLが生成されます。通常、11gでアダプタ・シナリオを作成する場合は、次の手順に従います。
「BPELを使用するコンポジット」または「空のコンポジット」を選択して、SOAアプリケーションを作成します。「空のコンポジット」を選択した場合は、「BPELプロセス」を「サービス・コンポーネント」ペインから「SOAコンポジット・エディタ」上にドロップする必要があります。
次の画面が表示されたら、プロセスの詳細を入力します。テンプレートとして「サービスを後で定義」を選択する必要があります。
次に、インバウンド・サービスおよびアウトバウンド参照を作成し、それらをBPELコンポーネントと接続します。
最後に、ペイロード取得用の開始<receive>アクティビティおよびペイロード書込み用の<invoke>アクティビティを含むBPELプロセスを作成します。
アダプタを使用するほとんどのBPELプロセスは、この方法でモデル化されます。生成されたWSDLは一方向的であることを示しており、これによりBPELプロセスは非同期的になります。
つまり、インバウンド・ファイル・アダプタによりディレクトリ内のファイルをポーリングし、そこで見つかった各ファイルについて、コンテンツをXMLに変換してBPELにパブリッシュします。
ただし、BPELプロセスが非同期的であるため、ファイル・アダプタがパブリッシュ後すぐに戻されて、必要な後処理、たとえば、データの削除やアーカイブが実行されます。
このような非同期BPELプロセスの短所は、インバウンド・アダプタの調整が難しくなる点です。つまり、ダウンストリームのビジネス・プロセスで処理が完了するのを待機せずに、インバウンド・アダプタによってBPELにメッセージが送信され続けます。この結果、メモリー使用量の増加やCPU使用率の上昇などの問題が発生する可能性があります。
これらの問題の発生を抑制するため、WSDLおよびBPELのアーティファクトを同期プロセスに手動で変更できます。同期BPELプロセスに変更したら、インバウンド・ファイル・アダプタでは、次のファイルまたはメッセージを処理する前に<reply>でダウンストリーム・プロセスによる処理が完了するまで強制的に待機するようになり、結果的にファイル・アダプタが自動的に調整されます。
次の変更後のWSDLを参照してください。ここでは、一方向のWSDLを双方向のWSDLに変換することによって、WSDLを同期的にしています。
次のステップでは、次の例のように、BPELプロセスの最後にあるインバウンド・アダプタのパートナ・リンクに<reply>アクティビティを追加します。
最終的なプロセスは次のようになります。
図4-170 ReceiveおよびReply BPELアクティビティを含む同期ファイル・アダプタ・プロセス
デフォルトではメディエータのルーティング・ルールは順次であるため、このタイプの作業はメディエータでは不要です。つまり、メディエータでは、ルーティング・ルールの処理にコール元のスレッド(インバウンド・ファイル・アダプタのスレッド)が使用されます。メディエータのWSDLが一方向でもこれは当てはまります。
5つの異なるFTPサーバーに同じファイルを送信する必要がある場合、たとえば、各コネクション・ファクトリの位置に1つずつ、合計5つのFtpAdapter参照を作成できます。ただし、これは最適な方法ではないため、かわりに「動的パートナ・リンク」という概念を使用できます。
アダプタを管理モードで実行している場合、FtpAdapterのWebLogic Serverコンソールでコネクション・ファクトリJNDIを構成する必要があります。
次の例では、localhost上で実行されているFTPサーバーにコネクション・ファクトリJNDIの位置eis/Ftp/FtpAdapterがマッピングされています。
図jca.gifの説明
アプリケーション・サーバー上でコネクション・ファクトリを構成したら、SCAプロセスのjcaアーティファクトにあるコネクション・ファクトリJNDIを参照する必要があります。次の例では、次の.jcaファイル内のFTPOut参照によって、eis/Ftp/FtpAdapter
に対応するFTPサーバーを使用しています。
BPELおよびメディエータ・サービス・エンジンの両方のJCAヘッダー・プロパティを使用すると、このコネクション・ファクトリの位置を動的に変更できます。このためには、次に示すように、BPELまたはメディエータを使用するビジネス・シナリオで予約済のJCAヘッダー・プロパティjca.jndi
を使用する必要があります。
同様に、メディエータではmplanを準備します。
動的パートナ・リンクを使用する場合は、次の点に注意する必要があります。
コネクション・ファクトリをSOAサーバー上に事前構成する必要があります。前述のBPELの例では、シナリオのデプロイ前に、FtpAdapterのWebLogic Serverデプロイメント・ディスクリプタでeis/Ftp/FtpAdater1
およびeis/Ftp/FtpAdater2
の両方を構成する必要があります。
動的パートナ・リンクはアウトバウンド起動にのみ適用可能です。
ファイル/FTPアダプタを起動するBPELプロセスの一部として書き出されたファイルの詳細を取得できます。
たとえば、FileNamingConvention
をPurchaseOrder_%SEQ%.txt
として使用する場合、書き出されたファイルに基づいた後処理の実行が必要になることがあります(このファイルの名前(PurchaseOrder_1.txt
、PurchaseOrder_2.txt
など)は、アダプタの起動が完了するまで不明です)。
メタデータの取得を可能にするには、書き込むファイルのメタデータがファイル/FTPアダプタから返されるように、WSDLを編集する必要があります。次に示すように、一般的にファイル/FTPのWrite/Put WSDL操作は1つの方法です。
図4-171 ファイル/FTPアダプタからファイル・メタデータを返すためのWSDLファイルの編集
次に示すように、一般的に、.jcaファイルに挿入するファイル/FTPのWrite/Put WSDL操作は、メタデータを返すことを可能にするための1つの方法です。
ファイル/FTPアダプタは、WSDLが双方向のWSDLに調整されるとメタデータを返すように設計されています。また、</wsdl.output>
ではfileread.xsd
スキーマをインポートする必要があります。fileread.xsd
スキーマは、次の場所からコピーする必要があります。
http://blogs.oracle.com/adapters/resource/2010-04-12/fileread.xsd
次のステップでは、双方向のWSDLになるようにWSDLを編集します。
BPELのInvoke文のパネルを使用してInvoke WSDL文を指定します。ファイル・メタデータは、BPEL出力変数の一部として返されます。
ファイル/FTPアダプタでは、順序番号を使用するようにアウトバウンド書込みを構成できます。たとえば、address-data_%SEQ%.txt
をFileNamingConventionとして選択すると、すべてのファイルがaddress-data_1.txt
、address-data_2.txt
などとして生成されます。
順序番号は、特定のアダプタ・プロジェクト(またはシナリオ)のコントロール・ディレクトリに属しています。ファイルまたはFTPアダプタを使用するプロジェクトごとに、記帳を目的として一意のディレクトリが作成されます。このコントロール・ディレクトリは一意である必要があるため、アダプタにより、ダイジェストが使用されて同じコントロール・ディレクトリが2つ存在しないことが確認されます。
たとえば、前述の例にあるFlatStructureサンプルの場合、マイ・プロジェクトのコントロール情報はFMW_HOME/user_projects/domains/soainfra/fileftp/controlFiles/[DIGEST]/outbound
に配置されます(DIGEST
の値はプロジェクトごとに異なります)。
このディレクトリ内にあるcontrol_ob
.properties
ファイルに、順序番号が保持されます。順序番号はバイナリ形式で保持されるため、その内容を表示するには16進数エディタが必要です。もう1つ、SEQ_nnn
という0バイトのファイルがあります。この追加のファイルはバックアップとして保持されます。
アダプタ・ランタイムにとって問題となることの1つは、コントロール・ファイルが2つのスレッドによって誤って同時に更新されないように、コントロール・ファイルに対するすべての書込みを保護する必要がある点です。この保護のためにmutexが利用されています。mutexには異なるタイプのものがあります。
メモリー内
DBベース
Coherenceベース
ユーザー定義
特にアダプタに対するトランザクションの負荷が大きい場合、mutexがボトルネックになることがあります。ただし、アダプタでは、データベース順序またはストアド・プロシージャからアダプタの順序値が導出されるように構成を変更できます。その場合、mutexがバイパスされてプロセスのスループットが向上します。
スループットを向上させる最も単純な方法は、eis/HAFileAdapter
を使用するようにアウトバウンドJCAファイルのJNDIコネクション・ファクトリの位置を切り替える方法です。
図4-176 HAFileAdapterを使用するためのJNDIコネクション・ファクトリの切替え
この変更の結果、アダプタ・ランタイムによってOracleデータベース上に順序が作成されるようになります。たとえば、SOAインフラ・スキーマ内でselect * from user_sequences
を実行すると、SEQ_<GUID>__
という名前で新しい順序が作成されて表示されます(GUID
はプロジェクトごとに異なります)。
ただし、独自の順序を使用するには、SequenceName
というJCAファイルに新しいプロパティを追加する必要があります。この順序は、soainfraスキーマで前もって作成する必要があります。
デハイドレーション・サポートとしてDB2またはMS SQL Serverを使用する場合は、若干異なる点があります。DB2では順序がネイティブでサポートされていますが、MS SQL Serverではサポートされていません。DB2の場合は、ネイティブに生成された順序がアダプタ・ランタイムで使用されますが、MS SQL Serverの場合は、製品に備わっているストアド・プロシージャがアダプタで使用されます。DB2をデハイドレーション・ストアとして実行しているSOA Suiteで同じ結果を得るには、JCAファイル内のコネクション・ファクトリJNDI名をeis/HAFileAdapterDB2
に変更します。MSSQLでは、eis/HAFileAdapterMSSQL
を使用します。製品に備わっているもの以外のストアド・プロシージャを使用するには、バインディング・プロパティを使用してアダプタの動作をオーバーライドする必要があり、具体的にはストアド・プロシージャを使用するようにアダプタに指示する必要があります。
ファイル/FTPアダプタを追加モードで使用する場合、アダプタ・ランタイムによってmutexの機能が下げられてペシミスティック・ロックが使用され、異なるノードのライターによって同じファイルに対して同時に追加が実行されないようになります。
デフォルトでは、テクノロジ・アダプタを使用すると、JDeveloperアダプタ・ウィザードによって非同期WSDLが生成されます。通常、リリース11gでアダプタ・シナリオを作成する場合は、次の手順に従います。
「BPELを使用するコンポジット」または「空のコンポジット」を使用して、SOAアプリケーションを作成します。「空のコンポジット」を選択した場合は、「BPELプロセス」を「サービス・コンポーネント」パネルから「SOAコンポジット・エディタ」上にドロップする必要があります。いずれの場合も、プロセスの詳細画面が表示されたら、テンプレートとして「サービスを後で定義」を選択する必要があります。
図bpel_create.gifの説明
次に、インバウンド・サービスおよびアウトバウンド参照を作成し、それらをBPELコンポーネントと接続します。
最後に、ペイロード取得用の開始<receive>アクティビティおよびペイロード書込み用の<invoke>アクティビティを含むBPELプロセスを作成します。
アダプタを使用するほとんどのBPELプロセスは、この方法でモデル化されます。生成されたWSDLは一方向的であり、これによりBPELプロセスは非同期的になります。
インバウンド・ファイル・アダプタによりディレクトリ内のファイルをポーリングし、そこで見つかった各ファイルについて、アダプタでコンテンツをXMLに変換してBPELにパブリッシュします。ただし、BPELプロセスが非同期的であるため、アダプタがパブリッシュ操作後すぐに戻されて、必要な後処理、たとえば、削除やアーカイブが実行されます。
このような非同期BPELプロセスの短所は、インバウンド・アダプタの調整が難しくなる点です。つまり、ダウンストリームのビジネス・プロセスで処理が完了するのを待機せずに、インバウンド・アダプタによってBPELにメッセージが送信され続けます。この結果、メモリー使用量の増加やCPU使用率の上昇などのいくつかの問題が発生する可能性があります。
これらの問題を軽減するため、WSDLおよびBPELのアーティファクトを同期プロセスに手動で調整できます。同期BPELプロセスが存在する場合、インバウンド・アダプタでは、次のファイルまたはメッセージを処理する前に<reply>でダウンストリーム・プロセスによる処理が完了するまで強制的に待機するようになり、結果的にアダプタが自動的に調整されます。
次のWSDLでは、一方向のWSDLが双方向のWSDLに変換されており、それによりWSDLが同期的になっています。
次の例のように、BPELプロセスの最後にあるインバウンド・アダプタのパートナ・リンクに<reply>アクティビティを追加します。
スイムレーン形式で表示した最終的なプロセスは、次のようになります。
ファイル/FTPアダプタでは、ファイルを処理する順序を制御できます。たとえば、ファイルの変更時刻、ファイル・サイズまたは他の決定要素の順序で、ファイルを処理する必要がある場合があります。
ファイル/FTPアダプタでは、インバウンド・ファイル/FTPアダプタ・サービスのJCAファイルでFileSorter属性を定義することによって、ファイルを処理する順序を制御できます。
ファイル/FTPアダプタには、次の例に示す、最終変更時刻を使用する2つの事前定義済のソーターが備わっています。
一方、順序を独自に定義することが必要な場合もあります。次に示すように、Java Comparatorを実装してファイル・アダプタに登録できます。
Comparatorを記述します。たとえば、次のFileSizeSorter
Comparatorでは、ファイルをファイル・サイズの降順でソートします。
このクラスをコンパイルするには、fileAdapter
.jarをクラスパスに配置する必要があります。[FMW_HOME]/AS11gR1SOA/soa/connectors
から、たとえばjar xvf FileAdapter.rar
を実行してFileAdapter.rar
を展開し、fileAdapter.jar
を抽出します。FileSizeSorter.java
クラスをコンパイルするには、次の例のようにfileAdapter.jar
をクラスパスに配置する必要があります。
setenv CLASSPATH fileAdapter.jar jacac -d .FileSizeSorter.java
コンパイルの後、次の例のようにクラスをその独自のjarファイルにバンドルします。
jar cvf fileadapter-sorter.jar file
次の例のように、fileadapter-sorter.jar
をFileAdapter.rar
にバンドルします。
jar uvf FileAdapter.rar fileadapter-sorter.jar
この手順は、FileAdapter.rar
をロードするClassLoaderからfileadapter-sorter.jar
が見えるようにするために必要です。fileadapter-sorter.jar
およびfileadapter.jar
を[DOMAIN_HOME]/lib
にコピーする方法など、他の方法を使用することもできますが、前述の例が最も単純かつ簡単です。
JCAファイルでSingleThreadModel
をtrue
として設定します(この項の最初の画像を参照してください)。
BPELを使用している場合は、同期プロセスをモデル化していることを確認します。