BPEL SOA Suite Essentials for WLI Users

Oracle WLIファイル・コントロールとOracle File Adapterの比較

Daniel Amadei、Heidi Buelow著

Oracle WLIユーザーのためのOracle SOA Suite基礎講座シリーズの今回の記事では、Oracle WebLogic Integration(Oracle WLI)のファイル・コントロール機能とOracle BPEL Process Manager(Oracle BPEL PM)の対応する機能を比較します。

2009年5月公開

関連するダウンロード・リンク
 Oracle SOA Suite

この記事は次のように構成されています。

[1ページ] [ 2ページ] [ 3ページ] [ 4ページ]

はじめに

今日のIT業務においてもっとも基本的な要素といえるものがあります。それは、ファイルです。 モバイル機器、企業のサーバー、そしてその間に存在するパソコンと、どこにでも存在しています。

とくに、外部アプリケーションまたはレガシー・アプリケーションと統合するときには、ある時点でファイルの読取り、書込み、操作をおこ なう必要が生じます。

ファイルの操作は、エラーが生じやすく(ファイルを読み取るたびにファイルを開いたまま放置してしまうなど)、同じ処理の繰返しになり ます(処理内容に関係なく基本的な手順は同じ)。 そこで、ファイルの扱いを容易にするため、統合ツールでは、中間レベルを追加して、ファイルを扱うときの面倒な作業から開発者を解放するソリューションを 用意しました。

この記事の目的は、Oracle WebLogic IntegrationとOracle SOA Suite、とくにBPEL Process Managerでファイルを扱う方法、およびファイル操作を簡素化する方法について説明します。 この記事は、2つの入門者向けセクションからなります。各セクションでは、それぞれの製品によって採用されているファイル操作に関するテクノロジーを概説 します。 Oracle WLIのセクションでは、ファイル操作を同期化するコンポーネントであるファイル・コントロールの概念について詳しく説明します。 Oracle BPEL PMのセクションでは、ファイル・アダプタとその周辺概念について説明します。

理論的な説明のあと実習に移ります。実習では、両ツールを使用して3つのユースケースを実装します。 Oracle BPEL PMについて詳しくは、『 Oracle BPEL Process Manager』を参照してください。

Oracle WLIファイル・コントロール

コントロールと、Oracle WLIアーキテクチャにおけるその役割について

コントロールとは、リソースへのアクセスを簡素化し、統一された方法で実行することをおもな目的とするコンポーネントです。 ユーザーはコントロールをカスタマイズし、基本コントロールの拡張インタフェースを介して、WLIプロセス内で使用します。 この方法により、カスタム・バージョンのコントロールがJavaインタフェース形式で使用可能になります。カスタム・コントロールの実装は背後でおこなわ れるため、ユーザーが認識することはありません。

別の興味深い点として、コントロールのインスタンス化があります。 ユーザーはコントロールの実装クラスに対するアクセス権をもたないため、実装クラスを介してコントロールをインスタンス化しなければならないのでは意味が ありません。 コントロールのインスタンス化を依存性の注入によっておこなうのはこのためです。これにより、プロセスとコントロールの実装との癒着度が少なくなります。

コントロールは従来のプレーンなJavaインタフェース(Plain Old Java Interface)として公開されるため、その機能は標準のJavaメソッドを介して利用できます。 メソッドは、開発者によってカスタマイズされていなければ、単純に親インタフェースから継承されます。 開発者によってカスタマイズされたメソッドは、コントロール・ファイルの作成時に作成した設定に基づいて生成されます。 メソッドを使用するには、使用可能なメソッドが属するファイル・コントロールのリストからメソッドをドラッグして、プロセス内のメソッドを実行する場所に ドロップします。 そのあと、メソッドが期待/返却する必須の送信値/受信値を設定します。

以下の図では、あるプロセスで、readメソッドをコントロールからドラッグしてプロセス内にドロップしています。 緑のチェック・ボックスは、readメソッドの設定が完了していることを意味します。

process.png

コントロールによるファイルの操作

Oracle WLIでのファイル操作は、コントロール、すなわちファイル・コントロールとして提供されます。 ファイル・コントロールの作成時には、次の情報をカスタマイズします。

  • ディレクトリ
  • ファイル名またはファイル名フィルタ
  • データ型
  • エンコーディング(文字列型またはXML型のデータを処理するときに使用可能)

大きなファイルを処理する場合は、デリミタを指定することで、ファイル全体が一度にメモリへロードされるのを防ぐことができます。 以下に、ファイル・コントロールの作成時にこれらのパラメータを入力する画面を示します。

control_config3.png

ファイル・コントロールをプロセスへ追加したときに生成されるインタフェースは、 com.bea.control.FileControlか ら以下のメソッドを継承します(以下に示すのはその一部です。継承されるすべてのメソッドについては、 Oracle WLIのドキュメントと対応する javadocを 参照してください)。

  • copy(String fileName): 現在のファイルを指定されたファイル名にコピーします。

  • delete(): 現在のファイルを削除します。

  • rename(String fileName): 現在のファイルの名前を指定されたファイル名に変更します。

  • FileControlFileListDocument getFiles(): 指定したファイル・マスクに一致する、現行ディレクトリ内のFileオブジェクトのイテレータを返します。

  • FileControlPropertiesDocument getProperties(): コントロールの動的プロパティを取得します。

  • setProperties(FileControlPropertiesDocument xmlProp): コントロールの動的プロパティを設定します。

最後の2つのメソッドでは、プロパティという概念を使用しています。 これらのプロパティはXMLBeansクラスのインスタンスであり、Oracle WLIに含まれているXSDから生成されます。 プロパティ・クラスを使用すると、コントロールの動作を実行時にカスタマイズできます。 たとえば、プロセスのインスタンス変数の値に基づいて、ファイルを格納するディレクトリを変更することができます。 コントロールの作成時に与えるカスタマイズ用パラメータ(とくにデータ型)に基づいて、以下のメソッドが作成され、Javaインタフェースに追加されま す。

  • FileControlPropertiesDocument write(<Type of data>): 選択したデータ型に基づいて、ファイルにコンテンツを書き込みます。

  • <Type of data> read(): データ型に基づいて、ファイルからコンテンツを読み取ります。

  • append(<Type of data>): ファイルにコンテンツを追加します。データ型がXMLである場合は使用できません。

ここまでで説明した内容により、ファイル・コントロールを使用することで次のことが簡単になります。

  1. ファイルに対するデータの書込み、読取り、追加
  2. ファイルの操作:コピー、名前の変更、削除
  3. ディレクトリの内容の一覧表示

ファイルに対して読取りおよび書込み可能なデータ型は次のとおりです。

  • RawData(バイナリ)
  • 文字列
  • XML(XMLの読取りおよび書込みを実行することによって、ファイル・コントロールは、XML Beansバインディング・フレームワークを使用して、XMLコンテンツとJavaオブジェクト間の変換をおこないます)

ファイルとディレクトリには、次のようにしてアクセスできます。

  • WindowsおよびUnixシステムではローカルにアクセス
  • ネットワークを介す場合は、FTP、SFTP、またはUNC形式でアクセス
ファ イル・コントロールはファイル操作を同期的に実行します。 何らかのポーリングを実行する必要がある場合は、『WLI Event Generators』を参照してください。これは、SOA Suiteシリーズの別の記事で取り上げられています。

Oracle File Adapter

Oracle Application Server File Adapterの概要

Oracle Application Serverのアダプタには、テクノロジー、パッケージ・アプリケーション、レガシーの3つのタイプがあります。 Oracle Adapter for Filesはテクノロジー・アダプタです。 テクノロジー・アダプタはJ2EE Connector Architecture(J2CA)1.5標準に基づいており、BPEL Process Managerと同じJ2EEコンテナ内にリソース・アダプタとして配置されます。

アダプタは、設計時に構成されたアダプタ・メタデータに基づいて、ネイティブAPIと標準XML間で変換をおこないます。 アダプタでは、グラフィカル・ユーザー・インタフェース(GUI)を備えた設計時ツールを使用します。このGUIを用いて、アダプタを構成および管理する ことで、短期間での実装と配置を実現します。

BPELAdapterArch_smaller.png

インバウンド・インタラクションとアウトバウンド・インタラクション

ファイル・アダプタによるファイル交換には、インバウンド型とアウトバウンド型があります。 ファイル・アダプタは、交換の方向に応じて、異なるタスクを実行します。

アダプタは、イベント通知サービス、すなわち非同期の通信パラダイムをサポートしています。 J2CAの用語では、こうした非同期の通信サービスをインバウンド・インタラクションともいいます。 J2CAのインバウンド・インタラクションは、設計時にWSDL内で捕捉されます。 Oracle BPEL Process Managerに送信されてきたインバウンド型ファイルに対して、ファイル・アダプタは次の操作を実行します。

  1. ファイル・システムをポーリングして一致するファイルを見つける
  2. 設計時に定義したネイティブ・スキーマ(NXSD)に基づいてファイル・コンテンツを読み取り、変換する
  3. 変換されたコンテンツをXMLメッセージとしてパブリッシュする

アダプタは、同期的な要求/応答サービスをサポートしています。 J2CAの用語では、こうした同期的な通信サービスをアウトバウンド・インタラクションともいいます。 BPEL Process Managerは、WSIFテクノロジーを使用して、リソース・アダプタの要求/応答サービスを開始します。 WSIFは、Webサービスを呼び出して、サービス指向アーキテクチャ(SOA)を生成するための物理バインディング(トランスポートとプロトコル)から Webサービス定義の抽象部分を分離します。 Oracle BPEL Process Managerから送信されたアウトバウンド型ファイルに対して、ファイル・アダプタは次の操作を実行します。

  1. Oracle BPEL PMからメッセージを受信する
  2. 設計時に指定された形式でXMLコンテンツをフォーマットする
  3. 出力ファイルを生成する。 出力ファイルは、経過時間、ファイル・サイズ、メッセージ数の各基準に基づいて作成できます。 これらの基準を組み合わせて出力ファイルに指定することもできます。

ファイル形式

ファイル・アダプタは、次の形式のファイルの読取りおよび書込みができます。また、設計時と実行時に、アダプタ・トランスレータ・コン ポーネントを使用します。

  • XML(XSDベースとDTDベース)
  • デリミタ付き
  • 位置固定
  • バイナリ・データ
  • COBOL Copybookデータ
  • バイナリ(JPGなど)

トランスレータにより、ファイル・アダプタは、さまざまな形式のネイティブ・データをXMLに変換できます。 ネイティブ・データには、簡単なもの(単純なフラット構造)もあれば(親子関係をもつ)複雑なものもあります。 トランスレータは、XML形式と非XML(ネイティブ)形式の両方のデータを処理できます。

アダプタ統計情報

BPEL Process Manager 10.1.3に用意されている各種テクノロジー・アダプタ(File、JMS、Databaseなど)は、インバウンド時かアウトバウンド時かを問わず、 メッセージを処理するたびに統計情報を収集および公開します。 統計情報は、カテゴリおよび個々のタスクに分割されます。 以下に、アウトバウンド・プロセスにおける統計情報の分割の例を示します。

  • アダプタ前処理
  • インタラクション仕様の作成
  • アダプタ処理
  • 呼出し可能文の設定
  • データベースの呼出し
  • 結果の解析
  • アダプタ後処理

アダプタ統計情報は、BPELコンソールで、BPELエンジン統計情報の参照用ページと同じページで確認できます。 BPELコンソールでアダプタ統計情報を確認するための手順は次のとおりです。

  1. BPEL PMコンソール・ページで、「 Manage BPEL Domain」リンクをクリックします。
  2. 次のページで「 Adapter Statistics」リンクをクリックします。

現在アクティブなすべてのインバウンド/アウトバウンド・アダプタ・インタラクションと、各アダプタによって実行されたさまざまなス テップの平均実行時間も表示されます。

収集した統計情報をリセットするには、「 Clear Statistics」リンクをクリックしま す。

詳しくは、『 Oracle File Adapter ユーザーズ・ガイド』を参照してください。

ユースケースの例

ここでは、次の3つの部分からなるユースケース例を紹介します。

  1. ファイルのコンテンツを文字列として読み取る

  2. 1つのXSDを使用して株価受信プロセスを作成し、データを変換して、コンテンツをXMLとしてファイルに書き込む

  3. 2で書き込んだファイルを読み取り、CSVファイルに変換して、FTPディレクトリに書き出す

これらのユースケースを実装するために必要なサンプル・ファイルとして、 CompareWLI_BPEL.zip(スキーマ、入力データなど)が 必要になります。 この記事では、全体をとおして、このサンプル・ファイル・フォルダを参照します。 このzipファイルには、以下の手順に従って作成されたプロジェクト・ファイルも含まれています。

Oracle WLIでユースケースを実装する

Oracle WLIを使用してファイルからプレーン文字列を読み取る

プロセス・アプリケーションを作成する

この記事に含まれるWLIサンプルを実行するには、まず、プロセス・アプリケーションを作成し、WLIドメインに配置する必要がありま す。 ドメインの作成手順については、『 ド メイン コンフィグレーション ウィザードの使用』を参照してください。

プロセス・アプリケーションを作成するには、以下の手順を実行します。

  1. Oracle Workshop for WebLogicを 開きます。
  2. Package Explorerの余白部分を右クリッ クして、「 New 」→「 Project 」を選択します。
  3. New Projectウィンドウで、「 WebLogic Integration 」を開いて「 Process Application 」を選択します。
  4. Next 」をクリックします。
  5. 次の値を入力します。
    • EAR Project Name: FCTLApp
    • Web Project Name: FCTLAppWeb
    • Utility Project Name: FCTLAppUtil
    • Add Weblogic Integration System and Control Schemas to Utility Project 」チェック・ボックスをオンにしま す。
  6. Finish 」をクリックします。

ファイルのコンテンツを文字列として読み取る

最初に、ファイルのコンテンツを文字列として読み取り、そのまま標準出力に書き出します。

かならず プロセスの視点で作業してください。 「 FCTLAppWeb 」→「 src 」の順に開いて、「 process」パッケージを右ク リックします。 下図のように、「 New 」→「 Process 」を選択します。

new_process.png

プロセス名としてGetFileContentAsStringを入力し、パッケージ名の拡張子としてuseCase01を つけて、 processes.useCase01とします。 ほかのオプションは変更せず、「 Finish 」をクリックします。 プロセスのStart Event画面が表示されます(下図参照)。

process_screen1.png

白い四角形をダブルクリックして、先ほど作成したプロセスの開 始イベントを選択します。 次の画面が表示されます。 「 Invoked synchronously via a Client Request with Return 」を選択し、「 Close 」をクリックします。 これにより、プロセスは同期的に実行されるようになり、プロセスのコンシューマに強制的に情報が返されます。

select_start_event.png

プロセス・フローが更新されます。 新規グループを右クリックして、「 Open Return Builder 」を選択します。 次の画面が表示されます。 「 Select... 」ボタンをクリックします。

configure_return.png

これで、プロセスの戻り値の設定を構成できるようになります。 Parameter NameにfileContentと入力します。これが、このプロセスの出力パラメータ名になります。 Type Nameで、 Stringを 返すように選択します。 「 Browse 」をクリックして自分で Stringクラスを見つけるか、「 Simple tab 」をク リックして、リストの最後にある「 String 」を選択します。 「 OK」をクリックすると、「 Send Data 」 をクリックできるようになります。このタブで、先ほど作成した fileContentパ ラメータとして送信する内容をOracle WLIに通知します。

Select variables to assignフィー ルドで、下図のように「 Create new variable... 」 を選択します。 これにより、この変数に格納された値がこのプロセスのコンシューマに対する応答として送信されるため、実行中にこの変数に何らかの値を格納しておく必要が あります。 この変数に値を格納する方法については、あとで説明します。

create_var_send_data.png

変数にfileContentという名前をつけ、「 OK 」 をクリックします。 「 Close 」ボタンをクリックします。 " Client Request with Return"グループの右上隅に緑のチェック・ ボックスが表示されます。これは、このグループが構成済みでありエラーもないことを示しています。

こ こまでで、入力データなしの要求を受信し、fileContentという名前の変数の内容をStringとして返すところまで構成しました。 次に、ファイルを読み取って、その内容がコンシューマに返されるように、fileContent変数に格納します。

(WorkSpace画面の右下にある) Data Palette上 で矢印をクリックし、「 Integration Controls 」 →「 File 」を選択します(下図)。

add_file_control.png

" Insert Control: File"画面が表示され ます。 Field NameはfileControlのま まにします (これはコントロール・インスタンスを表すjavaファイル内のプロパティの名前になります)。 「 Next 」をクリックします。

Javaクラス名を入力するよう求められます。 この名前が、コントロールのJavaインタフェースの名前になります。 StringReaderFileControlと いう名前を入力して、「 Next 」をクリックします。

コ ントロールは、ユーティリティ・プロジェクト内に配置して、プロジェクト間で共有および再利用できるようにすると便利です。 このチュートリアルでは、説明を簡単にするため、コントロールをWebプロジェクト内に作成しました。

コントロールによってアクセスされるファイルに関する情報を指定するための画面が表示されます。 次のようにデータを入力して、「 Finish 」をクリックします。

insert_control_file.png

定義したコントロールは、 Data PaletteControlsセクション内で使用可能になります。 fileControl要素が表示されており、開くと次のようになります。 リストからメソッドを選択し、プロセス内の実行場所にドラッグ・アンド・ドロップします。

control_methods.png

リストから「 String read() 」メ ソッドを選択し、" Client request with return"グ ループ内に配置します(下図)。

control_dnd.png

readノードの右上にグレーのチェック・ボックスが表示されます。 前述のとおり、これは、そのノードの構成がまだ完了していないことを示すものです。readノードをダブルクリックします。

画面が表示されたら、「 Receive Data 」 を選択し、" Select variables to assign"で、ドロッ プダウン・リストから「 fileContent 」変数を選択しま す。 プロセスの横に緑のチェック・ボックスが表示されます。 「 Close 」 をクリックすると、プロセスは次のようになります(下図)。

process_finished.png