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ページ] Oracle BPEL Process Managerでのユースケースの実装この記事でO racle BPEL Process Managerを 使用してユースケースを実装するには、 Oracle SOA Suiteと Oracle JDeveloperをインストールしておく必要があります。 SOA Suiteでは、OC4JまたはWebLogicサーバーを使用できます。 SOA Suiteのoc4jadminまたはweblogicユーザーのパスワードを覚えておいてください。 最初にまず、(スキーマと入力データが含まれている)ユースケース用のサンプル・ファイルを準備します。 サンプル・ファイルをコンピュータ上の適当なディレクトリ(C:\CompareWLI_BPEL\samplefiles)に解凍し てください。 この記事全体をとおして、このディレクトリを参照します。 テスト用ファイルを格納する入出力ディレクトリ(例:C:\AdapterFiles \InとC:\AdapterFiles\Out)も作成しておくとよいでしょう。 SOA Suiteが稼働していることを確認し、JDeveloperを起動します。 Viewメニューの「 Connections Navigator」を開いて、SOA Suiteに対する Application Server接続を作成します。 「 Application Server」 を右クリックし、「 New Application Server Connection」 を選択します。 ここで選択するメニュー項目は、サーバーによって若干異なります。
次に、作成したApplication Server接続を使用してIntegration Server接続を作成します。 「 Integration Server」を右クリックし、「 New Integration Server Connection」を選択します。 接続名としてIntServerConnectionを入力し、「 Next」 をクリックします。 先ほど作成したApplication Serverを選択し、サーバーのhttpプロトコル用のポート番号を入力します。 デフォルト値は8888、WebLogicの場合は9700です(デフォルト値はインストール環境によって異なりま す)。 「 Next」を選択します。 「 Test Configuration」をクリックすると、 Application Server、BPEL Process Manager Server、およびESB Serverからの正常終了メッセージが表示されます。 「 OK」を選択します。 ここから、アプリケーションの作成を開始します。 このトップレベル・アプリケーションには、各ユースケースに1つずつ、計3つのプロジェクトが含まれています。 各ユースケースはBPELプロセスによって実装され、各プロジェクトに1つのBPELプロセスを含めることができます。 Oracle BPEL Process Managerランタイムでは各BPELプロジェクトが個別に実行されますが、JDeveloperでは、すべてのプロジェクトを1つのアプリケーション に含めることができます。 3つのユースケースは、この記事のOracle WLIユースケースをできる限り忠実に反映したものです。 Oracle WLIでは、ファイル・コントロールは、Oracle BPELファイル・アダプタに相当します。 ファイル・アダプタの実装では、類似性を関連づけるため、できる限り同じ名前を使用しました。 3つのユースケースが完成すると、JDeveloper内のアプリケーションは次の図のようになります。 では、始めます。 「 Application Navigator」 を選択します(表示されない場合は、「 View」メニューから選択します)。 「 Application」を右クリックして、「 New Application」を選択します。 アプリケーション名としてFCTLAppを入力し、「 OK」 をクリックします。 デフォルト・プロジェクトのダイアログが開きます。 作成するのはデフォルト・プロジェクトではなく、BPELプロジェクトなので、このダイアログでは「 Cancel」をクリックします。 アプリケーションが作成されます。 Oracle BPELを使用してファイルからプレーン文字列を読み出すまず、最初のBPELプロジェクトを作成します。 このプロジェクトは最初のユースケースで、ファイルから文字列を読み取るケースを実行するプロジェクトです。 まず、ディレクトリ内のファイルを読み取るWebサービスをセットアップします。 このサービスを作成するには、BPELファイル・アダプタを使用します。 次に、サービスを呼び出します。サービスはファイルを読み取り、ファイル内の文字列をBPELプロセスに渡します。 ファイルが見つからないと、サービスはエラーを発生させます。 新規アプリケーションを右クリックして、「 New Project」 を選択します。 GeneralのProjectsで、プロジェクト・タイプと して「 BPEL Process Project」を選択します。 プロセス名としてGetFileContentAsStringを入力します。 テンプレート・タイプとして「 Synchronous BPEL Process」を選択します。 「 Finish」を選択します。 BPELプロセスの作成には、受信および応答アクティビティを使用します。 BPELプロセスはWebサービスなので、WSDLファイルも作成されます。 Webサービスの入力と出力のデフォルトのメッセージ・タイプ(ここでは文字列)を選択します。 2つの変数、inputvariableとoutputvariableも 作成されます。この2つの変数は、Webサービスの入力データと出力データに対応します。 ここでおこなう作業は、ファイル・アダプタWebサービスをセットアップして呼び出すことだけです。 コンポーネント・パレットで、ドロップダウン・リストから「 Services」を選択し、サービス関連項目を確認します。 コンポーネント・パレットが表示されない場合は、「 View」メニューから開きます。 「 File Adapter」をBPEL designer画面の右側にある Servicesペインにドラッグすると、ファイル・アダプタ・ウィザードが起動します。 「 Next」をクリックして、手順1に進みます。 サービス名としてStringReaderFileControlを入力し、「 Next」をクリックします。 操作タイプとして「 Synchronous Read File」 を選択し、「 Next」をクリックします。 ファイルの読取り元のディレクトリを入力します。 このディレクトリは、SOA Suiteが動作しているサーバーがアクセス可能なディレクトリでなければなりません。 WindowsまたはLinuxの適切なパス構文で指定します。 そのほかの値はデフォルトのまま変更せず、「 Next」をクリックします。 File NameにstringContent.txtと 入力して、「 Next」をクリックします。 最後に、読み取るデータの形式を設定します。 「 Define Schema For Native Format」ボタンを選択すると、Native Format Builderウィザードが開始されます。 手順1では、「 Create new native format」 および「 Delimited」ラジオ・ボタンを選択して、「 Next」を選択します。 「 Browse」ボタンを使用して、サンプル・ファイル・ディ レクトリにあるstringContent.txtファイルを開きます。 下部のウィンドウにファイル内のテキストが表示されます。 「 Next」を選択します。 「 File contains only one record」 を選択して、「 Next」をクリックします。 使用する名前空間を入力し、要素名にmystringと入力して、「 Next」をクリックします。 「 Next」を3回クリックして形式指定のデフォルト値を受け 入れ、「 Finish」をクリックします。 アダプタ・ウィザードに戻ると、指定したファイルの文字列データを定義する、新規に作成されたxsdファイルが表示されます。 「 Next」→「 Finish」 の順にクリックします。 アダプタ・サービスが構成され、 Create Partner Linkの ダイアログが表示されます。 Oracle BPELでは、パートナー・リンクはサービスへの参照です。 「 OK」をクリックします。 BPELプロセスは次のようになります。 「 Save All」をクリックします。 次に、Oracle BPELの Invokeアクティビティを作成して、サービス を呼び出し、文字列を取得します。 定義したBPEL変数にデータが返されます。 コンポーネント・パレットの表示を Process Activitiesに切り替えます。 「 Invoke」アクティビティをreceiveInputア クティビティの直後にドラッグします。 正しい位置に移動するとアクティビティが黄色でハイライトされます。 左矢印をパートナー・リンクにドラッグして、InvokeアクティビティをStringReaderFileControlパー トナー・リンクと連結します。 Invoke Propertiesダイアログが開きます。 パートナー・リンクと操作は自動的に入力されています。 名前にInvoke_Stringと入力します。 Oracle BPELの Invokeアクティビティでは、サービスに入力データを渡さない場合でも、入力変数と出力 変数を指定する必要があります。 入力変数の右にある「 Auto-Create Variable」ボタンを選択します。 これにより、サービスにデータを送信する変数が作成されます。 メッセージ・タイプは自動的に作成されます。 自動的に生成される変数には分かりやすい名前がつけられるので、そのまま使用しても問題ありません。 Create Variableダイアログで「 OK」をクリックします。 出力変数についても「 Auto-Create Variable」ボタンを選択しますが、変数名はfileContentに 変更します。 Invokeダイアログで「 OK」をクリックします。 これで、ファイルから文字列を読み取り、fileContent変数に格納するところまで出来上がりました。 次に、文字列をoutputvariableにコピーして、プロセスが文字列を返すようにします。 「 Assign」アクティビティを、BPELプロセスの Invokeアクティビティの直後にドラッグします。 ダブルクリックして Assignダイアログを開きます。 「 Create」→「 Copy Operation」を選択します。 From側で、 Invoke出力変数用に作成した「fileContent」変数を開 き、最後の要素を選択します。 Target側で、「outputvariable」 変数を開き、最後の要素を選択します。 この Assign操作によって、一方の要 素から他方の要素にデータがコピーされます。 あとで配置するとき、2つの要素タイプ間の互換性がない可能性があるという警告メッセージが表示されます。 2つの要素はどちらも文字列で、互換性があることはわかっているため、この警告は無視してかまいません。 BPELプロセス・ウィンドウ上部の緑色のチェックマークを選択して、プロセスを検証します。 Invoke_Stringに付いているものだけを残し、そのほかの黄色の警告フラグが消え ます。 このフラグは、入力変数が初期化されていないことを警告するものですが、この変数はサービスによって使用されないため、警告は無視してかまいません。 「 Save All」をクリックします。 これでプロセスが完成しました。 プロセスは、開始されると、指定した入力ディレクトリでファイルを検索し、そのファイルを読み取って、ファイル内のデータをプレーン文字列として返しま す。 実際に試してみましょう。 プロジェクト名を右クリックし、「 Deploy」→「 IntServerConnection」→「 Deploy」を選択します。 Apache Antログ・ウィンドウを監視して、 Build Successfulと いう緑色のメッセージが表示されるまで待ちます。 これでプロジェクトが配置されました。 入力ファイルのコピーを入力ディレクトリに格納します。 これで、プロセスを実行できます。 プロセスの実行には、BPEL管理コンソールを使用します。 ブラウザを起動し、URL入力バーにhttp://localhost:8888/BPELConsoleと 入力します。サービスを配置したサーバーがローカル・マシンではない場合は、localhostを配置先サーバーの名前で置換してくだ さい。また、BPELコンソールのデフォルトのWebLogicポートを使用する場合は、ポート番号を9700で置換してください。 ユーザーoc4jadminまたはweblogicでログインし、構成に応じたパスワードを入力します。 BPELコンソールが開き、 ダッシュボードが表示されます。ダッシュボードには、配置済みのすべてのBPELプロセスが 表示されます。 「GetFileContentAsString」プロセスを選択して初期ページを開きます。 「 Post XML Message」ボタンをクリックしま す。 開始された同期プロセスが、ファイルを読み取り、データをoutputvariableにコピーして、値をブラウザ・ウィンドウ に返します。 ファイルから読み取った文字列がブラウザに表示されます。 入力ディレクトリを確認してください。 ファイルがなくなっています。 サービスがファイルを見つけて処理したのです。 BPELコンソールに戻って、監査証跡を表示し、プロセス・インスタンスの詳細を確認してみ ましょう。 「 Instances」タブを選択します。 このタブには、実行中のインスタンスおよび完了したインスタンスがすべて表示されます。 GetFileContentAsStringプ ロセスのインスタンスもリストに含まれています。 インスタンスを選択して監査証跡を表示します。 監査証跡は、 Flowタブにグラフィカル・モードで開きます。 プロセスのデザイン・ビューに似ています。 Auditタブでは、監査証跡をテ キスト形式で確認できます。 「Invoke_String」アクティビティを選択して、サービス・データを表示します。 ファイル・アダプタ・サービス・コールの出力に文字列が表示されます。 もう一度プロセスを実行してみてください。今度は、ディレクトリ内にファイルは存在しません。 この場合、アダプタ・サービスによってエラーが生成されますが、このエラーは捕捉されないため、プロセスは異常終了します。 実行結果は、BPEL監査証跡で確認できます。 エラーを捕捉して意味のあるエラー・メッセージを返すようにプロセスを変更することもできます。 具体的には、 Invokeを囲むスコープを設定して、エラーを捕捉し、定義したスコープの直後から処理を 継続できるようにします。 まず、「 Scope」アクティビティをInvoke アクティビティの直前にドラッグします。 次に、プラス記号「 +」を選択して Scopeアクティビティを拡張してから、「 Invoke」および「 Assign」 アクティビティを Scope内にドラッグします。 次に、エラー捕捉ルーチンを追加します。 Scopeフレー ム内で「 Add CatchAll Branch」アイコンを選択します。 ブランチを拡張し、その中に「 Assign」アクティビティをドラッグします。 ダブルクリックして Assignを開きます。 「 Create」→「 Copy Operation」を選択します。 From側で、タイプとし て「 Expression」を選択し、"Error reading file"と入力します。 Target側で、「outputvariable」 変数を開き、最後の要素を選択します。 「 Save All」をクリックします。 これでプロセスが完成しました。その内容は、次のようになります。 これで、プロセスは、ファイルに格納されている文字列、またはエラー・メッセージ(ファイルの読取りエラーが発生した場合)を返すよう になりました。 この新しいバージョンのプロセスを配置してください。 プロセスのバージョン1.0がすでに配置されているため、バージョン番号の入力を求められます。 新しいバージョンとして1.1を入力して、新旧両バージョンを同時に確認できるようにしておきます。 そして、新しいバージョンを実行します。 今度は、ディレクトリ内に入力ファイルが見つからないと、ブラウザにエラー・メッセージがすぐ表示されます。 ReadStringFromFileプロセスには、文字列をプロセス内に読み取るサービスを作成する方法、および 発生したエラーを処理する方法が記述されています。 BPELプロセスを拡張して、当該文字列を別のサービスに渡す、あるいは手作業または電子メール通知でユーザーに送信するといった操作を実行させることも できます。 では、次のユースケースに進みましょう。 JDeveloperに戻って、開いているファイルをすべて閉じます。 Oracle BPELによるXMLの受信、別のスキーマへの変換、ファイルの書込みこのユースケースでは、BPELプロセスを呼び出すときに入力データを渡し、それを目的の出力スキーマに合わせて変換して、ファイルに 書き込みます。 まず、プロジェクトを用意する必要があります。 アプリケーションを右クリックして、「 New Project」を選択します。 GeneralのProjectsで、プロジェクト・タイプとして「 BPEL Process Project」を選択します。 プロセス名としてTranslateStockProcessを 入力します。 テンプレート・タイプとして「 Synchronous BPEL Process」 を選択し、「 Next」をクリックします。 要求および応答スキーマは、デフォルトでは簡単な文字列の構造を定義しています。これを、入力/出力パートナー株価スキーマに変更して みましょう。 Input Schema Elementボックスの右側にある ボタンを選択して、サンプル・ファイル・ディレクトリ内を参照します。 インポートするxsdとして「stocks.xsd」を選択し ます。 xsdを開いて、「 stocks」要素を選択します。 Output Schema Elementでは最初、 Type Chooserウィンドウが表示されます。これは、すでにスキーマがインポートさ れているためです。 右上の「 Import Schema」ボタンをクリックしま す。 参照ボタンをクリックして、「STOCKS_PARTNER.xsd」を選択します。 次に、「STOCKS」要素を選択します。 「 Finish」を選択します。 プロジェクトが作成されます。 このプロセスでは、同期テンプレートを使用するため、 Receiveア クティビティと Replyアクティビティ、およびクライアント・サービス参照はす でに作成されています。 これに、データを書き込むためのファイル・アダプタ・サービスを追加する必要があります。 ファイル・アダプタを、BPELデザイン画面の右側にある Servicesペ インにドラッグします。 「 Next」をクリックして、手順1に進みます。 サービス名としてwritePartnerSchemaと入力し、「 Next」をクリックします。 操作タイプとして「 Write File」を選択し、「 Next」をクリックします。 ファイルの出力先ディレクトリを入力します。 このディレクトリは、SOA Suiteが動作しているサーバーがアクセス可能なディレクトリでなければなりません。 WindowsまたはLinuxの適切なパス構文で指定します。 File Naming ConventionにpartnerStocks%SEQ%.xml_と入力します。 特殊文字列%SEQ%は、 ファイルの出力時に、次のシーケンス番号で置換されます。 このようにファイル名を指定することで、プロセスを複数回実行しても、出力ファイルを上書きしてしまうことはありません。 そのほかの値はデフォルトのまま変更せず、「 Next」をクリックします。 最後に、書き込むデータの形式を設定します。 今度は、xml形式でデータを書き出すため、すでにインポートしているスキーマを参照して選択します。 「STOCKS_PARTNER.xsd」および「STOCKS」要素を選択します。 「 Next」→「 Finish」 の順にクリックします。 アダプタ・サービスが構成され、 Create Partner Linkの ダイアログが表示されます。 「 OK」を選択します。 サービス参照の配置場所は左右どちらを選択してもかまいませんが、慣習上、プロセスが呼び出す参照を右側に、プロセスが受信する参照を 左側に配置します。 「partnerlink」アイコンを右クリックして、「 Display」 →「 Move to opposite swim lane」を選択すれば、左右 のサービス参照を簡単に入れ換えることができます。 では、新しいサービスを呼び出してみましょう。 「 Invoke」アクティビティをドラッグして、BPELプロ セスの Receiveアクティビティと Replyアクティビティの間にドロップします。 InvokeにInvoke_WriteStockという名前をつけ、 Input Variableボックスの右側にある「 Automatically Create Input Variable」ボタンを選択し ます。 入力変数名をstocksに変更します。 「 OK」を 選択します。 「 OK」をクリックして、Invokeプロパティを設定します。 最後の手順では、サービスの入力データを入力変数にコピーします。 それには、BPEL Transformアクティビティを使用します。 まず、「 Transform」アクティビティを Invokeアクティビティの直前にドラッグします。 ソースを「 inputvariable」 に設定します。 この変数は、プロジェクトの作成時に自動的に作成されたものです。 BPELプロセスを作成したとき、入力用に設定した要素タイプをもつように定義されています。 ターゲットを「 stocks」 変数に設定します。 ファイル名をTransformStockに設定し、「 Create」 ボタンをクリックします。 ソースのstockをターゲットのSTOCKSに連結し、自動選択ダイアログで「 OK」をクリックします。 変換ツールによって、名前が一致する各フィールド同士が連結されます(必要なら、よく使用されるフィールド名を対応づけるディクショナリを追加することも できます)。 残りのフィールドを連結します。 ソース・データが複数行現れる可能性があるため、xslt for-each構文を追加します。 これを、 Component Palette XLST Constructsパレットからターゲッ トのSTOCKS要素にドラッグします。 そのあと、ソースのstocks要素を for-each構 文に連結します。 最後に、出力変数をパートナーのstocks値にも設定しておきます。 目的は結果をファイルに書き出すことであり、これは必須の作業ではありません。ただ、こうしておけば、BPELコンソールでプロセスをテストするときに結 果が見やすくなります。 「 Assign」アクティビティを Invokeアクティビティの直後にドラッグします。 ダブルクリックしてAssignを開きます。 Generalタブで、 Assign_Outputという名前をつけます。 Copy Operationタブで、 Createメニューから「 Copy Operation」を選択します。 Invokeアクティビティと Assignアクティビティに警告フラグが立っています。 これは、使用している変数が初期化されていないことを警告するものです。 実際には、変換でInvoke_Write_Inputは初 期化されているのですが、JDeveloperはそのことを認識していないのです。 この警告は無視してかまいません。 プロジェクト名を右クリックし、「 Deploy」→「 IntServerConnection」→「 Deployto default domain」を選択します。 Apache Antログ・ウィンドウを監視して、 Build Successfulという緑色のメッセージが表示されるまで待ちます。 これでプロジェクトが配置されました。 ブラウザを起動し、URL入力バーにhttp://localhost:8888/BPELConsoleと入力し ます。サービスを配置したサーバーがローカル・マシンではない場合は、localhostを配置先サーバーの名前で置換してください。 また、デフォルトのWebLogicポートを使用する場合は、ポート番号を9700で置換してください。 ユーザーoc4jadminま たはweblogicでログインし、構成に応じたパスワードを入力します。 ダッシュボードに、新しいプロセスTranslateStockProcessが表示されます。 プロセスを選択して、プロセスの初期ページに移動します。 入力スキーマのHTMLフォームが表示されます。 なんらかのデータを入力します。 緑のプラス記号をクリックするとデータ行を追加できます。 「 Post XML Message」 ボタンをクリックします。 入力データを使用してプロセスが起動されます。 このプロセスは同期プロセスなので、応答はブラウザ・ウィンドウに即座に戻されます。 「 Visual Flow」アイコンを選択して、監査証跡をグラフィカル表示することもできます。 ファイルが出力ディレクトリに書き出されました。 ファイルを検索して、内容を確認します。 出力は、STOCKS_PARTNERスキーマに準拠したXML形式です。 このユースケースでは、BPELプロセスでデータをファイルとして書き出す方法を学習しました。 データをファイル・アダプタ・サービスによって期待される形式に変換しました。 また、プロセスを開始し、手動で入力データを入力することにより、BPELコンソールを使用してサービスをテストする方法についても学習しました。 BPELプロセスを拡張して、別の方法でデータを操作したり、別のサービスからBPELプロセスを呼び出してデータを渡したりすることもできます。 では、最後のユースケースに移りましょう。 JDeveloperに戻って、開いているファイルをすべて閉じてください。 |