Topics
Service-Oriented Architecture
WLIデータベース・イベント・ジェネレータとOracleデータベース・アダプタの比較Nacho Lafuente、Miquel Lopez-Miralpeix著 今回の WLI ユーザーのためのOracle SOA Suite基礎講座では、WebLogic Integrationのデータベース・イベント機能をOracle BPEL Process Managerで実装する方法について説明します。2009年4月公開
この記事には、次のトピックが含まれます。 はじめに情報システムのおもな目的の1つとして、データ処理の自動化があります。 現在のITニーズのほとんどは、データの保管、変換、そして交換に関するものです。 構造化された、アクセス可能な方法で、情報を永続化させるための選択肢として、データベースは圧倒的な普及率を誇ります。 統合作業には、資産を更新したり、イベント通知を受け取ってなんらかの処理をおこなったりするために、データベースとのやり取りが必要になる場合が多くあります。 この記事では、WebLogic Integration(WLI)とOracle SOA Suite、とくにOracle BPEL Process Manager(Oracle BPEL PM)が、データベースから開始されたイベントをどのようにリスニングするかに重点を置いて説明します。 また、イベントが検出されたあとの受信と処理について分析をおこないます。 この記事で提供される情報は、経験豊かなWLIユーザーが、Oracle BPEL PMにおけるデータベース・イベントの概念を理解し、Oracle SOA Suiteを素早く習得できるようにするためのものです。 Oracle BPEL PMについて詳しくは、『 Oracle BPEL Process Manager』を参照してください。 WLIデータベース・イベント・ジェネレータWLIイベント・ジェネレータの概要WLIでは、イベント・ジェネレータ(EG)という概念が採用されています。 イベント・ジェネレータは、関連するシステムで発生したアクティビティに応じてイベントをトリガーします。 特定のイベントが発生すると、イベント・ジェネレータはメッセージ・ブローカ・チャネルを通じて、イベントに関する情報をパブリッシュします。 メッセージ・ブローカ・チャネルは、パブリッシュ処理とサブスクライブ処理をサポートする独立した通信パイプであり、JMSトピックによく似ています。 すべてのイベント・ジェネレータは、WLIプロセスがこのイベントを処理できるように、検出したイベントを監視および通知することを目的としています。 WLIイベント・ジェネレータは、次の2つのアプローチを使用して、システム変更を監視します。
また、イベント・ジェネレータは、デプロイメント・タイプに応じて、クラスタ化することも、固定することも可能です。 クラスタ化に対応したイベント・ジェネレータは、クラスタ内のすべてのインスタンスに対して均等にデプロイされます。 固定イベント・ジェネレータは、クラスタ内のシングル・インスタンスに対してのみデプロイされるため、障害が発生した場合は、別のインスタンスに移行する必要があります。 次の表に、WLI 10.xで現在サポートされているイベント・ジェネレータを示します。
データベース・イベント・ジェネレータのアーキテクチャデータベース・イベント・ジェネレータは、WLI用語ではRDBMSイベント・ジェネレータと呼ばれます。 データベース・イベント・ジェネレータの説明、サポートされる機能、および制限事項について詳しくは、『 RDMBSイベント・ジェネレータ・ユーザーズ・ガイド』を参照してください。 データベース・イベント・ジェネレータは、データベースとの統合機能を提供することで、特定のイベントを検出し、メッセージ・ブローカ・チャネルを介してWLIへ内部的にパブリッシュするように設計されています。 イベント検出をサポートする計画には、イベント・トリガーとSQL Pre/Post 問合せの2種類があります。 イベント・トリガー計画はデータベース・トリガーを利用するように設計されており、イベント・ジェネレータは、挿入/更新/削除された行すべてを検出します。 イベント・ジェネレータがイベント・トリガーを使用するように設定されている場合、ユーザー表に対する変更を検出するトリガーを作成し、その変更をシャドウ表にコピーします。 シャドウ表は、データベース・イベント・ジェネレータが設定されている場合にWLIが作成する補助表であり、まだポーリングされていないイベントの一時ストアとして使用されます。 例 ある企業では、新しい従業員が入社するたびにビジネス・プロセスを開始する必要があります。 従業員の情報は、Oracleデータベースの表に格納されています。 ビジネス・プロセスはWLIを使用して実装されます。処理する必要のあるデータは従業員IDのみです。 従業員表へのデータ挿入を検出するために、WLIのデータベース・イベント・ジェネレータを使用します。 イベント・トリガー計画が選択されているため、WLIは従業員表への挿入に対応するトリガーを作成します。 トリガーは、従業員IDをシャドウ表にコピーしたのち、タイムスタンプなどの内部情報を追加します。 最終的に、イベント・ジェネレータがシャドウ表をポーリングして、最後に挿入された従業員IDを取得します。 この情報はメッセージ・ブローカ・チャネルにパブリッシュされ、WLIビジネス・プロセスが有効化されます。 SQL Pre/Post問合せ計画は、データを選択するカスタムSQL問合せを使用してイベントを検出し、パブリッシュしたあとで、Post問合せを実行するように設計されています。 この計画は、すべての必要情報をトリガーで取得できない場合、たとえば、2つの表を結合した結果得られる情報などに対して推奨されます。
例 あるオンライン・ストアでは、システムに注文が入るたびにビジネス・プロセスを開始する必要があります。 注文情報は、Oracleデータベースの複数の表に分散して格納されています。 ある表には注文した品目が格納されており、別の表には各品目の物理的な場所が、また別の表には一般的な注文情報が格納されています。 ビジネス・プロセスはWLIを使用して実装されます。処理する必要があるのはこれら3つの表から取得したデータです。 注文のフラグが"ready"ステータスに設定されている場合のみ、ビジネス・プロセスが開始されます。 WLIビジネス・プロセスの実行後、このフラグは"done"に変更される必要があります。 このフラグがいつ設定されるかについての保証はなく、挿入や更新とフラグ変更との間に関係性は存在しません。 注文表に対して変更を挿入するために、WLIのデータベース・イベント・ジェネレータを使用します。 ただし、イベント・トリガー計画では、いずれの条件をチェックすることもできないため、効率的ではありません。 WLIプロセスがフラグ・ステータスをチェックできるように、注文が挿入または更新されるたびにイベントを生成することは可能ですが、ここでは、このアプローチは非効率的であると判断しましょう。 この状況を解決するにあたって、SQL Pre/Post問合せ計画の方がはるかに効率的だと考えられます。 Pre問合せには、注文、場所、そして品目の情報を結合するSELECT文を設定することになるでしょう。 Post問合せでは、注文フラグを"processing"に変更するUPDATE文を実行します。 データベース・イベント・ジェネレータのポーリングにより、最終的に、Pre問合せが実行され、数行の情報が取得されます。 この情報は、メッセージ・ブローカ・チャネルにパブリッシュされます。 取得された情報のそれぞれの行に対して、データベース・イベント・ジェネレータはPost問合せを実行し、フラグを"processing"ステータスに変更します。 次に、WLIビジネス・プロセスが有効化され、正しく終了すると、ステータス・フラグは"done"に更新されます。 次に、データベース・イベント・ジェネレータのアーキテクチャを論理的に見た図を示します。 ユーザー情報は緑、データベース・イベント・ジェネレータのアーチファクトはオレンジ、ユーザー・アプリケーションのアーチファクトは青で表示されています。 データベース・イベント・ジェネレータは、次の順序で各処理を実行します。
データベース・イベント・ジェネレータの高度な概念データベース・イベント・ジェネレータの設定高度な設定情報について詳しくは、『 イベント・ジェネレータ』を参照してください。 データベース・イベント・ジェネレータに適用される各種の設定については十分に注意してください。 メッセージ・ブローカ・チャネル データベース・イベント・ジェネレータは、取得した情報をメッセージ・ブローカ・チャネルにパブリッシュします。 この情報は、チャネル・タイプによって、XMLまたはRAW形式で表されます。 次に抜粋したXMLスキーマには、異なるメッセージ・ブローカ・チャネル定義が示されています。
<?xml version="1.0"?>
データベース・イベント・ジェネレータが、コンソールを使用するように設定されている場合、WLIは自動的にXMLスキーマを作成します。このXMLスキーマは、メッセージ・ブローカ・チャネルにパブリッシュされるXMLドキュメントの形式を反映したものです。 このスキーマに定義されたコンテンツは、データベース・イベント・ジェネレータが取得した表の列に応じて変わります。 このXMLスキーマは、イベント・ジェネレータ・ルールに従う名前をもつディレクトリ内のドメイン・ルートに配置できます。 デフォルトでこのXMLスキーマにつけられる名前は、TableRowSet.xsdです。 スキーマにより、最上部要素として、TableRowSetというラッパーが定義されます。 この最上部要素の目的は、1つのXMLドキュメント内に複数の行を表すことにあります。そうすることで、メッセージ・ブローカ・チャネル対して1度パブリッシュするだけで、同時に多数の行を表すことができます。 それぞれの行は、TableRow要素内に含まれます。 次に、XMLスキーマの例を示します。 1回のポーリングとイベントで処理できる最大行数データベース・イベント・ジェネレータでは、1回のポーリングで処理できるイベント数と行数を制限できる設定パラメータが提供されています。 この機能を利用するには、データベース・ベンダー側で、返される行の最大数を制限する必要があります。 一部のデータベース・ベンダーでは、この機能をサポートしていないことに注意してください。 この動作を制御するのは、次の2種類のパラメータです。
次の例を使用して、これらのパラメータについて検討してみましょう。 データベース・イベント・ジェネレータのポーラーが有効化されており、 問合せ対象のデータベースには、500レコードをもつ表が含まれます。 次の表では、パブリッシュされるイベントの数とコンテンツに対して、上記パラメータがどのように影響を及ぼすかについて示します。
トランザクションの動作すべてのWLIプロセスはトランザクション型であり、この動作により、データベースのイベント処理にもメリットがあります。 WLIは、トランザクションをサポートおよび実施するため、Oracle WebLogic Server JTAを活用しています。 すべてのWLIプロセスにより、暗黙的トランザクションが定義され、ここからプロセスの有効化が開始されます。 問題なく終了すると、トランザクションはコミットされますが、なんらかのエラーが発生した場合、トランザクションはロールバックされます。 WLIメッセージ・ブローカは、WebLogic JMSをベースとしていますが、トランザクション型の動作もサポートしています。 データベース・イベント・ジェネレータは、内部的にJMSトランザクションを利用することで、イベントがトランザクション内で処理されるようにします。 データベース・イベント・ジェネレータはMDB(Message Driven EJB)として実装され、EJBコンテナのトランザクション機能を利用します。 次の図に、データベース・イベント・ジェネレータを使用する際のトランザクション境界を示します。 メッセージ・ブローカにより、このプロセスに含まれるトランザクションの境界が設定されます。 トランザクション#1は、イベント・ジェネレータの内部処理に関連するトランザクションです。 このトランザクションは、イベント・ジェネレータが有効化されると開始され、データベース処理、イベント作成、およびイベントのパブリッシュが含まれます。 エラーが発生しない場合、トランザクションはコミットされます。 なんらかのエラーが確認されると、トランザクションはロールバックされるため、データベースでの変更は破棄され、イベントはパブリッシュされません。 メッセージ・ブローカは、イベント処理からイベント生成を切り離します。 トランザクション#2は、WLIエンジンによってWLIプロセスの新規インスタンスが起動されると開始されます。このWLIプロセスは、データベース・イベントを含むメッセージ・ブローカ・チャネルをサブスクライブしているものです。 メッセージ・ブローカから取得したイベントが、WLIプロセスによって問題なく処理された場合、トランザクションはコミットされます。それ以外の場合、トランザクションはロールバックされます。 Oracleデータベース・アダプタOracle Application Server Adaptersの概要SOAソリューションに最適なOracle Application Server(Oracle AS) Adaptersは、Oracle Fusion Middlewareのコンポーネントであり、200以上のパッケージ・アプリケーションに対して、堅牢かつスケーラブルで柔軟な接続プラットフォームを提供します。 Oracle AS Adapters、Oracle BPEL PMなどのOracle SOA SuiteコンポーネントやJEEアプリケーションからも使用できます。 Oracle SOA Suiteのほかのアプリケーションと同様、Oracle AS Adaptersは、Websphereをはじめとする、WebLogicおよびOC4J以外のプラットフォームでも実行できます。 Oracle AS Adaptersは、新規アプリケーションと統合可能なサービスとして既存資産をパブリッシュすることで、これらの資産の再利用を可能にするとともに、"統合の最後の1マイル"を提供します。 Oracle AS Adaptersは、基盤となるバックエンド・アプリケーションをサービスとしてパブリッシュし、Oracle Fusion Middleware製品から起動可能なWSDLファイルの形にします。 Oracle AS Adaptersは、Web Service Definition Language(WSDL)、Web Service Invocation Framework(WSIF)、Java Connector Architecture(JCA)、XMLといった、各種の標準をサポートしています。 アプリケーション間の通信を容易にするために、アダプタが提供するサービスには、次の種類があります。
|