Topics
Service-Oriented Architecture
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月公開
この記事は次のように構成されています。
[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メソッドの設定が完了していることを意味します。 コントロールによるファイルの操作Oracle WLIでのファイル操作は、コントロール、すなわちファイル・コントロールとして提供されます。 ファイル・コントロールの作成時には、次の情報をカスタマイズします。
大きなファイルを処理する場合は、デリミタを指定することで、ファイル全体が一度にメモリへロードされるのを防ぐことができます。 以下に、ファイル・コントロールの作成時にこれらのパラメータを入力する画面を示します。 ファイル・コントロールをプロセスへ追加したときに生成されるインタフェースは、
最後の2つのメソッドでは、プロパティという概念を使用しています。 これらのプロパティはXMLBeansクラスのインスタンスであり、Oracle WLIに含まれているXSDから生成されます。 プロパティ・クラスを使用すると、コントロールの動作を実行時にカスタマイズできます。 たとえば、プロセスのインスタンス変数の値に基づいて、ファイルを格納するディレクトリを変更することができます。 コントロールの作成時に与えるカスタマイズ用パラメータ(とくにデータ型)に基づいて、以下のメソッドが作成され、Javaインタフェースに追加されま す。
ここまでで説明した内容により、ファイル・コントロールを使用することで次のことが簡単になります。
ファイルに対して読取りおよび書込み可能なデータ型は次のとおりです。
ファイルとディレクトリには、次のようにしてアクセスできます。
ファ イル・コントロールはファイル操作を同期的に実行します。 何らかのポーリングを実行する必要がある場合は、『WLI Event Generators』を参照してください。これは、SOA Suiteシリーズの別の記事で取り上げられています。
Oracle File AdapterOracle 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を用いて、アダプタを構成および管理する ことで、短期間での実装と配置を実現します。 インバウンド・インタラクションとアウトバウンド・インタラクションファイル・アダプタによるファイル交換には、インバウンド型とアウトバウンド型があります。 ファイル・アダプタは、交換の方向に応じて、異なるタスクを実行します。 アダプタは、イベント通知サービス、すなわち非同期の通信パラダイムをサポートしています。 J2CAの用語では、こうした非同期の通信サービスをインバウンド・インタラクションともいいます。 J2CAのインバウンド・インタラクションは、設計時にWSDL内で捕捉されます。 Oracle BPEL Process Managerに送信されてきたインバウンド型ファイルに対して、ファイル・アダプタは次の操作を実行します。
アダプタは、同期的な要求/応答サービスをサポートしています。 J2CAの用語では、こうした同期的な通信サービスをアウトバウンド・インタラクションともいいます。 BPEL Process Managerは、WSIFテクノロジーを使用して、リソース・アダプタの要求/応答サービスを開始します。 WSIFは、Webサービスを呼び出して、サービス指向アーキテクチャ(SOA)を生成するための物理バインディング(トランスポートとプロトコル)から Webサービス定義の抽象部分を分離します。 Oracle BPEL Process Managerから送信されたアウトバウンド型ファイルに対して、ファイル・アダプタは次の操作を実行します。
ファイル形式ファイル・アダプタは、次の形式のファイルの読取りおよび書込みができます。また、設計時と実行時に、アダプタ・トランスレータ・コン ポーネントを使用します。
トランスレータにより、ファイル・アダプタは、さまざまな形式のネイティブ・データをXMLに変換できます。 ネイティブ・データには、簡単なもの(単純なフラット構造)もあれば(親子関係をもつ)複雑なものもあります。 トランスレータは、XML形式と非XML(ネイティブ)形式の両方のデータを処理できます。 アダプタ統計情報BPEL Process Manager 10.1.3に用意されている各種テクノロジー・アダプタ(File、JMS、Databaseなど)は、インバウンド時かアウトバウンド時かを問わず、 メッセージを処理するたびに統計情報を収集および公開します。 統計情報は、カテゴリおよび個々のタスクに分割されます。 以下に、アウトバウンド・プロセスにおける統計情報の分割の例を示します。
アダプタ統計情報は、BPELコンソールで、BPELエンジン統計情報の参照用ページと同じページで確認できます。 BPELコンソールでアダプタ統計情報を確認するための手順は次のとおりです。
現在アクティブなすべてのインバウンド/アウトバウンド・アダプタ・インタラクションと、各アダプタによって実行されたさまざまなス テップの平均実行時間も表示されます。 収集した統計情報をリセットするには、「 Clear Statistics」リンクをクリックしま す。 詳しくは、『 Oracle File Adapter ユーザーズ・ガイド』を参照してください。 ユースケースの例ここでは、次の3つの部分からなるユースケース例を紹介します。
これらのユースケースを実装するために必要なサンプル・ファイルとして、 CompareWLI_BPEL.zip(スキーマ、入力データなど)が 必要になります。 この記事では、全体をとおして、このサンプル・ファイル・フォルダを参照します。 このzipファイルには、以下の手順に従って作成されたプロジェクト・ファイルも含まれています。 Oracle WLIでユースケースを実装するOracle WLIを使用してファイルからプレーン文字列を読み取るプロセス・アプリケーションを作成する この記事に含まれるWLIサンプルを実行するには、まず、プロセス・アプリケーションを作成し、WLIドメインに配置する必要がありま す。 ドメインの作成手順については、『 ド メイン コンフィグレーション ウィザードの使用』を参照してください。 プロセス・アプリケーションを作成するには、以下の手順を実行します。
ファイルのコンテンツを文字列として読み取る最初に、ファイルのコンテンツを文字列として読み取り、そのまま標準出力に書き出します。 かならず プロセスの視点で作業してください。 「 FCTLAppWeb 」→「 src 」の順に開いて、「 process」パッケージを右ク リックします。 下図のように、「 New 」→「 Process 」を選択します。 白い四角形をダブルクリックして、先ほど作成したプロセスの開 始イベントを選択します。 次の画面が表示されます。 「 Invoked synchronously via a Client Request with Return 」を選択し、「 Close 」をクリックします。 これにより、プロセスは同期的に実行されるようになり、プロセスのコンシューマに強制的に情報が返されます。 プロセス・フローが更新されます。 新規グループを右クリックして、「 Open Return Builder 」を選択します。 次の画面が表示されます。 「 Select... 」ボタンをクリックします。 これで、プロセスの戻り値の設定を構成できるようになります。 Parameter NameにfileContentと入力します。これが、このプロセスの出力パラメータ名になります。 Type Nameで、 Stringを 返すように選択します。 「 Browse 」をクリックして自分で Stringクラスを見つけるか、「 Simple tab 」をク リックして、リストの最後にある「 String 」を選択します。 「 OK」をクリックすると、「 Send Data 」 をクリックできるようになります。このタブで、先ほど作成した fileContentパ ラメータとして送信する内容をOracle WLIに通知します。 Select variables to assignフィー ルドで、下図のように「 Create new variable... 」 を選択します。 これにより、この変数に格納された値がこのプロセスのコンシューマに対する応答として送信されるため、実行中にこの変数に何らかの値を格納しておく必要が あります。 この変数に値を格納する方法については、あとで説明します。 変数にfileContentという名前をつけ、「 OK 」 をクリックします。 「 Close 」ボタンをクリックします。 " Client Request with Return"グループの右上隅に緑のチェック・ ボックスが表示されます。これは、このグループが構成済みでありエラーもないことを示しています。 こ こまでで、入力データなしの要求を受信し、fileContentという名前の変数の内容をStringとして返すところまで構成しました。 次に、ファイルを読み取って、その内容がコンシューマに返されるように、fileContent変数に格納します。
(WorkSpace画面の右下にある) Data Palette上 で矢印をクリックし、「 Integration Controls 」 →「 File 」を選択します(下図)。 " Insert Control: File"画面が表示され ます。 Field NameはfileControlのま まにします (これはコントロール・インスタンスを表すjavaファイル内のプロパティの名前になります)。 「 Next 」をクリックします。 Javaクラス名を入力するよう求められます。 この名前が、コントロールのJavaインタフェースの名前になります。 StringReaderFileControlと いう名前を入力して、「 Next 」をクリックします。 コ ントロールは、ユーティリティ・プロジェクト内に配置して、プロジェクト間で共有および再利用できるようにすると便利です。 このチュートリアルでは、説明を簡単にするため、コントロールをWebプロジェクト内に作成しました。
コントロールによってアクセスされるファイルに関する情報を指定するための画面が表示されます。 次のようにデータを入力して、「 Finish 」をクリックします。 定義したコントロールは、 Data Paletteの Controlsセクション内で使用可能になります。 fileControl要素が表示されており、開くと次のようになります。 リストからメソッドを選択し、プロセス内の実行場所にドラッグ・アンド・ドロップします。 リストから「 String read() 」メ ソッドを選択し、" Client request with return"グ ループ内に配置します(下図)。 readノードの右上にグレーのチェック・ボックスが表示されます。 前述のとおり、これは、そのノードの構成がまだ完了していないことを示すものです。readノードをダブルクリックします。 画面が表示されたら、「 Receive Data 」 を選択し、" Select variables to assign"で、ドロッ プダウン・リストから「 fileContent 」変数を選択しま す。 プロセスの横に緑のチェック・ボックスが表示されます。 「 Close 」 をクリックすると、プロセスは次のようになります(下図)。 |