Topics
Service-Oriented Architecture
WLIデータベース・イベント・ジェネレータとOracleデータベース・アダプタの比較Nacho Lafuente、Miquel Lopez-Miralpeix著 2009年4月公開
「 Receive Data」タブを選択し、イベント情報を一時的に保管する場所を選択します。 このプロセスは新しく作成されたものであり、変数は指定されていないため、新しく作成する必要があります。 "Select variables to assign"コンボ・ボックスから「 Create a new variable」オプションを選択します。 作成する必要のある変数のタイプはXMLであり、名前には"inputEvent"を指定します。 WLIにより、受信イベントを表すXMLドキュメントがこの変数に割り当てられます。 WLIプロセスを終了するには、Performノードを挿入して、"inputEvent"変数の値を出力します。 Node Paletteから「 Perform」ノードを選択し、メイン・ウィンドウのプロセス定義にドラッグして、最初のノードとFinishノードの間にドロップします。 結果のプロセスは、次のようになります。 「 Perform」ノードをダブルクリックしてから、「 View code」 リンクをクリックして、このノードのプロセス・ソース・コードを表示します。 次のコードを使用して、変数の値を出力します。
public void perform() throws Exception {
WLIプロセスのテスト実際のデータベース・イベントを受信する前に、新しく作成したWLIプロセスのユニット・テストをおこないます。 テストの前に、WLIプロセス・アプリケーションを実行中のドメインにデプロイしておく必要があります。 はじめに、手動またはOracle Workshop for WebLogicを使用して、WLIドメインを開始します。 Oracle Workshop for WebLogicを使用してWLIドメインを開始し、サーバーにアプリケーションを追加するには、以下の手順に従います。
<26-mar-2009 19H47' CET> <Info> <WebLogicServer> <BEA-000377>
x0テキスト・ボックスに任意の有効なXMLを入力してから、「 subscription」ボタンをクリックします。 このサンプルでは、<foo/>XMLドキュメントが使用されています。 サーバー・ログは、次のような行を表示します。
DatabaseEG inputEvent: <foo/>
このトレース情報により、XMLドキュメントがメッセージ・ブローカ・チャネルに公開されると、WLIプロセスが起動されたことがわかります。 データベース・イベント・ジェネレータの作成ここでは、実際のデータベース・イベント・ジェネレータを設定して、WLIプロセスがデータベースからイベントを受信できるようにします。 イベント・ジェネレータの設定に使用するWLI Administration Consoleは、
WLIコンソールを開き、左側のメニューから「 Event Generators」を選択します。 「 RDBMS」 →「 Create New」の順にクリックして、新しいデータベース・イベント・ジェネレータを作成します。 ジェネレータ名として"databaseEG"を入力し、「 Submit」をクリックします。 「 Define a New Channel Rule」をクリックして、メッセージ・ブローカ・チャネルに対してデータベース・イベントをパブリッシュする、特定のイベント・ジェネレータを作成します。 共通のイベント・プロパティに、次の情報を入力します。 このサンプルの目的から、Trigger Event Typeが選択されます。 このデータベース・イベント・ジェネレータは、HR.EMPLOYEES表に新しい従業員が追加されるたびに、新規イベントをパブリッシュするように設定されます。 別のスキーマを使用している場合、表の名前を変更してください。 「 Table Name」リンクをクリックして、所定の表を選択します。 スキーマ、オブジェクト・タイプ(TABLE)へと移動し、最後に「 EMPLOYEES」表を選択します。 または、"Table Name"テキスト・ボックスにHR.EMPLOYEESと入力することもできます。 データベース・イベント・ジェネレータの設定を完了するには、新しく行が挿入された際に、どの列を選択するかを指定する必要があります。 「 Select table columns to publish..」リンクをクリックすると、次のダイアログが表示されます。 「 Check All Columns」をクリックしてから「 Submit」をクリックして、すべての列をパブリッシュします。 次に、メイン・フォームで「 Submit」をクリックして、イベント・ジェネレータの設定を終了します。 新しくデータベース・イベント・ジェネレータが作成され、すでに実行されていることが次の表からわかります。 .機能テストここまでで、ユースケース全体をテストするための設定が完了しました。 コマンド・プロンプトで次の内容を入力して、HR.EMPLOYEES表に新規従業員を挿入します。
C:\WINDOWS>sqlplus HR/HR
イベント・ジェネレータのポーラーは、30秒の頻度を使用するように設定されています。 この時間が経過すると、サーバー・ログに次のトレース情報が表示されます。
DatabaseEG inputEvent: <TableRowSet xsi:schemaLocation="http://www.bea.com/
このトレース情報から、設定したデータベース・イベントが検出され、WLIにパブリッシュされたことがわかります。 WLIプロセスによりイベントが受信され、イベントを表すXMLドキュメントが出力されました。 Oracle BPEL PMでのユースケースの実装この章では、同じユースケースをOracle BPEL PMで実装していきます。 このユースケースでは、HIRE_DATE列に基づいて、新規従業員が取得されます。 次に、その手順を示します。
ここまで実行すると、プロセスをデプロイする準備が整います。 シーケンス表ヘルパー表に最終処理日を保管しておくことで、この表に保管された日付よりも新しいHIRE_DATEをもつ従業員を探すことができます。 ヘルパー表を作成するためのSQL文は、次のようになります。
CREATE TABLE SEQUENCING_HELPER (TABLE_NAME VARCHAR2(32) NOT
BPELプロセスステップ0-Oracle JDeveloperのインストール このステップは非常に簡単です。 OTNへアクセスして、Oracle JDeveloper 10gをダウンロードしたら、これを解凍するだけで完了です。 ステップ1-Oracle JDeveloperの起動 「 jdeveloper.exe」をダブルクリックします。 ステップ2-アプリケーションの作成 「 File」→「 New ...」→「 Application」の順に選択します。 詳細情報を入力してから、Application Templateで「 No Template」を選 択します。 ステップ3-BPELプロジェクトの作成 「 File」→「 New ...」の順に選択します。 最小限のプロジェクト情報(名前や名前空間など)とサービス・タイプ(ここではempty)を入力します。 DBAdapterパートナー・リンクステップ1-サービス一覧から「 DB Adapter」をドラッグ・アンド・ドロップし、サービス名を入力します。 ステップ2-データベース接続を指定します。 スキーマ情報を検索するためのデータベース接続をOracle JDeveloperのconnectionタブで作成していない場合、ここで作成する必要があります。 接続のJNDI名には、アプリケーション・サーバーで定義したものを指定する必要があることに注意してください(一致する名前がない場合、Oracle JDeveloper接続の詳細情報が実行時に使用されます)。 ステップ3-サービス・タイプとして「 Poll for New or Changed Records in a Table」 を指定します。 ステップ4-従業員表を選択してから「 Import tables ...」ボタンをクリックして、この表をインポートします。 ステップ5-不要な関係はすべて削除します(例:すべてを削除)。 ステップ6-必要な属性を選択します(例:すべてを選択)。 ステップ7-ポーリング計画として、 「 Update a Sequencing Table」を選択します。 ステップ8-ヘルパー表の詳細情報を入力します。 ステップ9-トランザクションと実行時のオプションを指定します(例:ポーリング頻度)。 ステップ10-行のポーリングに使用されるSELECT文を確認します。 アクティビティの受信BPELプロセスにReceiveアクティビティを作成して、インバウンドのDBAdapterパートナー・リンクによって生成されたメッセージを受信する必要があります。 ステップ1-Process Activitiesパレットから、「 Receive」アクティビティをドラッグ・アンド・ドロップします。 ステップ2-パートナー・リンクへ関連づけます(左側の矢印をパートナー・リンクにドラッグします)。 ステップ3-名前を変更し、「 Create Instance」チェック・ボックスにチェックをつけます。 ステップ4-「 OK」をクリックして、新しい変数を作成します(上記スクリーンショットを参照)。 ここまでで、プロセスをOracle BPEL PMサーバーに デプロイして、テストする準備が整いました。 データベースに新しく行を作成すると(WLI機能テストの項で説明したとおり)、 BPELコンソールに新しいインスタンスが表示されます。 重要なポイントと推奨事項使用するポーリング計画が異なるとはいえ、WLIとOracle BPEL PMは両方とも同じような方法でデータベースとやり取りでき、どちらのツールでもデータベース・イベントに相当するプロセス・インスタンスを作成できます。 Oracle BPEL PMは、データベースから受信するイベントに基づいた"インバウンド"・インタラクションを作成しますが、一方で、WLIでは、これらのイベントを受信するためにデータベース・イベント・ジェネレータの設定が必要になります。 また、Oracle BPEL PMは、BPELプロセス・インスタンスによって実行される任意のオンデマンド処理から"アウトバウンド"・インタラクションを作成しますが、WLIにはプロセス・インスタンスにおけるアウトバウンド処理に相当する概念がありません。 インバウンド処理に関して、WLIは2種類のトランザクションを生成することに注意が必要です。 1つはメッセージの収集用であり、もう1つは関連プロセスの実行用です。 Oracle BPEL PMも同じやり方で動作しますが、必要に応じて、両方の処理を同じトランザクションで実行することもできます。 また、Oracle BPEL PMでは、インバウンド・インタラクションを生成する方法が幅広く用意されていますが、 WLIでは2種類のポーリング計画に限定されています。 さらに、Oracle DBAdapterでは、関連する複数の表からネストしたXMLへのマッピングがサポートされています。 WLIで使用できるのはフラットなXMLマッピングのみであり、とくにアウトバウンド選択がサポートされていないため、これらはきわめて限定的になります。 組込みのO/Rマッピング・ツールであるTopLinkもまた、重要な差別化要素です。 TopLinkがもたらすおもな利点は、データベース・プラットフォームの移植性とサード・パーティ製データベースのサポートです。 最後に、Oracle DBAdapterのSQL抽象化により、SQLのコーディングは不要になります。 これにより、保守性が向上するだけでなく、たとえば、同じサービスを、あるケースではDB2に、また別のケースではOracleデータベースにデプロイすることが可能になります。 次の表に、Oracle BPEL PMとWLIの特性をまとめます。
|
||||||||||||||||||||||||||||||||||