ヘッダーをスキップ
Oracle BPEL Process Manager開発者ガイド
10g(10.1.3.1.0)
B31874-03
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

17 センサー

センサーを使用すると、実行時に監視対象とするBPELアクティビティ、変数およびフォルトを指定できます。この章では、BPELプロセスのセンサーの使用方法および設定方法について説明します。また、センサー・データをOracle BAM Serverのデータ・オブジェクトとしてパブリッシュするための、Oracle BPEL Process Managerにおけるセンサー・アクションの作成方法についても説明します。

この章の内容は次のとおりです。

17.1 センサーのユースケース

センサーの使用方法は、125.ReportsSchemaサンプルで具体的に示されます。このサンプルでは、センサーを従業員更新プロセスにおける主要なデータの識別に、センサー・アクションをデータベース更新情報のパブリッシュに使用しています。


関連項目:

SOA_Oracle_Home¥bpel¥samples¥tutorials¥125.ReportsSchema

センサーのアクティビティへの挿入は、OrderBookingチュートリアルでも具体的に示されています。


関連項目:

『Oracle BPEL Process Manager Order Bookingチュートリアル』

17.2 センサーの概念の概要

Oracle JDeveloperを使用するか、センサー構成ファイルを手動で指定することで、次のタイプのセンサーを定義できます。

センサーは、通常、アクティビティ、フォルトおよび変数のBPELモデリングの一環として追加または編集します。

Oracle JDeveloperでセンサーをモデリングすると、BPELプロセス・スーツケースの一部として次の2つの新規ファイルが作成されます。

これらのファイルの作成方法の詳細は、「センサーの構成」および「センサー・アクションの構成」を参照してください。

BPELプロセスにセンサーを定義したら、センサーのデータをエンドポイントにパブリッシュするセンサー・アクションを構成する必要があります。センサー・データは、BPELレポート・スキーマ(BPELデハイドレーション・ストアに存在)、JMSキューまたはJMSトピック、あるいはカスタムJavaクラスにパブリッシュできます。

センサー・アクションには、次の情報が必要です。

17.3 Oracle JDeveloperでのセンサーおよびセンサー・アクションの実装

Oracle JDeveloperで、センサー・アクションとセンサーは図17-1のようにプロセス・ツリー構造の一部として表示されます。

図17-1 Oracle JDeveloperに表示されたセンサーとセンサー・アクション

図sensor1.gifの説明が続きます
図sensor1.gifの説明

センサーは、通常、アクティビティ、フォルトおよび変数のBPELモデリングの一環として追加または編集します。「センサー・アクション」フォルダを右クリックして「作成」「センサー・アクション」を選択することで、センサー・アクションを追加できます。アクティビティ・センサー、変数センサーまたはフォルト・センサーを追加するには、「センサー」フォルダを展開し、適切な「アクティビティ」「変数」または「フォルト」サブフォルダを右クリックし、「作成」をクリックします。

次の各項では、LoanDemoPlusを例として使用し、センサーとセンサー・アクションを構成する方法について説明します。


関連項目:

SOA_Oracle_Home¥bpel¥samples¥demosLoanDemoPlusチュートリアル

17.3.1 センサーの構成

LoanFlowアプリケーションを監視する場合、状況に応じて、getCreditRatingスコープの開始および完了のタイミングを把握できるほか、完了時に顧客の信用度を確認できます。このようなソリューションとして、図17-2のように、Oracle JDeveloperでgetCreditRatingスコープのアクティビティ・センサーを作成します。センサーが関連付けられているアクティビティは、Oracle JDeveloperに虫眼鏡アイコンとともに表示されます。

図17-2 アクティビティ・センサーの作成

図sensor2.gifの説明が続きます
図sensor2.gifの説明

図17-2に示されている「評価時間」属性を使用して、センサーの起動するタイミングを制御します。次のオプションから選択できます。

  • アクティブ化: センサーは、アクティビティの実行直前に起動します。

  • 完了: センサーは、アクティビティの実行直後に起動します。

  • フォルト: センサーは、アクティビティの実行中にフォルトが発生した場合に起動します。この値は、単純なアクティビティを監視するセンサーにのみ選択します。

  • 補正: センサーは、関連するscopeアクティビティが補正されたときに起動します。この値は、スコープを監視するセンサーにのみ選択します。

  • 再試行: センサーは、関連するinvokeアクティビティが再試行されたときに起動します。

  • すべて: 前述のすべてのフェーズで監視が発生します。

次のように、sensor.xmlファイルに新規エントリが作成されます。

<sensor sensorName="CreditRatingSensor"

classname="oracle.tip.pc.services.reports.dca.agents.BpelActivitySensorAgent"
          kind="activity"
          target="getCreditRating">

  <activityConfig evalTime="all">
    <variable outputNamespace="http://www.w3.org/2001/XMLSchema"
              outputDataType="int"
              target="$crOutput/payload//services:rating"/>
  </activityConfig>
</sensor>

受信したすべての融資申請を記録する場合、図17-3のように変数inputに変数センサーを作成します。

図17-3 変数センサーの作成

図sensor3.gifの説明が続きます
図sensor3.gifの説明

次のように、sensor.xmlファイルに新規エントリが作成されます。

<sensor sensorName="LoanApplicationSensor"
    classname="oracle.tip.pc.services.reports.dca.agents.BpelVariableSensorAgent"
    kind="variable"
    target="$input/payload">
  <variableConfig outputNamespace="http://www.autoloan.com/ns/autoloan"
                  outputDataType="loanApplication"/>
</sensor>

アイデンティティ・サービスのフォルトを監視する場合、図17-4のようにフォルト・センサーを作成します。

図17-4 フォルト・センサーの作成

図sensor4.gifの説明が続きます
図sensor4.gifの説明

次のように、sensor.xmlファイルに新規エントリが作成されます。

<sensor sensorName="IdentityServiceFault"
        classname="oracle.tip.pc.services.reports.dca.agents.BpelFaultSensorAgent"
        kind="fault"
        target="is:identityServiceFault">
    <faultConfig/>
</sensor>

17.3.2 センサー・アクションの構成

センサーを作成する場合、実行時に監視するアクティビティ、変数およびフォルトを識別します。エンドポイントにセンサーの値をパブリッシュする場合(たとえば、LoanApplicationSensorのデータをJMSキューにパブリッシュする場合)、図17-5のようにセンサー・アクションを作成し、それをLoanApplicationSensorに関連付けます。

図17-5 センサー・アクションの作成

図sensor5.gifの説明が続きます
図sensor5.gifの説明

次のように、sensorAction.xmlファイルに新規エントリが作成されます。

<action name="BAMFeed"
        enabled="true"
        publishType="JMSQueue"
        publishTarget="jms/bamTopic">
  <sensorName>LoanApplicationSensor</sensorName>
  <property name=ÒJMSConnectionFactoryÒ>
    jms/QueueConnectionFactory
  </property>
</action>

LoanApplicationSensorおよびCreditRatingSensorの値をデータベースのレポート・スキーマにパブリッシュする場合、図17-6のように追加のセンサー・アクションを作成し、それをCreditRatingSensorLoanApplicationSensorの両方に関連付けます。

図17-6 追加のセンサー・アクションの作成

図sensor6.gifの説明が続きます
図sensor6.gifの説明

次のように、sensorAction.xmlファイルに新規エントリが作成されます。

<action name="PersistingAction"
     enabled="true"
     publishType="BPELReportsSchema">
  <sensorName>LoanApplicationSensor</sensorName>
  <sensorName>CreditRatingSensor</sensorName>
</action

1つのセンサーのデータは、複数のエンドポイントにパブリッシュできます。前述の2つのコード例では、LoanApplicationSensorのデータがJMSキューとデータベース・レポート・スキーマの両方にパブリッシュされています。

融資金額が100,000ドルを超える融資申請を監視する場合、図17-7のようにフィルタ付きのセンサー・アクションを作成できます。

図17-7 フィルタ付きのセンサー・アクションの作成

図sensor_fltr.gifの説明が続きます
図sensor_fltr.gifの説明

次のように、sensorAction.xmlファイルに新規エントリが作成されます。

<action name="BigMoneyBAMAction"
        enabled='true'
        filter="boolean(/s:actionData/s:payload
                        /s:variableData/s:data
                        /autoloan:loanAmount > 100000)"
        publishType="JMSQueue"
        publishTarget="jms/bigMoneyQueue">
  <sensorName>LoanApplicationSensor</sensorName>
  <property name=ÒJMSConnectionFactoryÒ>
    jms/QueueConnectionFactory
  </property>
</action>

注意:

  • アクション・フィルタの構成に必要なすべてのネームスペースをセンサー・アクション構成ファイルに指定する必要があります。

  • フィルタは、ブール型のXPath式として指定する必要があります。


組込みのパブリッシュ・タイプ(データベース、JMSキュー、JMSトピックおよびJMSアダプタ)では対応できない特殊なセンサー・アクション要件がある場合、図17-8のように「カスタム」パブリッシュ・タイプでセンサー・アクションを作成できます。「パブリッシュ・ターゲット」フィールドの名前として、実装する必要のある完全修飾Javaクラス名を指定します。

図17-8 「カスタム」パブリッシュ・タイプの使用

図sensor_custom.gifの説明が続きます
図sensor_custom.gifの説明

17.3.3 リモート・トピックおよびキューへのパブリッシュ

「JMSキュー」および「JMSトピック」パブリッシュ・タイプでは、ローカルJMS宛先にのみパブリッシュします。センサー・データをリモート・トピックおよびキューにパブリッシュする場合は、図17-9に示すように「JMSアダプタ」パブリッシュ・タイプを使用します。

図17-9 「JMSアダプタ」パブリッシュ・タイプの使用

図sensor7.gifの説明が続きます
図sensor7.gifの説明

JMSアダプタでは、センサー・データをリモート・トピックおよびキューにパブリッシュできるのみでなく、次のように様々なJMSプロバイダがサポートされます。

  • サード・パーティJMSプロバイダ(Tibco JMS、IBM WebSphere MQ JMSおよびSonicMQなど)

  • Oracle Enterprise Messaging Service(OEMS)プロバイダ(メモリー/ファイルおよびデータベースなど)

「JMSアダプタ」パブリッシュ・タイプを選択した場合は、oc4j-ra.xmlファイルにエントリを作成する必要があります。「センサー・アクション」ダイアログでJMS接続名プロパティを使用して、oc4j-ra.xmlファイル内の適切なエントリを指します。


関連項目:

JMSアダプタの詳細は、『Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド』を参照してください。

17.3.4 カスタム・データ・パブリッシャの作成

カスタム・データ・パブリッシャを作成するには、Oracle JDeveloperでBPELプロジェクトをダブルクリックし、次の手順を実行します。

  1. 「ツール」メイン・メニューから「プロジェクト・プロパティ」「ライブラリ」「Jar/ディレクトリの追加」を選択します。

  2. SOA_Oracle_Home¥bpel¥lib¥orabpel.jarを参照して選択します。

    BPELライブラリのBPELプロジェクトへの追加
    図sensor_pub1.gifの説明

  3. 新規Javaクラスを作成します。

    パッケージおよびクラス名は、センサー・アクションのパブリッシュ・ターゲット名と一致している必要があります。

  4. com.oracle.bpel.sensor.DataPublisherインタフェースを実装します。

    これにより、ソース・ファイルを更新し、DataPublisherインタフェースのメソッドとimport文を組み込みます。

  5. Oracle JDeveloperのエディタを使用して、次のサンプル・カスタム・データ・パブリッシャ・クラスのように、DataPublisherインタフェースのpublishメソッドを実装します。

    サンプル・カスタム・データ・パブリッシャ・クラス
    図sensor_customdp.gifの説明

  6. クラスが正常にコンパイルされることを確認します。

    次回BPELプロセスをデプロイするときに、JavaクラスがBPELスーツケースに追加され、Oracle BPEL Process Managerにデプロイされます。


注意:

データ・パブリッシャの実装に必要な追加のJavaライブラリがOracle BPEL ServerのCLASSPATHに存在することを確認します。

Oracle BPEL Process Managerでは、複数のプロセス・インスタンスを同時に実行するため、データ・パブリッシャのコードをスレッド・セーフとするか、適切な同期ブロックを追加する必要があります。高いスループットを確保するには、同期を必要とする共有データ・オブジェクトを使用しないでください。


17.3.5 bpel.xmlへのセンサーおよびセンサー・アクションの登録

Oracle JDeveloperでは、自動的にプロセス・デプロイメント・ファイルのbpel.xmlが更新され、次のようにセンサーおよびセンサー・アクションの適切なプロパティが組み込まれます。

<configurations>
  …
  <property name="sensorLocation">sensor.xml</property>
  <property name="sensorActionLocation">sensorAction.xml</property>
  …
  <property name="SLACompletionTime">P0YT1.5S</property>
</configurations>

このコード例のように、<property name= ...>を使用して追加のプロパティを指定できます。

17.4 センサーとOracle BPEL Control

コンソールでは、センサーおよびセンサー・アクションのメタデータに加え、プロセス実行の一部として作成されたセンサー・データを参照できます。Oracle BPEL Controlには、次のURLでアクセスします。

http://localhost:port/BPELConsole

「スタート」「すべてのプログラム」「Oracle - Oracle_Home「Oracle BPEL Process Manager」「BPEL Control」を選択する方法もあります。

17.4.1 センサーおよびセンサー・アクション定義の表示

BPELプロセスをOracle BPEL Process Managerにデプロイした後、Oracle JDeveloperに戻ることなくセンサーおよびセンサー・アクションの定義を参照できます。Oracle BPEL Controlで「BPELプロセス」タブをクリックし、センサー定義を参照するプロセスを選択します。「センサー」リンクをクリックします。図17-10のようなページが表示されます。

図17-10 Oracle BPEL Controlの「BPELプロセス」タブのセンサー・データ

図sensor_console1.gifの説明が続きます
図sensor_console1.gifの説明

17.4.2 センサー・データの表示

コンソールでは、BpelReportsSchemaセンサー・アクションが定義されているセンサーを監視できます。Oracle BPEL Controlで「インスタンス」タブをクリックし、プロセス実行の結果として作成されたセンサー・データを参照するプロセス・インスタンスを選択します。 図17-11のようなページが表示されます。

図17-11 Oracle BPEL Controlの「インスタンス」タブのセンサー・データ

図sensor_console2.gifの説明が続きます
図sensor_console2.gifの説明


注意:

Oracle BPEL Controlに表示されるのは、データベース・センサー・アクションに関連するセンサーのみです。JMSキュー、JMSトピックまたはカスタム・センサー・アクションに関連するセンサーは、表示されません。

17.5 センサーとOracle Business Activity Monitoringの統合

Oracle Business Activity Monitoring(BAM)は、企業内のビジネス・サービスおよびプロセスの監視、キー・パフォーマンス・インジケータ(KPI)の相関、およびビジネス環境変化時のビジネス・プロセス変更または修正アクション実行を可能にします。Oracle BAMを使用することで、リアルタイムで操作可能なダッシュボードをビルドし、Webでのアプリケーションの監視および警告が可能になります。このテクノロジを使用して、ビジネス・サービスおよびプロセスを監視する、対話的なリアルタイム・ダッシュボードおよび予防アラートをビルドします。

Oracle BPEL Process Managerでセンサー・アクションを作成し、センサー・データをOracle BAM Serverのデータ・オブジェクトとしてパブリッシュできます。センサー・アクションを作成するときには、監視するOracle BPEL Process Manager変数またはアクティビティ・センサー、およびセンサー・データをパブリッシュするOracle BAM Serverのデータ・オブジェクトを選択できます。Oracle BAM Serverは、データ・オブジェクトをパブリッシュし、情報をWSDLファイルに記録します。Basic HTTP認証を使用して、これらのファイルへのアクセスを可能にしています。

この項の内容は次のとおりです。

これらの手順は、Oracle BAMがインストールおよび構成済であることを想定しています。


関連項目:

『Oracle Business Activity Monitoring管理者ガイド』

17.5.1 Oracle BAM Serverへの接続の作成


注意:

現在、BPELプロジェクトごとに単一のOracle BAM Serverのみがサポートされています。

使用可能なデータ・オブジェクトを参照するには、Oracle BAM Serverへの接続を作成する必要があります。この接続情報は、デプロイ時に自動的に使用されます。

  1. Oracle JDeveloperの「表示」メイン・メニューから「接続ナビゲータ」を選択します。

  2. 「BAMサーバー」を右クリックします。

  3. 「新規BAMサーバー接続」を選択します。

  4. 「ようこそ」ページの「次へ」をクリックします。

  5. サーバーへの接続の名前を入力します。

  6. 「次へ」をクリックします。

  7. Oracle BAM Serverホストに関する、次の接続情報を入力します。

    フィールド 説明
    ホスト名 Oracle BAM Serverがインストールされているホストの名前を入力します。組織のセキュリティ・ポリシーによっては、完全修飾ホスト名の入力が必要になります。
    ポート番号 ポート番号を入力するか、またはデフォルト値80をそのまま使用します。
    ユーザー名 Windowsドメインのユーザー名を入力します。Oracle BAM Serverは、Windowsドメインを認証に使用します。
    パスワード ドメイン・ユーザー名のパスワードを入力します。
    ドメイン名 Oracle BAM Serverホストが配置されているドメインの名前を入力します。このフィールドには大/小文字区別があります。大/小文字を正しく使用して名前を入力しなければ、認証失敗エラーが返されます。
    secure HTTPプロトコルの使用 Oracle BAM Serverへの接続にsecure HTTP(HTTP/S)を使用する場合は、このチェック・ボックスを選択します。選択しない場合は、HTTPが使用されます。

  8. 「次へ」をクリックします。

  9. 「接続のテスト」をクリックして、接続をテストします。接続が成功している場合は、次のメッセージが表示されます。

    Success.
    
    
  10. 「終了」をクリックします。

Oracle JDeveloperでは、次のプロパティ名が予約されています。これらのプロパティ名は、作成したOracle BAM Server接続に対する値を定義します。

  • bamserver.hostname

  • bamserver.protocol

  • bamserver.username

  • bamserver.password

  • bamserver.port

  • bamserver.domain

これらのプロパティ名は、「デプロイメント・ディスクリプタのプロパティ」ウィンドウの「プリファレンス」タブに追加されます。BPELプロセスでBAMセンサー・アクションを使用しており、実行時に設計時と異なるOracle BAM Serverを使用する場合は、これらの値をBPELプロセスのデプロイ前に更新する必要があります。プロセスがデプロイ済の場合は、Oracle BPEL Controlでこれらの値を更新できます。

17.5.2 センサーの作成

BAMセンサー・アクションの作成前に、次のいずれかのタイプのセンサーを作成する必要があります。

  • 変数センサー。センサー・データをOracle BAM Serverのデータ・オブジェクトにマップするため、センサーごとに使用できる変数は1つのみです。変数にメッセージ・パートがある場合、メッセージ・パートは1つのみである必要があります。この変数はWSDL内でインラインで定義しないでください。サポートされているのはXSD要素定義のみです。

  • センサー変数を1つのみ含むアクティビティ・センサー。


関連項目:

センサーの作成手順は、「Oracle JDeveloperでのセンサーおよびセンサー・アクションの実装」を参照してください。

17.5.3 BAMセンサー・アクションの作成

センサー・アクションを作成するときには、監視するBPEL変数またはアクティビティ・センサー、およびセンサー・データをパブリッシュするOracle BAM Serverのデータ・オブジェクトを選択します。

  1. Oracle JDeveloperの「構造」セクションで「センサー・アクション」を右クリックします。

  2. 「作成」「BAMセンサー・アクション」を選択します。

    「センサー・アクションの作成」ウィンドウが表示されます。センサー・データをOracle BAM Serverのデータ・オブジェクトにパブリッシュする、BAMセンサー・アクションを作成します。

    図sensors_bam.gifの説明が続きます
    図sensors_bam.gifの説明

  3. 次の詳細を入力します。

    フィールド 説明
    アクション名 センサー・アクションに対する、識別可能な一意の名前を入力します。
    センサーの選択 監視するBPELセンサーを選択します。これは、センサー・データをOracle BAM Serverのデータ・オブジェクトにマッピングするために、「センサーの作成」で作成したセンサーです。
    データ・オブジェクト 懐中電灯アイコンをクリックして「BAMデータ・オブジェクトの選択」ウィンドウを開き、センサー・データをパブリッシュするOracle BAM Serverのデータ・オブジェクトを選択します。データ・オブジェクトを選択するには、Oracle BAM Serverへの接続を作成しておく必要があります。
    有効バッチ Oracle BPEL Process ManagerランタイムのOracle BAMコンポーネントによって、デフォルトでキャッシュされるデータは、Oracle BAM Serverに定期的にフラッシュ(送信)されます。データの定期的な送信は、「バッチ・パラメータの設定」ウィンドウの、上限および下限パラメータの設定に基づいて決定されます。Oracle BAMコンポーネントは、キャッシュに上限および下限の範囲内のデータ・オブジェクトがある場合、バッチ・タイムアウト前にデータを送信するかどうかを決定します。このチェック・ボックスの選択を解除すると、バッチ送信が無効になります。

    バッチ・パラメータを変更するには、「バッチ・パラメータの設定」をクリックします。詳細は、手順4を参照してください。

    操作 Oracle BAM Serverデータベースの行に対する操作として、「削除」「更新」「挿入」または「アップサート」を選択します。「アップサート」では、最初に、行の存在を確認後、存在する場合は更新が行われます。行が存在しない場合は、行が挿入されます。
    使用可能なキー/選択したキー 「削除」「更新」または「アップサート」操作を選択した場合は、このセンサー・オブジェクトに一致する列を決定するためのキーとして使用する、Oracle BAMサーバー・データベースの列名を選択する必要があります。キーは1つの列の場合もあり、複数の列で構成されるコンポジット・キーの場合もあります。キーを選択して「>」ボタンをクリックします。すべてを選択するには、「>>」ボタンをクリックします。
    マップ・ファイル 「センサーの選択」リストで選択された)センサーと(「データ・オブジェクト」リストで選択された)Oracle BAM Serverデータ・オブジェクト間のマッピングを作成するファイル名を指定します。「マッピングの作成」アイコン(2番目のアイコン)または「マッピングの編集」アイコン(3番目のアイコン)をクリックしても、マッパー・ウィンドウを起動できます。


    警告:

    Oracle BPEL Serverを再起動すると、バッチ内のメッセージが失われます。Oracle BPEL Serverを再起動する前に、すべてのメッセージのバッチ処理が完了していることを確認してください。



    注意:

    「センサー・アクションの作成」ウィンドウで、「マッピングの作成」「マッピングの編集」または「OK」ボタンのクリック後に、BPELファイルを明示的に保存する必要があります。

  4. カスタム・バッチ・パラメータ設定を指定する場合は、「バッチ・パラメータの設定」をクリックします。

    「バッチ・パラメータの設定」ウィンドウが表示されます。

  5. 「デフォルト・バッチ・パラメータの使用」チェック・ボックスの選択を解除して、下のフィールドにカスタマイズした値を入力します。カスタマイズした値の入力後に、このチェック・ボックスを再選択すると、設定はデフォルト値に戻ります。

    図sensors_bambatch.gifの説明が続きます
    図sensors_bambatch.gifの説明

  6. 次の詳細を入力します。

    フィールド 説明
    バッチ・サイズ下限値 デフォルト値の1000を使用するか、それよりも小さい値を指定します。このパラメータにより、キャッシュ内の最小行数が制御されます。このパラメータを使用すると、キュー・サイズがこの下限値以上になるか、タイムアウトが発生するまで、データはOracle BPEL Process Managerランタイム・キャッシュに残ります。
    バッチ・サイズ上限値 デフォルト値の5000を使用するか、それよりも大きい値を指定します。このパラメータにより、キャッシュ内の最大行数が制御されます。このパラメータを使用すると、上限値に達する前に、Oracle BPEL Process ManagerランタイムによりデータがOracle BAM Serverにフラッシュされます。
    バッチ・タイムアウト(ミリ秒) タイムアウトを分単位で指定します。デフォルト値は、50ミリ秒です。タイムアウトが発生すると、BPELランタイムによりキュー内のデータがOracle BAM Serverにフラッシュされます。

  7. 「OK」をクリックし、「バッチ・パラメータの設定」ウィンドウと「センサー・アクションの作成」ウィンドウを閉じます。

17.6 センサー・パブリック・ビュー

Oracle BPEL Process Managerのセンサー・フレームワークには、BPELインスタンスの処理によって生成されたセンサー値を、Oracle BPEL Process Managerのデハイドレーション・ストアに保存されたリレーショナル・スキーマに永続化する機能があります。このデータは、Oracle BPEL Controlにプロセス・インスタンスのセンサー値を表示する際に使用されます。

データを使用する任意のアプリケーションからセンサー値へのSQLアクセスを実行できるように、一連のパブリック・ビューが公開されます。

17.6.1 BPMスキーマ

データベース・パブリッシャは、データベースで事前定義されたリレーショナル・スキーマにセンサー・データを永続化します。次のパブリック・ビューをクライアント(Oracle Warehouse、OracleAS Portalなど)から使用して、センサー値をSQLで問合せできます。


注意:

表17-1から表17-5の「索引付きまたは一意」列には、一意索引名と属性の順序が含まれます。たとえば、U1,2は、U1という一意索引の2番目の属性であることを示します。PKは、主キーを示します。

BPEL_PROCESS_INSTANCES

このビューは、Oracle BPEL Process Managerのすべてのプロセス・インスタンスの概要を提供します。

表17-1 BPEL_PROCESS_INSTANCESビュー

属性名 SQL型 属性サイズ 索引付きまたは一意 NULL可 コメント
INSTANCE_KEY NUMBER -- PK × 一意のインスタンスID
BPEL_PROCESS_NAME NVARCHAR2 100 -- × BPELプロセスの名前
BPEL_PROCESS_REVISION VARCHAR2 50 -- × BPELプロセスのリビジョン
DOMAIN_ID VARCHAR2 50 -- × Oracle BPEL Process Managerドメインの名前
TITLE VARCHAR2 50 -- BPELプロセスのユーザー定義のタイトル
STATE NUMBER -- -- BPELプロセス・インスタンスの状態
STATE_TEXT VARCHAR2 -- -- 状態属性のテキスト表現
PRIORITY NUMBER -- -- BPELプロセス・インスタンスのユーザー定義の優先度
STATUS VARCHAR2 100 -- BPELプロセスのユーザー定義のステータス
STAGE VARCHAR2 100 -- BPELプロセスのユーザー定義のステージ・プロパティ
CONVERSATION_ID VARCHAR2 100 -- BPELプロセスのユーザー定義の対話ID
CREATION_DATE TIMESTAMP -- -- × プロセス・インスタンスの作成タイムスタンプ
MODIFY_DATE TIMESTAMP -- -- プロセス・インスタンスの変更タイムスタンプ
TS_DATE DATE -- -- modify_dateの日付部分
TS_HOUR NUMBER -- -- modify_dateの時間部分
EVAL_TIME NUMBER -- -- プロセス・インスタンスの評価時間(ミリ秒)
SLA_COMPLETION_TIME NUMBER -- -- SLA完了時間(ミリ秒単位)。これには、bpel.xmlで設定できるオプション・プロパティの値が移入されます。次に例を示します。
<configurations>
...
<property name="SLACompletionTime">POYT1.5S</property>
SLA_SATISFIED VARCHAR2 1 -- Yは、SLAが満たされていることを示します(SLA_COMPLETION_TIME < EVAL_TIME)。

Nは、SLAが満たされていないことを示します(SLA_COMPLETION_TIME > EVAL_TIME)。


BPEL_ACTIVITY_SENSOR_VALUES

このビューには、監視しているBPELプロセスのすべてのアクティビティ・センサー値が含まれます。

表17-2 BPEL_ACTIVITY_SENSOR_VALUESビュー

属性名 SQL型 属性サイズ 索引付きまたは一意 NULL可 コメント
ID NUMBER -- PK × 一意のID
INSTANCE_KEY NUMBER -- U1,1 × プロセス・インスタンスのID
BPEL_PROCESS_NAME NVARCHAR2 100 -- × BPELプロセスの名前
BPEL_PROCESS_REVISION VARCHAR2 50 -- × BPELプロセスのリビジョン
DOMAIN_ID VARCHAR2 50 -- × Oracle BPEL Process Managerドメインの名前
SENSOR_NAME NVARCHAR2 100 U1,2 × 起動されたセンサーの名前
SENSOR_TARGET NVARCHAR2 256 -- × 起動されたセンサーのターゲット
ACTION_NAME NVARCHAR2 100 U1,3 × センサー・アクションの名前
ACTION_FILTER NVARCHAR2 256 -- アクションのフィルタ
CREATION_DATE TIMESTAMP -- -- × アクティビティ・センサー値の作成日時
MODIFY_DATE TIMESTAMP -- -- 最終変更のタイムスタンプ
TS_DATE DATE -- -- modify_dateの日付部分
TS_HOUR NUMBER -- -- modify_dateの時間部分
CRITERIA_SATISFIED VARCHAR2 1 -- NULLYまたはN
ACTIVITY_NAME NVARCHAR2 100 -- × BPELアクティビティの名前
ACTIVITY_TYPE VARCHAR2 30 -- × BPELアクティビティのタイプ
ACTIVITY_STATE VARCHAR2 30 -- BPELアクティビティの状態
EVAL_POINT VARCHAR2 20 -- × アクティビティ・センサーの評価ポイント
ERROR_MESSAGE NVARCHAR2 2000 -- エラー・メッセージ
RETRY_COUNT NUMBER -- -- アクティビティの再試行回数
EVAL_TIME NUMBER -- -- アクティビティの評価時間(ミリ秒)

BPEL_FAULT_SENSOR_VALUES

このビューには、すべてのフォルト・センサー値が含まれます。

表17-3 BPEL_FAULT_SENSOR_VALUESビュー

属性名 SQL型 属性サイズ 索引付きまたは一意 NULL可 コメント
ID NUMBER -- PK × 一意のID
INSTANCE_KEY NUMBER -- U1,1 × BPELプロセスID
BPEL_PROCESS_NAME NVARCHAR2 100 -- × BPELプロセスの名前
BPEL_PROCESS_REVISION VARCHAR2 50 -- × BPELプロセスのリビジョン
DOMAIN_ID VARCHAR2 50 -- × Oracle BPEL Process Managerドメインの名前
SENSOR_NAME NVARCHAR2 100 U1,2 × 起動されたセンサーの名前
SENSOR_TARGET NVARCHAR2 256 -- × 起動されたセンサーのターゲット
ACTION_NAME NVARCHAR2 100 U1,3 × センサー・アクションの名前
ACTION_FILTER NVARCHAR2 256 -- アクションのフィルタ
CREATION_DATE TIMESTAMP -- -- × アクティビティ・センサー値の作成日時
MODIFY_DATE TIMESTAMP -- -- 最終変更のタイムスタンプ
TS_DATE DATE -- -- modify_dateの日付部分
TS_HOUR NUMBER -- -- modify_dateの時間部分
CRITERIA_SATISFIED VARCHAR2 1 -- NULL(アクション・フィルタの指定なし)、Y(アクション・フィルタが指定されており、評価がtrue)、N(それ以外)
ACTIVITY_NAME NVARCHAR2 100 -- × BPELアクティビティの名前
ACTIVITY_TYPE VARCHAR2 30 -- × BPELアクティビティのタイプ
MESSAGE CLOB -- -- フォルト・メッセージ

BPEL_VARIABLE_SENSOR_VALUES

このビューには、すべての変数センサー値が含まれます。

表17-4 BPEL_VARIABLE_SENSOR_VALUESビュー

属性名 SQL型 属性サイズ 索引付きまたは一意 NULL可 コメント
ID NUMBER -- PK × 一意のID
INSTANCE_KEY NUMBER -- U1,1 × BPELプロセスID
BPEL_PROCESS_NAME NVARCHAR2 100 -- × BPELプロセスの名前
BPEL_PROCESS_REVISION VARCHAR2 50 -- × BPELプロセスのリビジョン
DOMAIN_ID VARCHAR2 50 -- × Oracle BPEL Process Managerドメインの名前
SENSOR_NAME NVARCHAR2 100 U1,2 × 起動されたセンサーの名前
SENSOR_TARGET NVARCHAR2 256 -- × センサーのターゲット
ACTION_NAME NVARCHAR2 100 U1,3 × アクションの名前
ACTION_FILTER NVARCHAR2 256 -- アクションのフィルタ
ACTIVITY_SENSOR NUMBER -- -- 対応するアクティビティ・センサー値のID
CREATION_DATE TIMESTAMP -- -- × 作成日時
TS_DATE DATE -- -- × creation_dateの日付部分
TS_HOUR NUMBER -- -- × creation_dateの時間部分
VARIABLE_NAME NVARCHAR2 256 -- × BPEL変数の名前
EVAL_POINT VARCHAR2 30 -- 対応するアクティビティ・センサーの評価ポイント
CRITERIA_SATISFIED VARCHAR2 1 -- NULLYまたはN
TARGET NVARCHAR2 256 -- -- --
UPDATER_NAME NVARCHAR2 100 -- × 変数を更新したアクティビティまたはイベントの名前
UPDATER_TYPE NVARCHAR2 100 -- × BPELアクティビティまたはイベントのタイプ
SCHEMA_NAMESPACE NVARCHAR2 256 -- 変数センサー値のネームスペース
SCHEMA_DATATYPE NVARCHAR2 256 -- 変数センサー値のデータ型
VALUE_TYPE SMALLINT -- -- × 変数の値の型(java.sql.Typesの値に対応)
VARCHAR2_VALUE NVARCHAR2 2000 -- 文字列形式の変数の値

BPMERRORS

このビューには、BPMサービスから返されるすべてのエラーの概要が含まれます。

表17-5 BPMERRORSビュー

属性名 SQL型 属性サイズ 索引付きまたは一意 NULL可 コメント
ID NUMBER -- PK × 一意のID
BPEL_PROCESS_NAME NVARCHAR2 100 U1,1 × BPELプロセスの名前
BPEL_PROCESS_REVISION VARCHAR2 50 U1,2 × BPELプロセスのリビジョン
DOMAIN_ID VARCHAR2 50 U1,3 × Oracle BPEL Process Managerドメインの名前
CREATION_DATE TIMESTAMP -- -- × アクティビティ・センサー値の作成日時
TS_DATE DATE -- -- × creation_dateの日付部分
TS_HOUR NUMBER -- -- × creation_dateの時間部分
ERROR_CODE NUMBER -- -- × エラー・コード
EXCEPTION_TYPE NUMBER -- -- × エラーのタイプ
EXCEPTION_SEVERITY NUMBER -- -- × エラーの重大度
EXCEPTION_NAME NVARCHAR2 200 -- × エラーの名前
EXCEPTION_DESCRIPTION NVARCHAR2 2000 -- エラーの短い説明
EXCEPTION_FIX NVARCHAR2 2000 -- エラーを修正する方法の説明
EXCEPTION_CONTEXT VARCHAR2 4000 -- エラーのコンテキスト
COMPONENT NUMBER -- -- × エラーの原因となったBPMコンポーネント
THREAD_ID VARCHAR2 200 -- × エラーが発生したJavaスレッドの名前
STACKTRACE CLOB -- -- × Javaスタック・トレース

17.7 センサー・アクションXSDファイル

この項では、Oracle JDeveloperにインポート可能なセンサー・アクション・スキーマのサンプルを示します。このスキーマは、カスタム・データ・パブリッシャにも関連します。

<?xml version="1.0" encoding="utf-8"?>
<!--
  This schema contains the sensor definition. Sensors monitor data
  and execute callbacks appropriately.
-->
<xsd:schema blockDefault="#all" elementFormDefault="qualified"
            targetNamespace="http://xmlns.oracle.com/bpel/sensor"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:tns="http://xmlns.oracle.com/bpel/sensor">

  <xsd:simpleType name="tSensorActionPublishType">
    <xsd:annotation>
      <xsd:documentation>
        This enumeration lists the possibe publishing types for probes.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="BpelReportsSchema"/>
      <xsd:enumeration value="JMSQueue"/>
      <xsd:enumeration value="JMSTopic"/>
      <xsd:enumeration value="Custom"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="tSensorActionProperty">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="name" use="required" type="xsd:string"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <!--
    Attributes of a sensor action
  -->
  <xsd:attributeGroup name="tSensorActionAttributes">
    <xsd:attribute name="name" type="xsd:string" use="optional"/>
    <xsd:attribute name="enabled" type="xsd:boolean" use="optional"
 default="true"/>    <xsd:attribute name="filter" type="xsd:string"/>
    <xsd:attribute name="publishName" type="xsd:string" use="required"/>
    <xsd:attribute name="publishType" type="tns:tSensorActionPublishType"
 use="required"/>
    <!--
      the name of the JMS Queue/Topic or custom java API, ignored for other
      publishTypes
    -->
    <xsd:attribute name="publishTarget" type="xsd:string" use="optional"/>
  </xsd:attributeGroup>

  <!--
    The sensor action type. A sensor action consists:
    + unique name
    + effective date
    + expiration date - Optional. If not defined, the probe is active
                        indefinitely.
    + filter (to potentially suppress data publishing even if a sensor marks
             it as interesting). - Optional. If not defined, no filter is
             used.
    + publishName A name of a publisher
    + publishType What to do with the sensor data?
    + publishTarget Name of a JMS Queue/Topic or custom publisher.
    + potentially many sensors.
  -->
  <xsd:complexType name="tSensorAction">
    <xsd:sequence>
      <xsd:element name="sensorName" type="xsd:string" minOccurs="1"
 maxOccurs="unbounded"/>
      <xsd:element name="property" minOccurs="0" maxOccurs="unbounded"
 type="tns:tSensorActionProperty"/>
    </xsd:sequence>
    <xsd:attributeGroup ref="tns:tSensorActionAttributes"/>
  </xsd:complexType>

  <!--
    define a listing of sensor actions in a single document. It might be a good
 idea  to
    have one sensor action list per business process.
  -->
  <xsd:complexType name="tSensorActionList">
    <xsd:sequence>
      <xsd:element name="action" type="tns:tSensorAction" minOccurs="0"
 maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:simpleType name="tSensorKind">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="fault"/>
      <xsd:enumeration value="variable"/>
      <xsd:enumeration value="activity"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="tActivityConfig">
    <xsd:annotation>
      <xsd:documentation>
        The configuration part of an activity sensor comprises of a mandatory
 'evalTime' attribute
        and an optional list of variable configurations
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexContent>
      <xsd:extension base="tns:tSensorConfig">
        <xsd:sequence>
          <xsd:element name="variable" type="tns:tActivityVariableConfig"
 maxOccurs="unbounded" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="evalTime" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

    <xsd:complexType name="tAdapterConfig">
      <xsd:annotation>
        <xsd:documentation>
          The configuration part of a adapter activity extends the activty
 configuration with additional attributes for adapters
        </xsd:documentation>
      </xsd:annotation>
      <xsd:complexContent>
        <xsd:extension base="tns:tActivityConfig">
          <xsd:attribute name="headerVariable" use="required" type="xsd:string"/>
          <xsd:attribute name="partnerLink" use="required" type="xsd:string"/>
        <xsd:attribute name="portType" use="required" type="xsd:string"/>
        <xsd:attribute name="operation" use="required" type="xsd:string"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>

  <xsd:complexType name="tVariableConfig">
    <xsd:complexContent>
      <xsd:extension base="tns:tSensorConfig">
        <xsd:attribute name="outputDataType" use="required" type="xsd:string"/>
        <xsd:attribute name="outputNamespace" use="required" type="xsd:string"/>
        <xsd:attribute name="queryName" use="optional" type="xsd:string"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="tActivityVariableConfig">
    <xsd:complexContent>
      <xsd:extension base="tns:tVariableConfig">
        <xsd:attribute name="target" type="xsd:string" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="tFaultConfig">
    <xsd:complexContent>
      <xsd:extension base="tns:tSensorConfig"/>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="tNotificationSvcConfig">
    <xsd:complexContent>
      <xsd:extension base="tns:tActivityConfig">
        <xsd:attribute name="inputVariable" use="required" type="xsd:string"/>
        <xsd:attribute name="outputVariable" use="required" type="xsd:string"/>
        <xsd:attribute name="operation" use="required" type="xsd:string"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="tSensorConfig">
    <xsd:sequence>
      <xsd:element name="action" type="tns:tInlineSensorAction" minOccurs="0"
 maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="tInlineSensorAction">
    <xsd:complexContent>
      <xsd:restriction base="tns:tSensorAction"/>
    </xsd:complexContent>
  </xsd:complexType>

  <xsd:complexType name="tSensor">
    <xsd:sequence>
      <xsd:element name="activityConfig" type="tns:tActivityConfig"
 minOccurs="0"/>
      <xsd:element name="adapterConfig" type="tns:tAdapterConfig" minOccurs="0"/>
      <xsd:element name="faultConfig" type="tns:tFaultConfig" minOccurs="0"/>
      <xsd:element name="notificationConfig" type="tns:tNotificationSvcConfig"
 minOccurs="0"/>
      <xsd:element name="variableConfig" type="tns:tVariableConfig"
 minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="sensorName" use="required" type="xsd:string"/>
    <xsd:attribute name="kind" use="required" type="tns:tSensorKind"/>
    <xsd:attribute name="classname" use="required" type="xsd:string"/>
    <xsd:attribute name="target" use="required" type="xsd:string"/>
  </xsd:complexType>

  <xsd:complexType name="tSensorList">
    <xsd:sequence>
      <xsd:element name="sensor" type="tns:tSensor" minOccurs="0"
 maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="tRouterData">
    <xsd:sequence>
      <xsd:element name="header" type="tns:tHeaderInfo"/>
      <xsd:element name="payload" type="tns:tSensorData"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="tHeaderInfo">
    <xsd:sequence>
      <xsd:element name="processName" type="xsd:string"/>
      <xsd:element name="processRevision" type="xsd:string"/>
      <xsd:element name="domain" type="xsd:string"/>
      <xsd:element name="instanceId" type="xsd:integer"/>
      <xsd:element name="midTierInstance" type="xsd:string"/>
      <xsd:element name="timestamp" type="xsd:dateTime"/>
      <xsd:element name="sensor" type="tns:tSensor"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="tSensorData">
      <xsd:sequence>
        <xsd:element name="activityData" type="tns:tActivityData" minOccurs="0"/>
      <xsd:element name="faultData" type="tns:tFaultData" minOccurs="0"/>
      <xsd:element name="adapterData" minOccurs="0" type="tns:tAdapterData"/>
        <xsd:element name="variableData" type="tns:tVariableData" minOccurs="0"
 maxOccurs="unbounded"/>
        <xsd:element name="notificationData" type="tns:tNotificationData"
 minOccurs="0"/>
      </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="tFaultData">
    <xsd:sequence>
      <xsd:element name="activityName" type="xsd:string"/>
      <xsd:element name="activityType" type="xsd:string"/>
      <xsd:element name="data" type="xsd:anyType" minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="tActivityData">
    <xsd:sequence>
      <xsd:element name="activityType" type="xsd:string"/>
      <xsd:element name="evalPoint" type="xsd:string"/>
      <xsd:element name="errorMessage" nillable="true" minOccurs="0"
 type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--
   xml type that will be provided to sensors for variable Datas. Note the
      any element represents variable data.
   -->
  <xsd:complexType name="tVariableData">
    <xsd:sequence>
      <xsd:element name="target" type="xsd:string"/>
      <xsd:element name="queryName" type="xsd:string"/>
      <xsd:element name="updaterName" type="xsd:string" minOccurs="1"/>
      <xsd:element name="updaterType" type="xsd:string" minOccurs="1"/>
      <xsd:element name="data" type="xsd:anyType"/>
      <xsd:element name="dataType" type="xsd:integer"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="tNotificationData">
    <xsd:complexContent>
      <xsd:extension base="tns:tActivityData">
        <xsd:sequence>
          <xsd:element name="messageID" type="xsd:string" minOccurs="0"
 maxOccurs="unbounded"/>
          <xsd:element name="fromAddress" type="xsd:string" minOccurs="0"/>
          <xsd:element name="toAddress" type="xsd:string" minOccurs="0"/>
          <xsd:element name="deliveryChannel" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>

  </xsd:complexType>
  <xsd:complexType name="tAdapterData">
    <xsd:complexContent>
      <xsd:extension base="tns:tActivityData">
        <xsd:sequence>
          <xsd:element name="endpoint" type="xsd:string"/>
          <xsd:element name="direction" type="xsd:string"/>
          <xsd:element name="adapterType" type="xsd:string"/>
          <xsd:element name="priority" type="xsd:string" minOccurs="0"/>
          <xsd:element name="messageSize" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--
    The header of the document contains some metadata.
  -->
  <xsd:complexType name="tSensorActionHeader">
    <xsd:sequence>
      <xsd:element name="processName" type="xsd:string"/>
      <xsd:element name="processVersion" type="xsd:string"/>
      <xsd:element name="processID" type="xsd:long"/>
      <xsd:element name="midTierInstance" type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="actionName" use="required" type="xsd:string"/>
  </xsd:complexType>

  <!--
 Sensor Action data is presented in the form of a header and potentially many
 data elements depending on how many sensors associated to the sensor action
 marked the data as interesting.
  -->
  <xsd:complexType name="tSensorActionData">
    <xsd:sequence>
      <xsd:element name="header" type="tns:tHeaderInfo"/>
      <xsd:element name="payload" type="tns:tSensorData" minOccurs="1"
                   maxOccurs="1"/>
    </xsd:sequence>
  </xsd:complexType>
<!--
  <xsd:simpleType name="tActivityEvalPoint">
    <xsd:restriction>
      <xsd:enumeration value="start"/>
      <xsd:enumeration value="complete"/>
      <xsd:enumeration value="fault"/>
      <xsd:enumeration value="compensate"/>
      <xsd:enumeration value="retry"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="tNotificationAction">
    <xsd:restriction>
      <xsd:enumeration value="creation"/>
      <xsd:enumeration value="statusUpdate"/>
    </xsd:restriction>
  </xsd:simpleType>
-->

  <!--
    The process sensor value header comprises of a timestamp
    where the sensor was triggered and the sensor metadata
  -->
  <xsd:complexType name="tProcessSensorValueHeader">
    <xsd:sequence>
      <xsd:element name="timestamp" type="xsd:dateTime"/>
      <xsd:element ref="tns:sensor"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--
    Extend tActivityData to include more elements
  -->
  <xsd:complexType name="tProcessActivityData">
    <xsd:complexContent>
      <xsd:extension base="tns:tActivityData">
        <xsd:sequence>
          <xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
          <xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
          <xsd:element name="evalTime" type="xsd:long" minOccurs="0"
 maxOccurs="1"/>
          <xsd:element name="retryCount" type="xsd:int" minOccurs="0"
 maxOccurs="1"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <!--
    Extend tVariableData to include more elements
  -->
  <xsd:complexType name="tProcessVariableData">
    <xsd:complexContent>
      <xsd:extension base="tns:tVariableData">
        <xsd:sequence>
          <xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
          <xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <!--
    Extend tFaultData to include more elements
  -->
  <xsd:complexType name="tProcessFaultData">
    <xsd:complexContent>
      <xsd:extension base="tns:tFaultData">
        <xsd:sequence>
          <xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
          <xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <!--
    Extend tAdapterData to include more elements
  -->
  <xsd:complexType name="tProcessAdapterData">
    <xsd:complexContent>
      <xsd:extension base="tns:tAdapterData">
        <xsd:sequence>
          <xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
          <xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

  <!--
    Extend tNotificationData to include more elements
  -->
  <xsd:complexType name="tProcessNotificationData">
    <xsd:complexContent>
      <xsd:extension base="tns:tNotificationData">
        <xsd:sequence>
          <xsd:element name="creationDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
          <xsd:element name="modifyDate" type="xsd:dateTime" minOccurs="0"
 maxOccurs="1"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <!--
    Copy of tSensorData type with some modified types.
  -->
  <xsd:complexType name="tProcessSensorData">
    <xsd:sequence>
      <xsd:element name="activityData" type="tns:tProcessActivityData"
 minOccurs="0"/>
      <xsd:element name="faultData" type="tns:tProcessFaultData" minOccurs="0"/>
      <xsd:element name="adapterData" minOccurs="0"
 type="tns:tProcessAdapterData"/>
      <xsd:element name="variableData" type="tns:tProcessVariableData"
 minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="notificationData" type="tns:tProcessNotificationData"
 minOccurs="0"/>
    </xsd:sequence>
  </xsd:complexType>
  <!--
    A single process sensor value comprises of the sensor value metadata
    (sensor and timestamp) and the payload (the value) of the sensor
  -->
  <xsd:complexType name="tProcessSensorValue">
    <xsd:sequence>
      <xsd:element name="header" type="tns:tProcessSensorValueHeader"/>
      <xsd:element name="payload" type="tns:tProcessSensorData"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--
    Process instance header.
  -->
  <xsd:complexType name="tProcessInstanceInfo">
    <xsd:sequence>
      <xsd:element name="processName" type="xsd:string"/>
      <xsd:element name="processRevision" type="xsd:string"/>
      <xsd:element name="domain" type="xsd:string"/>
      <xsd:element name="instanceId" type="xsd:integer"/>
    </xsd:sequence>
  </xsd:complexType>

  <!--
    The list of sensor values comprises of a process header describing the
    BPEL process with name, cube instance id etc. and a list of sensor values
    comprising of sensor metadata information and sensor values.
  -->
  <xsd:complexType name="tProcessSensorValueList">
    <xsd:sequence>
      <xsd:element name="process" type="tns:tProcessInstanceInfo" minOccurs="1"
 maxOccurs="1"/>
      <xsd:element name="sensorValue" type="tns:tProcessSensorValue" minOccurs="0"
 maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>

  <!-- The sensor list is the root element of the sensor.xml document in the
       bpel process suitcase and is used to define sensors. -->
  <xsd:element name="sensors" type="tns:tSensorList"/>

  <!-- A sensor is used to monitor a particular aspect of a bpel process -->
  <xsd:element name="sensor" type="tns:tSensor"/>

  <!-- The actions element is the root element of the sensorAction.xml document
       in the bpel process suitcase and is used to define sensor actions.
       Sensor actions define how to publish data captured by sensors -->
  <xsd:element name="actions" type="tns:tSensorActionList"/>

  <!-- actionData elements are produced by the sensor framework and sent to the
       appropriate data publishers when sensors 'fire' -->
  <xsd:element name="actionData" type="tns:tSensorActionData"/>

  <!-- This element is used when the client API is used to query sensor values
       stored in the default reports schema -->
  <xsd:element name="sensorValues" type="tns:tProcessSensorValueList"/>
</xsd:schema>

17.8 まとめ

この章では、BPELアクティビティ、変数およびフォルトを実行時に監視するセンサーを設定および使用する方法について説明しました。また、センサー・データをOracle BAM Serverのデータ・オブジェクトとしてパブリッシュするための、Oracle BPEL Process Managerにおけるセンサー・アクションの作成方法についても説明しました。