53 コンポジット・センサーの定義
この章の内容は次のとおりです。
BPELプロセスにおけるアクティビティ、フォルト、変数の各センサーの詳細は、「センサーと分析の使用」を参照してください。
ビジネス・シナリオでのコンポジット・センサーの使用例は、『Oracle SOA Suiteの理解』を参照してください。
53.1 コンポジット・センサーの概要
コンポジット・センサーは、メッセージにトラッキング可能なフィールドを実装する手段を提供します。コンポジット・センサーを使用すると、次のタスクを実行できます。
-
受信メッセージおよび送信メッセージを監視できます。
-
Oracle Enterprise Manager Fusion Middleware ControlのSOAインフラストラクチャ、パーティションおよびSOAコンポジット・アプリケーションの「フロー・インスタンス」ページにある検索ユーティリティで、コンポジット・センサーの詳細を指定します。このアクションにより、コンポジット・センサーを含む特定インスタンスの詳細を表示できます。
-
受信メッセージおよび送信メッセージから計算されたJMSデータをパブリッシュします。
-
ビジネス・イベント・サブスクリプションによって開始されたコンポジット・インスタンスを追跡します。
コンポジット・センサーは、Oracle JDeveloperでビジネス・イベント・サブスクリプションがあるサービス・バインディング・コンポーネントおよび参照バインディング・コンポーネント、またはサービス・コンポーネントに定義します。この機能は、BPELプロセスの変数センサーに類似しています。実行時に、コンポジット・センサー・データはデータベースに維持されます。
Oracle SOAコンポーザの実行時にコンポジット・センサーを定義することもできます。Oracle SOAコンポーザの変更は実行時にすぐに取得されますが、Oracle JDeveloperを使用して行った変更ではSOAコンポジット・アプリケーションを再デプロイする必要があります。
Oracle Enterprise Manager Fusion Middleware Controlでのコンポジット・センサーの検索の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のSOAインフラストラクチャまたはパーティション・レベルでのビジネス・フロー・インスタンスのトラッキングに関する項を参照してください。
53.1.1 コンポジット・センサー使用上の制限
コンポジット・センサーの使用に関して、次の制限に注意してください。
-
XPath式の関数は、プロパティとともに使用できません。
-
式によって定義されるコンポジット・センサーは常に、値を文字列として取得します。このため、センサー・タイプは常に文字列です。このアクションにより検索が可能になります。
文字列から派生したXMLタイプを扱う際には、値を文字列として取得すると便利な場合があります。次の例に詳細を示します。
<xs:element name="CardNum"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="16"/> </xs:restriction> </xs:simpleType> </xs:element>
式が数値であっても、文字列として取得されます。
<
、>
、=
、これらの組合せなど、他の論理演算子を使用できません。 -
変数によって定義されるコンポジット・センサーは、変数タイプを使用してセンサー・タイプを決定します。センサーは次のいずれかのタイプです。
-
STRING
-
NUMBER
-
DATE
-
DATE_TIME
-
複合XML
-
-
コンポジット・センサーでは、Enterprise ManagerおよびJMSの2つのタイプのセンサー・アクションのみがサポートされます。
-
Webサービス・バインディングに対しては、ヘッダー・ベースのセンサーのみがサポートされています。
-
Oracle B2B、サービス・データ・オブジェクト(SDO)、Web Services Invocation Framework (WSIF)およびOracle Business Activity Monitoringのバインディングに対するセンサー・アクションは、サポートされていません。
-
フィルタリング用のXPath式を作成する場合は、ノードセットを返すすべての関数を文字列として明示的にキャストする必要があります。
xpath20:upper-case(string($in.request/inp1:updateOrderStatus/inp1:orderStatus) ) = "PENDING"
-
ビジネス・イベントを公開するサービス・コンポーネント上でセンサーを構成することはできません。
-
ビジネス・イベント・ヘッダーに基づいたセンサーは許可されません(ペイロードのみが許可されます)。
-
PL/SQLサブスクリプションはサポートされていません。
53.2 コンポジット・センサーの追加
SOAコンポジット・エディタで、SOAコンポジット・アプリケーションの次のコンポーネントにセンサーを追加します。
-
サービス・バインディング・コンポーネントまたは参照バインディング・コンポーネント
-
ビジネス・イベントをサブスクライブしているBPELプロセスやOracle Mediatorなどのサービス・コンポーネント
53.2.1 コンポジット・センサーの追加方法
コンポジット・センサーを追加するには:
-
次のいずれかのオプションを使用して、SOAコンポジット・エディタでコンポジット・センサーを追加します:
- オプション1:
-
「公開されたサービス」または「外部参照」スイムレーン、あるいはビジネス・イベントをサブスクライブしているサービス・コンポーネントで特定のサービスまたは参照バインディング・コンポーネントを右クリックします。ビジネス・イベントをサブスクライブしているサービス・コンポーネントには、サブスクライブ済という語が含まれます。
-
「センサーの構成」を選択します。
ノート:
「センサーの構成」オプションが表示されるためには、サービス・コンポーネントにすでにビジネス・イベントがサブスクライブされている必要があります。
バインディング・コンポーネントを選択すると、「コンポジット・センサー」ダイアログに詳細が表示されます(図53-1を参照)。この例では、サービス・バインディング・コンポーネントが選択されています。
サービス・コンポーネントを選択すると、図53-2に示す詳細が「コンポジット・センサー」ダイアログに表示されます。
-
ダイアログで、バインディング・コンポーネントまたはサービス・コンポーネントを選択して、「追加」アイコンをクリックします。
-
- オプション2:
サービスなどのバインディング・コンポーネントを選択すると、図53-5に示すように「コンポジット・センサーの作成」ダイアログが表示されます。
図53-5 サービス・バインディング・コンポーネントの「コンポジット・センサーの作成」ダイアログ
「図53-5 サービス・バインディング・コンポーネントの「コンポジット・センサーの作成」ダイアログの説明」ビジネス・イベント・サブスクリプションがあるサービス・コンポーネントを選択すると、図53-6に示すように「コンポジット・センサーの作成」ダイアログが表示されます。
- オプション1:
-
表53-1に記載されている詳細を入力します。
表53-1 「コンポジット・センサーの作成」ダイアログ
名前 説明 名前
コンポジット・センサーの名前を入力します。「式」フィールドの「編集」アイコンを使用可能にするには、名前を入力する必要があります。
サービス
サービス名が表示されます。このフィールドが表示されるのは、サービス・バインディング・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。
サービス・センサーは、サービスが外部または別のコンポジット・アプリケーションから受信するメッセージを監視します。
参照
参照名が表示されます。このフィールドが表示されるのは、参照バインディング・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。
参照センサーは、参照が外部または別のコンポジット・アプリケーションに送信するメッセージを監視します。
操作
サービスまたは参照のポート・タイプに対する操作を選択します。このフィールドは、サービスまたは参照バインディング・コンポーネントに対してのみ表示されます。
イベント
サービス・コンポーネントの名前が表示されます。このフィールドが表示されるのは、サービス・コンポーネントに対するコンポジット・センサーを作成している場合のみです。このフィールドは編集できません。
イベント・センサーはビジネス・イベントによって開始されたコンポジット・インスタンスを追跡します。ビジネス・イベントごとに複数のセンサーを作成できます。
イベント・タイプ
「サブスクライブ」ビジネス・イベント・タイプが表示されます。このフィールドは編集できません。パブリッシュ・ビジネス・イベント・タイプはサポートされていません。
式
「編集」アイコンをクリックすると、作成する式のタイプを選択するドロップダウン・リストが表示されます:
-
変数: 変数に対する式の値を作成する場合に選択します。「変数の追加方法」を参照してください。
-
式: XPath式を作成するための「式ビルダー」ダイアログを開く場合に選択します。このアクションは、常に値を文字列として取得します。「式の追加方法」を参照してください。
-
プロパティ: 正規化されたメッセージ・ヘッダー・プロパティに対する式の値を作成する場合に選択します。これらは、invokeアクティビティ、receiveアクティビティ、replyアクティビティ、scopeアクティビティのOnEventブランチ(BPEL 2.0の場合)、およびpickアクティビティとscopeアクティビティ(BPEL 2.0の場合)のonMessageブランチの「プロパティ」タブの下に表示される同じプロパティです。「プロパティの追加方法」を参照してください。
フィルタ
「編集」アイコンをクリックすると、式用のXPathフィルタを作成する「式ビルダー」ダイアログが開きます。このフィールドを使用可能にするには、最初に式を作成する必要があります。
たとえば、
10,000
を超える発注金額をトラッキングする式を作成できます。$in.inDict/tns:inDict/ns2:KeyValueOfstringstring/ns2:Value > 10000.00
コンポジット・センサー・アクション
サポートされているセンサー・アクションを表示します。この機能を使用すると、ランタイム・センサー・データを格納できます。「Enterprise Manager」と「JMSキュー」または「JMSトピック」のいずれかとの両方を選択できます。
-
Enterprise Manager
選択すると、Oracle Enterprise Manager Fusion Middleware ControlのSOAコンポジット・アプリケーションの「フロー・インスタンス」タブでランタイム・センサー・データを検索できるようになります。この選択は、前のリリースのDBSensorActionの選択と同じです。
ノート: 「Enterprise Manager」が選択されている場合、センサー・データはトラッキング可能フィールド表に送られます。選択されていない場合、データは送られません。ただし、いずれの場合も、Oracle Enterprise Manager Fusion Middleware Controlにはこのフィールドが表示され、センサーに基づいたコンポジット・インスタンスの検索が可能です。
詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』を参照してください。
-
JMSキュー
コンポジット・センサー・データ(XMLペイロード)をJMSキューに格納する場合に選択します。JMSコネクション・ファクトリおよびキュー名を指定する必要があります。
-
JMSトピック
コンポジット・センサー・データ(XMLペイロード)をJMSトピックに格納する場合に選択します。JMSコネクション・ファクトリおよびトピック名を指定する必要があります。
ノート: 「JMSキュー」および「JMSトピック」を選択すると、コンポジット・センサー・データ(XMLペイロード)がOracle Business Activity Monitoring (BAM)やOracle Complex Event Processingなどの他のコンシューマでも使用できるようになります。どちらを選択した場合も、Oracle WebLogic ServerによるネイティブのJMSサポートが使用され、『テクノロジ・アダプタの理解』の説明にあるようなOracle SOA Suite JMSアダプタは使用されません。JMSメッセージはOracle WebLogic Server管理コンソールで表示できます。
-
-
「OK」をクリックします。
サービスまたは参照バインディング・コンポーネントでは、図53-7に示すように、コンポジット・センサー・アイコンが右上隅に表示されます。
サービス・コンポーネントでは、図53-8に示すように、コンポジット・センサー・アイコンも右上隅に表示されます。
-
コンポジット・センサー・アイコンの上にカーソルを置くと、コンポジット・センサーに関する詳細が表示されます。
53.2.1.2 式の追加方法
図53-10に示す「式ビルダー」ダイアログでは、トラッキングする式を作成できます。
詳細は、「Oracle JDeveloperの式ビルダーでのXPath式の構築」を参照してください。
式を追加するには:
ノート:
変数の場合、式ビルダーは$in/variablename
を挿入します。式でペイロード引数を使用する場合は、この構文を手動で$in.payload/variablename
に更新する必要があります。たとえば:
concat($in.payload/element, '_', $in.payload/element2)
53.2.1.3 プロパティの追加方法
図53-11に示す「プロパティの選択」ダイアログでは、トラッキングする正規化されたメッセージ・ヘッダー・プロパティを選択できます。
プロパティを追加するには:
正規化されたメッセージの詳細は、「メッセージ・ヘッダーを介した正規化メッセージ・プロパティの伝播」を参照してください。
53.2.2 重複するコンポジット・センサー名に関する必知事項
コンポジット・センサーに重複する名前を使用する場合は、次の詳細に注意してください。
-
重複する名前を持つコンポジット・センサーを作成すると、定義の内容全体が比較されます。重複する名前は、1つ以上の追加パラメータが異なる場合に許可されます(たとえば、異なる構成タイプや異なる式、フィルタ、操作名など)。重複する名前が許可されるためには、定義で何かが異なっている必要があります。
-
重複するセンサー定義がある場合は、最後に実行されたセンサー値のみが維持されます。このため、相互に排他的なパスに対してこのタイプの構成を使用できます(たとえば、コンポジットはサービス1またはサービス2によって起動されます)。したがって、両方のサービスで同じセンサー名を定義できます。ただし、サービス1と参照1に同じ名前を定義した場合、参照1のセンサー値(最後に実行されたセンサー)のみが格納されます。
-
通常は、同じ名前の複数のセンサーを使用して、異なるソースから抽出された同じ論理エンティティを指します(たとえば、Oracle Enterprise Manager Fusion Middleware Controlでは、最終的なセンサー値が表示されます)。このため、異なるソースから電子メール値と社会保障値を抽出する場合に同じセンサー名を使用すると、混乱を招く可能性があります。
-
センサー・アクションは、同じセンサー名のすべての発生に適用されます。この状況は、最近定義された同じ名前のセンサーのセンサー・アクションが優先されることを意味します。
次の例のsensor.xml
に示すシナリオでは:
-
Service1
という名前に最初の2つのセンサーは同一です。さらに、構成タイプはどちらもserviceConfig
(サービス・バインディング・コンポーネントで定義されたコンポジット・センサー)です。したがって、センサーは1つのエントリになります(2番目のセンサーは無視されます)。 -
Service1
という名前の3番目のセンサーは、異なる構成タイプeventConfig
(ビジネス・イベントで定義されたコンポジット・センサー)を持ちます。したがって、このセンサーは別のエントリで表されます。 -
PurchaseOrder
Id
という名前の2つのセンサーは、構成タイプが異なります(eventConfig
およびserviceConfig
)。したがって、これらは別のエントリで表されます。 -
PurchaseOrder
という名前の2つのセンサーは、構成タイプは同じ(eventConfig
)ですが、式は異なります。したがって、これらは別のエントリで表されます。
<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>
53.3 実行時のコンポジット・センサー・データの監視
実行時に、Oracle Enterprise Manager Fusion Middleware Controlでコンポジット・センサー・データを監視できます。
-
コンポジット・センサー・データは、SOAコンポジット・アプリケーションのフローのトレースに表示されます。
-
「フロー・インスタンス」ページで、コンポジット・センサーのデータをSOAインフラストラクチャ、個々のパーティション、およびSOAコンポジット・アプリケーションのレベルで検索できます。
Oracle Enterprise Manager Fusion Middleware Controlでのコンポジット・センサーの検索の詳細は、『Oracle SOA SuiteおよびOracle Business Process Management Suiteの管理』のSOAインフラストラクチャ・レベルでのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項、およびアプリケーション・ホームページからのSOAコンポジット・アプリケーション・インスタンスの監視と削除に関する項を参照してください。
53.4 Oracle SOAコンポーザからのコンポジット・センサーの実行時の作成および管理
SOAコンポジット・アプリケーションを再デプロイせずに、Oracle SOAコンポーザからコンポジット・センサーの作成、更新および削除を実行時にできます。次の例では、コンポジット・センサーを作成する方法を説明します。コンポジット・センサーに対する変更は、パッチを介して新しいバージョンのコンポジットに継承できます。
コンポジット・センサーに重複する名前を使用する場合の問題について理解していることを確認してください。詳細は、「重複するコンポジット・センサー名に関する必知事項」を参照してください。
Oracle SOAコンポーザから実行時にコンポジット・センサーを作成および管理するには: