Oracle Application Server Integration InterConnect ユーザーズ・ガイド 10g リリース2 (10.1.2) B15751-02 |
|
この付録では、Acme社という架空の会社を想定し、OracleAS Integration InterConnectを使用した統合シナリオとモデルについて説明します。項目は次のとおりです。
Acme社の各部署には、M&Aによって複数の注文処理システムが存在しています。プラットフォーム、ソフトウェア、トレーニングなどを含め、これらのシステムの維持はAcme社にとって費用と時間の両面で負担となっています。さらに、システムが統合されていないために、全社レベルでのビジネス分析ができません。
Acme社では、集中型システムを新たに構築しました。統合プロジェクトの第1段階は、従来のシステムの1つに格納されている注文書情報を新しいシステムと同期化することです。
新しい注文処理システムは、Oracle Database 10gを使用し、OracleAS Integration InterConnectデータベース・アダプタを使用してシステムと通信します。
従来の注文処理システムはOracle8iデータベースを使用し、OracleAS Integration InterConnectアドバンスト・キューイング・アダプタを使用してシステムと通信します。
このシステムの注文書表には、変更されたレコードをキューイングするデータベース・トリガーがあります。OracleAS Integration InterConnectは、そのキューをリスニングして統合を完了するように構成されます。
注文書表が格納されている従来のシステムとOracle Database 10gで実行中の新しい注文処理アプリケーションとの統合を希望している組織を考えてみます。図B-1にこの統合のシナリオを示します。
統合のシナリオの第1段階では、統合をモデル化します。
図B-2は、OracleAS Integration InterConnectがどのようにして図B-1のシナリオに統合されるかを示しています。
このタスクを実行するにはどのようにしたらよいでしょうか。
注文処理アプリケーションは、標準のOracleデータベースとOracleAS Integration InterConnect Adapter for DB(データベース・アダプタ)を使用します。
次の項では、iStudioを使用して統合シナリオを実装する方法について説明します。
ソース・システムはOracle Database 10gアドバンスト・キューイングを使用して、注文書表に変更をパブリッシュします。ユーザーは注文書表にデータベース・トリガーを作成します。レコードを更新、挿入または削除してからコミットすると、トリガーは該当するペイロードをエンキューします。OracleAS Integration InterConnectアドバンスト・キューイング・アダプタは、このキューをリスニングするように構成されます。
次にデータベース・トリガーのコード例を示します。
CREATE OR REPLACE TRIGGER AQAPP.ENQUEUE_PO
AFTER INSERT OR DELETE OR UPDATE ON AQAPP.PURCHASE_ORDER FOR EACH ROW
DECLARE
qname VARCHAR2(20) := 'OUTBOUND_QUEUE';
enqueue_options DBMS_AQ.ENQUEUE_OPTIONS_T;
message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
msgid RAW(16);
recip_agent SYS.AQ$_AGENT;
raw_payload RAW(32767);
payload VARCHAR2(256);
BEGIN
IF INSERTING THEN
payload := '<?xml version="1.0" standalone="no"?>' ||
'<PO_Insert>' ||
'<id>' || :new.id || '</id>' ||
'<action>' || 'I' || '</action>' ||
'<item>' || :new.item || '</item>' ||
'<amount>' || :new.amount || '</amount>' ||
'<quantity>' || :new.quantity || '</quantity>' || '</PO_Insert>';
ELSIF DELETING THEN
payload := '<?xml version="1.0" standalone="no"?>' ||
'<PO_Delete>' ||
'<id>' || :old.id || '</id>' ||
'<action>' || 'D' || '</action>' || '</PO_Delete>';
ELSIF UPDATING THEN
payload := '<?xml version="1.0" standalone="no"?>' ||
'<PO_Update>' ||
'<id>' || :old.id || '</id>' ||
'<action>' || 'U' || '</action>' ||
'<item>' || :new.item || '</item>' ||
'<amount>' || :new.amount || '</amount>' ||
'<quantity>' || :new.quantity || '</quantity>' ||
'<last_updated>'|| :new.last_updated|| '</last_updated>'|| '</PO_Update>';
END IF;
raw_payload := UTL_RAW.CAST_TO_RAW( payload );
DBMS_AQ.ENQUEUE( queue_name => qname
,enqueue_options => enqueue_options
,message_properties => message_properties
,payload => raw_payload
,msgid => msgid );
EXCEPTION
WHEN OTHERS THEN NULL;
END;
プロジェクトとは、統合のシナリオに関係する統合論理のコンテナです。 次の手順は、iStudioを使用してPO_Integration
プロジェクトを作成する方法を示しています。
PO_Integration
と入力し、「OK」をクリックします。 「リポジトリ情報」ダイアログ・ボックスが表示されます。
各アプリケーションには、独自の意味と構文があります。複数のソースからデータを統合するには、意味的に互換性のある共通ビューが必要となります。共通ビューは、ビジネス・オブジェクト内でグループ化され、iStudioで「共通ビュー」ノードの下に置かれるイベントまたはプロシージャです。 このシナリオでは、すべてのイベントがPurchase_Order
ビジネス・オブジェクトの下にグループ化されます。
次の手順は、Purchase_Order
ビジネス・オブジェクトの作成方法を示しています。
Purchase_Order
と入力し、「OK」をクリックします。2つ以上のシステムの間でデータを統合するには、意味的に互換性のあるビュー、つまり共通ビューが必要になります。 このシナリオでは、挿入、更新、削除および取消のイベントがPurchase_Order
ビジネス・オブジェクトの下にグループ化されます。次の4つのイベントを作成する必要があります。
次の手順は、XML DTD(データ型定義)を使用してPO_Insert
イベントを作成する方法を示しています。データベースまたはその他の共通データ型を使用してイベントの構造を記述することもできます。
PO_Insert
と入力します。
PO_Insert_CV.dtd
を選択し、「開く」をクリックします。
PO_Update
、PO_Delete
およびPO_Cancel
の各イベントについても同様の手順を使用しますが、各イベントについて次のXML DTDを正確に代入する必要があります。 PO_Cancel
、PO_Delete
、PO_Insert
およびPO_Update
の各イベントは、図B-3のように「設計」オブジェクト・ナビゲータの「イベント」ノードの下に表示されます。
各イベントには固有のXML DTDがあります。各イベントのコードを次に示します。
PO_Cancel
<!ELEMENT PO_Cancel (id, action, item, amount, quantity)> <!ELEMENT id (#PCDATA)> <!ELEMENT action (#PCDATA)> <!ELEMENT item (#PCDATA)> <!ELEMENT amount (#PCDATA)> <!ELEMENT quantity (#PCDATA)>
PO_Update
<!ELEMENT PO_Update (id, action, item, amount, quantity, last_updated)> <!ELEMENT id (#PCDATA)> <!ELEMENT action (#PCDATA)> <!ELEMENT item (#PCDATA)> <!ELEMENT amount (#PCDATA)> <!ELEMENT quantity (#PCDATA)> <!ELEMENT last_updated (#PCDATA)>
PO_Delete
<!ELEMENT PO_Delete (id, action)> <!ELEMENT id (#PCDATA)> <!ELEMENT action (#PCDATA)>
PO_Insert
<!ELEMENT PO_Insert (id, action, item, amount, quantity)> <!ELEMENT id (#PCDATA)> <!ELEMENT action (#PCDATA)> <!ELEMENT item (#PCDATA)> <!ELEMENT amount (#PCDATA)> <!ELEMENT quantity (#PCDATA)>
iStudioのアプリケーションは、アプリケーションと通信するアダプタのインスタンスを表します。 ユーザーがアダプタをインストールするときに一意の名前が与えられますが、iStudioではこの名前がアプリケーションの名前として使用されます。 この項では、例としてAQAPP
アプリケーションおよびDBAPP
アプリケーションの作成方法を説明します。
次の手順は、iStudioを使用してAQAPP
アプリケーションを作成する方法を示しています。
AQAPP
と入力し、「OK」をクリックします。
同様の手順でDBAPP
アプリケーションを作成します。AQAPP
アプリケーションおよびDBAPP
アプリケーションが、図B-4のように「設計」オブジェクト・ナビゲータの「アプリケーション」ノードの下に表示されます。
各システムには、一意の識別子または主キーがあります。 ほとんどの場合、管理者はシステム構造の変更を許可していません。そのため、相互参照表を使用することによって、両システムのキーを維持しながらその後の更新や削除を相互参照できます。
次の手順は、iStudioを使用してPO_XREF
相互参照表を作成する方法を示しています。表はリポジトリ・スキーマ内に自動作成され、サブスクライブするアプリケーションによって参照されます。WORKFLOW
アプリケーションおよびDBAPP
アプリケーションが、それぞれパブリッシャおよびサブスクライバとして表に追加されます。
PO_XREF
と入力し、「次へ」をクリックします。
PO_XREF
相互参照表が、図B-5のように「設計」オブジェクト・ナビゲータの「相互参照表」ノードの下に表示されます。従来のアプリケーションのデータベース・トリガーであるAQAPP
は、注文書表でレコードが挿入、更新または削除されると、メッセージをパブリッシュします。このプロセスは、OracleAS Integration InterConnect環境の外部で発生します。OracleAS Integration InterConnectアドバンスト・キューイング・アダプタは、このようなメッセージを読み取るように構成されています。iStudioアプリケーションの下で、パブリッシュ・イベントは次のことを行います。
次の手順は、従来のアプリケーション・キューから受信したメッセージの処理方法を示しています。
パブリッシュ・ウィザードの起動パブリッシュ・ウィザードを起動する手順は、次のとおりです。
PO_Insert
イベントをパブリッシュする手順は、次のとおりです。
「インポート」をクリックして「共通ビュー」を選択し、共通ビューから属性をインポートします。 PO_Insert
共通ビュー・イベントの構造が表示されます。アプリケーション・ビューが共通ビューと異なる場合は、データベースまたはXML DTDを使用して構造を定義します。
イベントは、受信されると共通ビューに変換されます。この共通ビューは、どのアプリケーションでもマップできます。1つ以上のイベントの構造が同一の場合、ルーティングが問題となります。イベント・マップは、このような状況のときにルーティングを区別するのに使用されます。アプリケーション・ビューの「アクション」フィールドは、「I」(挿入)、「u」(更新)または「D」(削除)になります。イベント・マップを作成する手順は、次のとおりです。
I
と入力します。
「マッピングの定義」ページを使用して、トランスフォーメーションによってAQAPPビューのフィールドを「共通ビュー」へマップします。このシナリオでは構造が同一なため、ObjectCopy
トランスフォーメーションを使用してすべてのフィールドを一度にマップします。マッピングを新たに定義する手順は、次のとおりです。
PO_Update
およびPO_Delete
の各パブリッシュ・イベントを作成するときも同じ手順を繰り返しますが、手順2および3で次の値を使用します。
DBAPP
アプリケーションは、次の3つのイベントをサブスクライブします。
AQAPP
アプリケーションは、PO_Cancelイベントのみをサブスクライブします。
次の手順は、注文処理アプリケーションでメッセージをサブスクライブする方法を示しています。
サブスクライブ・ウィザードの起動
「相互参照表の作成」で、PO_XREF
の相互参照表を作成しました。この表は、ソース・システムとターゲット・システムの主キーを同期化します。
sub_PO_Insert_OAI_V1
を選択します。SQLコードがボックス内に表示されます。
PROCEDURE sub_PO_Insert_OAI_V1( POID IN OUT LONG, POITEM IN LONG, PRICE IN LONG, QUANTITY IN NUMBER, LAST_UPDATED IN DATE) AS v_poid NUMBER; BEGIN SELECT PO_SEQ.NEXTVAL INTO v_poid FROM dual; POID :=v_POID; INSERT INTO PO VALUES ( v_POID, POITEM, PRICE, QUANTITY, SYSDATE ); COMMIT; END sub_PO_Insert_OAI_V1;
サブスクライブPO_Update
イベントを作成する手順は、次のとおりです。
sub_PO_Update_OAI_V1
を選択します。コードがボックス内に表示されます。
PROCEDURE sub_PO_Update_OAI_V1( POID IN NUMBER, POITEM IN LONG, PRICE IN LONG, QUANTITY IN NUMBER, LAST_UPDATED IN DATE) AS v_poid NUMBER :=poid; v_poitem LONG :=poitem; v_price LONG :=price; v_quantity NUMBER :=quantity; BEGIN UPDATE PO SET poitem = v_poitem, price = v_price quantity = v_quantity, last_updated = sysdate WHERE poid = v_poid; COMMIT; EXCEPTION WHEN OTHER THENS NULL; END sub_PO_Update_OAI_V1;
サブスクライブPO_Deleteイベントを作成する手順は、次のとおりです。
sub_PO_Delete_OAI_V1
を選択します。コードがボックス内に表示されます。
PROCEDURE sub_PO_Delete_OAI_V1( POID IN NUMBER, POITEM IN LONG, PRICE IN LONG, QUANTITY IN NUMBER, LAST_UPDATED IN DATE) AS v_poid NUMBER :=poid; BEGIN DELETE FROM WHERE PO v_poid = poid; COMMIT; EXCEPTION WHEN OTHERS THEN NULL; END sub_PO_Update_OAI_V1;
AQAPP
アプリケーションは、PO_Cancel
イベントをサブスクライブします。
プロセス・バンドルを使用すると、関連するビジネス・プロセスをグループ化して、ユーザー定義のビジネス論理が適用されるOracle Workflow環境に転送できます。
各ビジネス・プロセスによって、関連するパブリッシュ、サブスクライブ、起動および実装などのアクティビティをグループ化して、Oracle Workflowのビジネス・イベント・システムに配置できます。
プロセス・バンドルの作成次の手順は、iStudioを使用してPOプロセス・バンドルを作成する方法を示しています。
PO
と入力し、「OK」をクリックします。
次の手順は、iStudioを使用してPOビジネス・プロセスを作成する方法を示しています。
PO
と入力し、「OK」をクリックします。
Oracle Workflowのビジネス・プロセスでは共通ビューを使用します。そのため、トランスフォーメーションとマッピングは不要で、次のタイプのアクティビティのみが使用されます。
このシナリオでは、PO_Insert、PO_UpdateおよびPO_Deleteの各メッセージがOracle Workflowにルーティングされ、ビジネス論理が適用されます。この論理に基づき、これらのメッセージが注文処理アプリケーションに送信されるか、またはPO_Cancelメッセージが従来のアプリケーションへ送信されます。Oracle Workflowは次の動作を行います。
次の手順は、iStudioを使用してサブスクライブ・アクティビティを作成する方法を示しています。
PO_Update
およびPO_Delete
の各イベントについても同じ手順を繰り返します。ただし必要に応じて値を置き換えてください。
次の手順は、iStudioを使用してパブリッシュ・アクティビティを作成する方法を示しています。
PO_Update
、PO_Delete
およびPO_Cancel
の各イベントについても同じ手順を繰り返します。ただし必要に応じて値を置き換えてください。 サブスクライブおよびパブリッシュの各イベントが、図B-12のように「設計」オブジェクト・ナビゲータのPO
ノードの下に表示されます。
イベントをパブリッシュすると、イベントはデフォルトで自動的にすべてのイベントのサブスクライバにルーティングされます。イベントをメッセージまたはメッセージ・ヘッダーの値に基づいてルーティングする必要がある場合、このシナリオではコンテンツ・ベースのルーティングが必要になります。注文書の変更はすべて承認を受けてOracle Workflowにルーティングし、ビジネス論理を適用する必要があります。
PO_Insert
、PO_Update
およびPO_Delete
の各イベントに適用する論理は、次のとおりです。
この手順をPO_Update
イベントとPO_Delete
イベントについても繰り返します。図B-13に、iStudioでコンテンツ・ベースのルーティングが完成した状態を示します。
Oracle Workflowプロセス・バンドルを配置することにより、次のことができます。
次の手順は、プロセス・バンドルをOracle Workflowに配置する方法を示しています。
このシナリオの当初の要件は次のとおりです。
「挿入、更新および削除などのすべての変更は、管理者が承認しないと注文処理システムに適用できません。変更は承認後、注文処理システムへ送信されます。変更が却下されると、取消し通知が従来のシステムへ送り返されます。」
このビジネス論理はOracle Workflowに実装できます。Oracle Workflowコンポーネントには、次のものが必要です。
iStudioから転送されるコンポーネント
Oracle Workflowコンポーネントでは、通知を作成する必要があります。
通知アクティビティが送信するメッセージ。
各種オブジェクトで参照できる静的な値リスト。たとえばメッセージ属性では、通知の実行者に対して可能なレスポンスのリストを提供する手段として、選択肢タイプを参照できます。
Workflowエンジンが通知アクティビティに達すると、Send() APIコールを通知システムに対して発行し、割り当てられた実行者へメッセージを送信します。実行者が通知アクティビティに応答すると、通知システムがそのレスポンスを処理して、Workflowエンジンに対し通知アクティビティが完了したことを知らせます。
Oracle Workflowには、標準機能を備えた事前定義のアイテム・タイプが用意されています。標準のアイテム・タイプには、ユーザーのアイテム・タイプにコピーできる汎用アクティビティが含まれています。このシナリオでは、選択肢タイプ「承認」を使用します。
先に述べたように、Oracle Workflow Notificationを作成する必要があります。通知には、選択肢タイプとメッセージという2つの依存するオブジェクトがあります。選択肢タイプ(「承認」)は、標準のアイテム・タイプからコピーできます。
次の手順は、Insert_MessageというOracle Workflowメッセージを新たに作成する方法を示しています。
メッセージInsert_Message
をテンプレートとして使用し、デフォルトのコピーおよび貼付け機能を使用して次のメッセージを作成します。
Update_Message
: 同じ設定を使用して前述の手順を繰り返しますが、「挿入」と記載されている部分をすべて「更新」に変更します。
Delete_Message
: 同じ設定を使用して前述の手順を繰り返しますが、「挿入」と記載されている部分をすべて「削除」に変更します。
次の手順は、Oracle Workflow Notificationを新たに作成する方法を示しています。
通知Insert_Notificationをテンプレートとして使用し、デフォルトのコピーおよび貼付け機能を使用して次の通知を作成します。
Update_Notification
: 同じ設定を使用して前述の手順を繰り返しますが、「挿入」と記載されている部分をすべて「更新」に変更します。
Delete_Notification
: 同じ設定を使用して前述の手順を繰り返しますが、「挿入」と記載されている部分をすべて「削除」に変更します。これで必要なオブジェクトがすべて作成されたので、ビジネス論理をモデル化できます。次の手順は、このプロセスを示しています。
プロセスの詳細は、OAIビジネス・プロセス: POをダブルクリックして表示することもできます。
次のイベントをサブスクライブします。
次のイベントをパブリッシュします。
次の通知を割り当てます。
Subscribe Purchase_Order.PO_Insert
とInsert_Notification
間にマッピング・ラインを描きます。
Insert_Notification
とパブリッシュ・イベントPublish Purchase_Order.PO_Insert
との間にマッピング・ラインを描きます。ラインを描くと表示されるリストから「承認」を選択します。
Insert_Notification
とパブリッシュ・イベントPublish Purchase_Order.PO_Cancel
との間にマッピング・ラインを描きます。ラインを描くと表示されるリストから「否認」を選択します。
ビジネス・オブジェクトをモデル化した後、OracleAS Integration InterConnectのビジネス・オブジェクトを配置します。次の項では、配置プロセスについて説明します。
iStudioのAQAPPアプリケーションは、従来のアプリケーションと通信するアドバンスト・キューイング・アダプタに対応しています。従来のアプリケーションはOracleアドバンスト・キューイングを使用し、挿入、更新および削除されたレコードをデータベース・トリガーによってキューに入れます。OracleAS Integration InterConnect環境との間で通信を行うには、これらの外部キューで送受信できるようにアダプタを構成する必要があります。
次の手順はこのタスクを示しています。
キュー名 | イベント |
---|---|
INBOUND_QUEUE |
PO_Cancel |
OUTBOUND_QUEUE |
PO_Insert、PO_UpdateおよびPO_Delete |
各アダプタでは、リポジトリとの通信を最小限にしてパフォーマンスを向上させるために、様々なキャッシュ設定が行われています。メタデータの更新後に、アダプタとリポジトリのメタデータを同期化する必要があります。次の手順でこのタスクを説明します。
アダプタ・タイプによっては、ファイルにエクスポートし、ターゲットのアプリケーション・データベースにインストールする必要のあるコードがあります。 次の手順は、iStudioの「アプリケーションのエクスポート」ダイアログ・ボックスを使用してコードをエクスポートする方法を示しています。
結果のテキスト・ファイルは、ターゲット・スキーマで実行されるSQL*Plusスクリプトです。
コードのエクスポートおよびインストールについて、次の例を使用して説明します。この例では次の条件があります。
DBAPP
PO_Delete
PROCEDURE sub_PO_Delete_OAI_V1 ( POID IN NUMBER, POITEM IN LONG, PRICE IN LONG, QUANTITY IN NUMBER, LAST_UPDATED IN DATE,) AS v_poid NUMBER :=poid; BEGIN DELETE FROM PO WHERE v_poid = poid; COMMIT; EXCEPTION WHEN OTHERS THEN NULL; END sub_PO_Delete_OAI_V1;
最終段階として、統合をテストします。
OUTBOUND_QUEUE
に入れます。
このプロセスを、更新や削除についても繰り返します。
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|