この章では、SOAコンポジット・アプリケーションでメッセージにトラッキング可能なフィールドを実装する手段を提供する、コンポジット・センサーを定義する方法について説明します。ここでは、ビジネス・イベントをサブスクライブしているバインディング・コンポーネントおよびサービス・コンポーネント上でセンサーを定義する方法について説明します。また、制限についても説明します。
この章では、次の項目について説明します。
BPELプロセスにおけるアクティビティ、フォルト、変数の各センサーの詳細は、第18項「Oracle BPEL Process Managerセンサーの使用」を参照してください。
コンポジット・センサーは、メッセージにトラッキング可能なフィールドを実装する手段を提供します。コンポジット・センサーを使用すると、次のタスクを実行できます。
受信メッセージおよび送信メッセージを監視できます。
Oracle Enterprise Manager Fusion Middleware Controlで、SOAコンポジット・アプリケーションの「インスタンス」ページにある検索ユーティリティで、コンポジット・センサーの詳細を指定できます。この処理によって、特定のインスタンスを検索できます。
Oracle Enterprise Manager Fusion Middleware Controlで、SOAインフラストラクチャの「インスタンス」ページにある検索ユーティリティで、SOAコンポジット・アプリケーションのインスタンスに含まれるコンポジット・センサーを指定します。
受信メッセージおよび送信メッセージから計算されたJMSデータをパブリッシュします。
ビジネス・イベント・サブスクリプションによって開始されたコンポジット・インスタンスを追跡します。
コンポジット・センサーは、Oracle JDeveloperでビジネス・イベント・サブスクリプションがあるサービス・バインディング・コンポーネントおよび参照バインディング・コンポーネント、またはサービス・コンポーネントに定義します。この機能は、BPELプロセスの変数センサーに類似しています。実行時に、コンポジット・センサー・データはデータベースに維持されます。
Oracle Enterprise Manager Fusion Middleware Controlでのコンポジット・センサーの検索の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のSOAインフラストラクチャ・レベルでのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項およびアプリケーション・ホーム・ページからのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項を参照してください。
コンポジット・センサーの使用に関して、次の制限に注意してください。
関数はペイロードでのみ使用できます。たとえば、concat()
などのXPath関数はプロパティでは使用できません。
式を使用するコンポジット・センサーは常に、値を文字列として取得します。この処理のため、検索で使用できるのはlike
比較演算子のみです。また、値が数値の場合でも、他の<
、>
、=
など論理演算子やこれらの組合せを使用することはできません。
コンポジット・センサーでは、Enterprise ManagerおよびJMSの2つのタイプのセンサー・アクションのみがサポートされます。
Webサービス・バインディングに対しては、ヘッダー・ベースのセンサーのみがサポートされています。
Oracle B2B、サービス・データ・オブジェクト(SDO)、Web Services Invocation Framework (WSIF)およびOracle Business Activity Monitoringのバインディングに対するセンサー・アクションは、サポートされていません。
センサー値の型は次のいずれかになります。
次のスカラー型
STRING
NUMBER
DATE
DATE_TIME
複合XML要素
フィルタリング用のXPath式を作成する場合は、ノードセットを返すすべての関数を文字列として明示的にキャストする必要があります。
xpath20:upper-case(string($in.request/inp1:updateOrderStatus/inp1:orderStatus) ) = "PENDING"
センサーは、ビジネス・イベントをサブスクライブするサービス・コンポーネント上でのみ構成できます。サブスクライブされたビジネス・イベントがサービス・コンポーネントに関連付けられていない場合、センサーを構成するオプションは使用できません。
ビジネス・イベントを公開するサービス・コンポーネント上でセンサーを構成することはできません。
ビジネス・イベント・ヘッダーに基づいたセンサーは許可されません(ペイロードのみが許可されます)。
PL/SQLサブスクリプションはサポートされていません。
SOAコンポジット・エディタで、SOAコンポジット・アプリケーションの次のコンポーネントにセンサーを追加します。
サービス・バインディング・コンポーネントまたは参照バインディング・コンポーネント
ビジネス・イベントをサブスクライブしているBPELプロセスやOracle Mediatorなどのサービス・コンポーネント
コンポジット・センサーを追加する手順は、次のとおりです。
次のいずれかのオプションを使用して、SOAコンポジット・エディタでコンポジット・センサーを追加します。
「公開されたサービス」または「外部参照」スイムレーン、あるいはビジネス・イベントをサブスクライブしているサービス・コンポーネントで特定のサービスまたは参照バインディング・コンポーネントを右クリックします。ビジネス・イベントをサブスクライブしているサービス・コンポーネントには、サブスクライブ済という語が含まれます。
「センサーの構成」を選択します。
注意: 「センサーの構成」オプションが表示されるためには、サービス・コンポーネントにすでにビジネス・イベントがサブスクライブされている必要があります。 |
バインディング・コンポーネントを選択すると、図50-1に示す詳細が「コンポジット・センサー」ダイアログに表示されます。この例では、サービス・バインディング・コンポーネントが選択されています。
サービス・コンポーネントを選択すると、図50-2に示す詳細が「コンポジット・センサー」ダイアログに表示されます。
バインディング・コンポーネントまたはサービス・コンポーネントを選択し、「追加」アイコンをクリックします。
または、
図50-3に示すように、SOAコンポジット・エディタ上部にある「コンポジット・センサー」アイコンをクリックします。
図50-4に示すように、SOAコンポジット・アプリケーションの「コンポジット・センサー」ダイアログが表示されます。このオプションでは、SOAコンポジット・アプリケーションの、サブスクライブされたビジネス・イベントがあるすべてのサービスおよび参照のバインディング・コンポーネントとサービス・コンポーネントが表示されます。
コンポジット・センサーを追加するサービス、参照またはビジネス・イベントを選択し、「追加」アイコンをクリックします。
サービスなどのバインディング・コンポーネントを選択すると、図50-5に示すように「コンポジット・センサーの作成」ダイアログが表示されます。
図50-5 サービス・バインディング・コンポーネントの「コンポジット・センサーの作成」ダイアログ
ビジネス・イベント・サブスクリプションがあるサービス・コンポーネントを選択すると、図50-6に示すように「コンポジット・センサーの作成」ダイアログが表示されます。
表50-1に記載されている詳細を入力します。
表50-1 「コンポジット・センサーの作成」ダイアログ
名前 | 説明 |
---|---|
名前 |
コンポジット・センサーの名前を入力します。「式」フィールドの「編集」アイコンを使用可能にするには、名前を入力する必要があります。 |
サービス |
サービス名が表示されます。このフィールドが表示されるのは、サービス・バインディング・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。 サービス・センサーは、サービスが外部または別のコンポジット・アプリケーションから受信するメッセージを監視します。 |
参照 |
参照名が表示されます。このフィールドが表示されるのは、参照バインディング・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。 参照センサーは、参照が外部または別のコンポジット・アプリケーションに送信するメッセージを監視します。 |
操作 |
サービスまたは参照のポート・タイプに対する操作を選択します。このフィールドは、サービスまたは参照バインディング・コンポーネントに対してのみ表示されます。 |
イベント |
サービス・コンポーネントの名前が表示されます。このフィールドが表示されるのは、サービス・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。 イベント・センサーはビジネス・イベントによって開始されたコンポジット・インスタンスを追跡します。ビジネス・イベントごとに複数のセンサーを作成できます。 |
イベント・タイプ |
「サブスクライブ」ビジネス・イベント・タイプが表示されます。このフィールドは編集できません。パブリッシュ・ビジネス・イベント・タイプはサポートされていません。 |
式 |
「編集」アイコンをクリックすると、作成する式のタイプを選択するドロップダウン・リストが起動します。
|
フィルタ |
「編集」アイコンをクリックすると、式用のXPathフィルタを作成する「式ビルダー」ダイアログが起動します。このフィールドを使用可能にするには、最初に式を作成する必要があります。 たとえば、 $in.inDict/tns:inDict/ns2:KeyValueOfstringstring/ns2:Value > 10000.00 |
コンポジット・センサー・アクション |
サポートされているセンサー・アクションを表示します。この機能を使用すると、ランタイム・センサー・データを格納できます。「Enterprise Manager」と「JMSキュー」または「JMSトピック」のいずれかとの両方を選択できます。
注意: 「JMSキュー」および「JMSトピック」を選択すると、コンポジット・センサー・データ(XMLペイロード)はOracle Business Activity Monitoring (BAM)やOracle Complex Event Processing (CEP)など他のコンシューマでも使用できるようになります。どちらを選択した場合も、Oracle WebLogic ServerによるJMSサポートが使用され、『Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド』の説明にあるようなOracle SOA Suite JMSアダプタは使用されません。JMSメッセージはOracle WebLogic Server管理コンソールで表示できます。 Oracle BAMでのセンサー・データの使用の詳細は、第53章「Oracle BAMとSOAコンポジット・アプリケーションの統合」を参照してください。 |
完了後に「OK」をクリックします。
サービスまたは参照バインディング・コンポーネントでは、図50-7に示すように、コンポジット・センサー・アイコンが右上隅に表示されます。
サービス・コンポーネントでは、図50-8に示すように、コンポジット・センサー・アイコンも右上隅に表示されます。
コンポジット・センサー・アイコンの上にカーソルを置くと、コンポジット・センサーに関する詳細が表示されます。
図50-9に示す「XPath式の選択」では、トラッキングする要素を選択できます。
変数を追加する手順は、次のとおりです。
ツリーを開き、トラッキングする要素を選択します。
完了後に「OK」をクリックします。
図50-10に示す「式ビルダー」ダイアログでは、トラッキングする式を作成できます。
式を追加する手順は、次のとおりです。
トラッキングする要素のXPath式を作成します。
完了後に「OK」をクリックします。
図50-11に示す「プロパティの選択」ダイアログでは、トラッキングする正規化されたメッセージ・ヘッダー・プロパティを選択できます。
プロパティを追加する手順は、次のとおりです。
トラッキングする正規化されたメッセージ・ヘッダー・プロパティを選択します。
完了後に「OK」をクリックします。
正規化されたメッセージの詳細は、付録H「正規化されたメッセージのプロパティ」を参照してください。
コンポジット・センサーに重複する名前を使用する場合は、次の詳細に注意してください。
重複する名前を持つコンポジット・センサーを作成すると、定義の内容全体が比較されます。重複する名前は、1つ以上の追加パラメータが異なる場合に許可されます(たとえば、異なる構成タイプや異なる式、フィルタ、操作名など)。重複する名前が許可されるためには、定義で何かが異なっている必要があります。
重複するセンサー定義がある場合は、最後に実行されたセンサー値のみが維持されます。このため、相互に排他的なパスに対してこのタイプの構成を使用できます(たとえば、コンポジットはサービス1またはサービス2によって起動されます)。したがって、両方のサービスで同じセンサー名を定義できます。ただし、サービス1と参照1に同じ名前を定義した場合、参照1のセンサー値(最後に実行されたセンサー)のみが格納されます。
通常は、同じ名前の複数のセンサーを使用して、異なるソースから抽出された同じ論理エンティティを指します(たとえば、Oracle Enterprise Manager Fusion Middleware Controlでは、最終的なセンサー値が表示されます)。このため、異なるソースから電子メール値と社会保障値を抽出する場合に同じセンサー名を使用すると、混乱を招く可能性があります。
センサー・アクションは、同じセンサー名のすべての発生に適用されます。この状況は、最近定義された同じ名前のセンサーのセンサー・アクションが優先されることを意味します。
例50-1のsensor.xml
に示すシナリオでは、次のことが指定されています。
Service1
という名前に最初の2つのセンサーは同一です。さらに、構成タイプはどちらもserviceConfig
(サービス・バインディング・コンポーネントで定義されたコンポジット・センサー)です。したがって、センサーは1つのエントリになります(2番目のセンサーは無視されます)。
Service1
という名前の3番目のセンサーは、異なる構成タイプeventConfig
(ビジネス・イベントで定義されたコンポジット・センサー)を持ちます。したがって、このセンサーは別のエントリで表されます。
PurchaseOrder
Id
という名前の2つのセンサーは、構成タイプが異なります(eventConfig
およびserviceConfig
)。したがって、これらは別のエントリで表されます。
PurchaseOrder
という名前の2つのセンサーは、構成タイプは同じ(eventConfig
)ですが、式は異なります。したがって、これらは別のエントリで表されます。
例50-1 複数のエンドポイントがある重複するコンポジット・センサー
<sensors xmlns="http://xmlns.oracle.com/bpel/sensor"> <sensor sensorName="Service1" kind="service" target="undefined" filter=""> <serviceConfig service="OrderPublisher_ep" expression="$in.property.tracking.ecid" operation="execute" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/> </sensor> <sensor sensorName="Service1" kind="service" target="undefined" filter=""> <serviceConfig service="OrderPublisher_ep" expression="$in.property.tracking.ecid" operation="execute" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/> </sensor> <sensor sensorName="Service1" kind="event" target="undefined" filter="" xmlns:po="http://www.mycompany.com/ns/order"> <eventConfig component="EventMediator" expression="$in/po:PurchaseOrder/po:OrderID" event="{http://mycompany.com/events/orders}OrderReceivedEvent" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/> <sensor sensorName="Event1" kind="event" target="undefined" filter=""> <eventConfig component="EventMediator" actionType="Subscribe" expression="$in.property.tracking.ecid" event="{http://mycompany.com/events/orders}OrderReceivedEvent" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/> </sensor> <sensor sensorName="PurchaseOrder Id" kind="event" target="undefined" filter="" xmlns:po="http://www.mycompany.com/ns/order"> <eventConfig component="EventMediator" expression="$in/po:PurchaseOrder/po:OrderID" event="{http://mycompany.com/events/orders}OrderReceivedEvent" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/> </sensor> <sensor sensorName="PurchaseOrder Id" kind="service" target="undefined" filter=""> <serviceConfig service="OrderPublisher_ep" expression="$in.property.tracking.ecid" operation="execute" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/> </sensor> <sensor sensorName="PurchaseOrder" kind="event" target="undefined" filter="" xmlns:po="http://www.mycompany.com/ns/order"> <eventConfig component="EventMediator" expression="$in/po:PurchaseOrder" event="{http://mycompany.com/events/orders}OrderReceivedEvent" outputDataType="PurchaseOrder" outputNamespace="http://mycompany.com/events/orders"/> </sensor> <sensor sensorName="PurchaseOrder" kind="event" target="undefined" filter="" xmlns:po="http://www.mycompany.com/ns/order"> <eventConfig component="EventMediator" expression="$in/po:PurchaseOrder/po:OrderID" event="{http://mycompany.com/events/orders}OrderReceivedEvent" outputDataType="string" outputNamespace="http://www.w3.org/2001/XMLSchema"/> </sensor> </sensor> </sensors>
実行時に、Oracle Enterprise Manager Fusion Middleware Controlでコンポジット・センサー・データを監視できます。
コンポジット・センサー・データは、SOAコンポジット・アプリケーションのフローのトレースに表示されます。
コンポジット・センサー・データは、SOAコンポジット・アプリケーションの「インスタンス」ページで検索できます。
コンポジット・センサーは、SOAインフラストラクチャの「インスタンス」ページで検索できます。
Oracle Enterprise Manager Fusion Middleware Controlでのコンポジット・センサーの検索の詳細は、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』のSOAインフラストラクチャ・レベルでのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項およびアプリケーション・ホーム・ページからのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項を参照してください。