センサーは、実行時にBPELのアクティビティ、変数およびフォルトを監視します。JDeveloper BPEL Designerを使用するか、センサー構成ファイルを手動で指定することで、次のタイプのセンサーを定義できます。
アクティビティ・センサー: BPELプロセス内でのアクティビティの実行を監視する際に使用します。たとえば、アクティビティ・センサーを使用してinvokeアクティビティの実行時間やスコープ完了までの時間を監視できます。また、アクティビティ・センサーに加え、アクティビティの変数も監視できます。
変数センサー: BPELプロセスの変数(または変数の各部)を監視する際に使用します。たとえば、変数センサーを使用して、BPELプロセスの入出力データを監視できます。
フォルト・センサー: BPELフォルトを監視する際に使用します。
センサーは、通常、BPELでのアクティビティ、フォルトおよび変数のモデル化の一環として追加または編集します。
Oracle JDeveloper BPEL Designerでセンサーをモデル化すると、BPELプロセス・スーツケースの一部として、次の2つの新規ファイルが作成されます。
sensor.xml
: BPELプロセスのセンサー定義が格納されます。
sensorAction.xml
: BPELプロセスのセンサー・アクション定義が格納されます。
BPELプロセスにセンサーを定義した後は、センサーのデータをエンドポイントに公開するセンサー・アクションを構成する必要があります。センサー・データは、BPELレポート・スキーマ(BPELデハイドレーション・ストアに存在)、JMSキューまたはJMSトピック、あるいはカスタムJavaクラスに公開できます。
センサー・アクションには、次の情報が必要です。
名前
パブリッシュ・タイプ
パブリッシュ・タイプには、センサー・データを送信する必要がある宛先を指定します。次のパブリッシュ・タイプを構成できます。
データベース: センサー・データをデータベースのレポート・スキーマに公開します。センサー・データはSQLを使用して問合せできます。
JMSキュー: センサー・データをJMSキューに公開します。
JMSトピック: センサー・データをJMSトピックに公開します。
カスタム: データをカスタムJavaクラスに公開します。
JMSアダプタ: リモート・キューまたはリモート・トピックおよび異なる多様なJMSプロバイダに公開します。ローカルのJMS宛先に公開できるのは、「JMSキュー」および「JMSトピック」パブリッシュ・タイプのみです。
センサーのリスト: センサー・アクションに対応する複数のセンサーです。
詳細は、『Oracle BPEL Process Manager開発者ガイド』の第18章「センサー」を参照してください。
センサーはreceiveアクティビティに追加します。センサーは、クライアントから受信した入力データを監視します。
センサーをreceiveアクティビティに追加する手順は、次のとおりです。
receiveアクティビティをダブルクリックします。
「センサー」タブをクリックします。
「作成」アイコンをクリックします。
「アクティビティ・センサーの作成」ダイアログを使用して、センサーを作成します。
センサーの名前を入力します。
評価時間を入力します。
評価時間は、センサーが起動する時点を制御します。次のオプションから選択できます。
アクティブ化: センサーはアクティビティの実行直前に起動します。
完了: センサーはアクティビティの実行直後に起動します。
フォルト: センサーは、アクティビティの実行中にフォルトが発生した場合に起動します。この値は、単純なアクティビティを監視するセンサーにのみ選択します。
補正: センサーは、関連するscopeアクティビティが補正されたときに起動します。この値は、スコープを監視するセンサーにのみ選択します。
再試行: センサーは、関連するinvokeアクティビティが再試行されたときに起動します。
すべて: 前述のすべてのフェーズが監視対象となります。
「作成」アイコンをクリックして、アクティビティ変数センサーを作成します。
図7-27に示すように、「アクティビティ変数センサーの作成」ダイアログを使用して、変数XPath、出力ネームスペースおよび出力データ型を指定します。
「追加」アイコンをクリックして、センサー・アクションを追加します。
「センサー・アクションの選択」で、センサーの値を(データベース、JMSキューなどに)公開するセンサー・アクションを選択します。
図7-28に示すように、「センサー・アクションの編集 -」ダイアログを使用して、前の手順で選択したセンサー・アクションを編集します。
センサー定義はsensor.xml
ファイルに書き込まれ、センサー・アクション定義はsensorAction.xml
ファイルに書き込まれます。これらのファイルは、BPELプロジェクトの「センサー」ディレクトリにあり、アプリケーション・ナビゲータから使用できます。
例7-12に、SOA Order Bookingアプリケーションのsensor.xml
ファイルのソース・コードを示します。
例7-12 sensor.xmlのソース・コード
<?xml version = '1.0' encoding = 'UTF-8'?> <sensors targetNamespace="http://www.globalcompany.com/ns/OrderBooking" xmlns="http://xmlns.oracle.com/bpel/sensor" xmlns:tns="http://www.globalcompany.com/ns/OrderBooking" xmlns:pc="http://xmlns.oracle.com/bpel/sensor"> <sensor sensorName="InstanceFaulted" classname="oracle.tip.pc.services.reports.dca.agents.BpelActivitySensorAgent" kind="activity" target="SetFaultedOrderStatus"> <activityConfig evalTime="completion"> <variable outputDataType="SOAOrderBookingFaultMessage" outputNamespace="http://www.globalcompany.com/ns/OrderBooking" target="$OrderBookingFault"/> </activityConfig> </sensor> <sensor sensorName="InstanceStart" classname="oracle.tip.pc.services.reports.dca.agents.BpelActivitySensorAgent" kind="activity" target="receiveInput"> <activityConfig evalTime="completion"> <variable outputDataType="SOAOrderBookingRequestMessage" outputNamespace="http://www.globalcompany.com/ns/OrderBooking" target="$inputVariable"/> </activityConfig> </sensor> <sensor sensorName="InstanceCompleted" classname="oracle.tip.pc.services.reports.dca.agents.BpelActivitySensorAgent" kind="activity" target="callbackClient"> <activityConfig evalTime="completion"> <variable outputDataType="SOAOrderBookingRequestMessage" outputNamespace="http://www.globalcompany.com/ns/OrderBooking" target="$inputVariable"/> </activityConfig> </sensor> </sensors>
例7-13に、SOA Order BookingアプリケーションのsensorAction.xml
ファイルのソース・コードを示します。
例7-13 sensorAction.xmlのソース・コード
<?xml version = '1.0' encoding = 'UTF-8'?> <actions targetNamespace="http://www.globalcompany.com/ns/OrderBooking" xmlns="http://xmlns.oracle.com/bpel/sensor" xmlns:tns="http://www.globalcompany.com/ns/OrderBooking" xmlns:pc="http://xmlns.oracle.com/bpel/sensor"> <action name="InstanceStart" publishName="" publishType="JMSTopic" enabled="true" publishTarget="jms/demoTopic"> <property name="JMSConnectionFactory">jms/TopicConnectionFactory</property> <sensorName>InstanceStart</sensorName> </action> <action name="InstanceCompleted" publishName="" publishType="JMSTopic" enabled="true" publishTarget="jms/demoTopic"> <property name="JMSConnectionFactory">jms/TopicConnectionFactory</property> <sensorName>InstanceCompleted</sensorName> </action> <action name="InstanceFaulted" publishName="" publishType="JMSTopic" enabled="true" publishTarget="jms/demoTopic"> <property name="JMSConnectionFactory">jms/TopicConnectionFactory</property> <sensorName>InstanceFaulted</sensorName> </action> </actions>