BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Integration > BPM トピック > BPM プラグイン プログラミング ガイド > プラグイン イベントの処理 |
BPM プラグイン プログラミング ガイド
|
プラグイン イベントの処理
この章では、プラグイン イベントを処理する方法について説明します。この章の内容は以下のとおりです。
プラグイン イベントの概要
イベントとは、別のワークフローから、あるいは別のアプリケーションなどの外部ソースからの非同期通知です。ワークフローの開始、変数の初期化、ワークフロー内のノードのアクティブ化、アクションの実行を行うイベントを定義できます。イベントとイベント プロパティは、WebLogic Integration Studio を使用して、開始ノードとイベント ノードを定義するときに定義します。イベントとイベント プロパティの定義方法の詳細については、『WebLogic Integration Studio ユーザーズ ガイド』を参照してください。
BPM フレームワークは、JMS を介して配信される XML フォーマットのイベント メッセージをサポートします。XML フォーマットと非 XML フォーマットの両方のイベント メッセージをサポートするには、プラグイン イベントを定義する必要があります。
次の図に、プラグイン イベントのデータ フローを示します。
図6-1 プラグイン イベント データ フロー
前の図に示したように、プラグイン イベント メッセージは、次の 2 通りの方法のいずれかでシステムに渡されます。
実行時、イベント リスナは、XML フォーマットで受信され、JMS を使用して配信されるイベントをリスンします(JMS eventQueue を介して)。
eventQueue のために JMS イベント リスナを設定する方法については、『BPM クライアント アプリケーション プログラミング ガイド』の「JMS 接続の確立」を参照してください。
実行時、Plug-in Manager の onEvent() メソッドは、プラグインにより指定されたすべてのデータ フォーマットを受け入れます。
WebLogic Integration プロセス エンジンは、着信プラグイン イベント メッセージを com.bea.wlpi.server.eventprocessor.EventData オブジェクトとして格納し、そのオブジェクトを Event Processor に渡します。EventData オブジェクトの詳細については、EventData クラスを参照してください。
Event Processor は、EventData オブジェクトを受信すると、WLPIPlugin プロパティがメッセージの一部として定義されているかどうかをまずチェックします。
WLPIPlugin メッセージ プロパティは、次のいずれかの方法で定義できます。
WLPIPlugin プロパティが定義されている場合、Event Processor は、プラグイン イベント ハンドラに EventData オブジェクトを渡して、プラグイン イベント データを前処理します。前処理されたイベント データは、EventData オブジェクトの配列として Event Processor に返されます。プラグイン イベント ハンドラの定義方法の詳細については、プラグイン イベント ハンドラの定義を参照してください。
次に、Event Processor は、結果のデータが XML フォーマットであるかどうかをチェックし、そうであれば、次の手順を実行します。
この時点で、Event Processor は、EventData オブジェクトにより提供されるコンテンツ タイプとイベント記述子を取得します。
コンテンツ タイプは、MIME (Multi-Purpose Internet Mail Exensions) コンテンツ タイプを参照し、メッセージの基本データ タイプを説明します。コンテンツ タイプのデフォルトは text/xml で、データがテキスト フォーマットであり、XML のルールに従っていることを示します。
イベント記述子は、データ フォーマットの正確な定義を提供し、コンテンツ タイプに基づいて解釈されます。
たとえば、コンテンツ タイプが text/xml に設定されている場合、イベント記述子は XML ドキュメント タイプです。DOCTYPE タグが設定されている場合、XML ドキュメント タイプは、パブリック ID またはシステム ID(定義されている場合)、あるいはドキュメント要素名です。一方、コンテンツ タイプが application/x-java-object に設定されている場合(シリアライズされた Java オブジェクトを示す)、イベント記述子は Java クラスの完全修飾名です。
イベント キーは、主キーとして扱う必要のある着信データ フィールドを指定します。また、特定のコンテンツ タイプおよびイベント記述子と関連付けられます。イベント キーは、パフォーマンス向上のために、着信イベント データのフィルタ メカニズムを提供します。イベント キーの定義方法の詳細については、『WebLogic Integration Studio ユーザーズ ガイド』を参照してください。
注意: プラグイン イベント ノードまたは開始ノードが、com.bea.wlpi.server.plugin.EventContext インタフェースの activateEvent() メソッドまたは postStartWatch() メソッドをそれぞれ使用し、text/xml 以外のコンテンツ タイプを渡す場合、プラグインは一致するイベント キー式をイベント キー テーブルに登録しておく必要があります。これを行うには、com.bea.wlpi.server.admin.Admin インタフェースの addEventKey() メソッドを使用します。プラグインは、このコンテンツ タイプとフォーマットの着信データからのキー値を評価するためのプラグイン フィールドも提供する必要があります。プラグイン フィールドの定義方法の詳細については、メッセージ タイプのための実行時コンポーネント クラスの定義を参照してください。
これらの各タスクは、イベントに対してサブスクライブされたコンシューマごとに実行されます。
プラグイン イベントをサポートする手順は次のとおりです。
次の節では、これらの手順の詳細およびプラグイン イベント ハンドラにメッセージを送信する方法について説明します。
イベント ハンドラを作成する前に、着信プラグイン イベント メッセージを格納する EventData コンテナ クラスに関する情報の作成方法とアクセス方法を理解しておく必要があります。
EventData クラス
プラグイン イベント データ フローの図に示したように、com.bea.wlpi.server.eventprocessor.EventData オブジェクトには着信データ メッセージ用のコンテナ クラスがあります。
次の表に、EventData オブジェクトを作成するために使用できるコンストラクタを示します。
次の表に、EventData オブジェクト情報、その情報を定義する際に使用するコンストラクタ パラメータ、オブジェクト定義後にこの情報にアクセスする際に使用するメソッドを示します。
次の表に、XML データの解析に使用できるメソッドを示します。
次の節では、着信 EventData オブジェクトを前処理するためのプラグイン イベント ハンドラを定義する方法について説明します。
プラグイン イベント ハンドラの定義
プラグイン イベント データ フローの図に示したように、プラグイン イベント データを前処理するためのプラグイン イベント ハンドラを定義し、Event Processor がデータを解析できるようにする必要があります。
プラグイン イベント ハンドラを定義するには、次のタスクを実行します。
次の節では、これらの手順についてさらに詳しく説明します。
イベント ハンドラ コンポーネント クラスの定義
プラグイン イベント ハンドラ コンポーネント クラスを定義するには、com.bea.wlpi.server.plugin.EventHandler インタフェースを実装します。
次の表で、着信プラグイン イベント データを前処理するために実装する必要のある EventHandler インタフェース メソッドについて説明します。
イベント ハンドラ値オブジェクトの作成 イベント ハンドラ値オブジェクト com.bea.wlpi.common.plugin.EventHandlerInfo を作成するには、EventHandlerInfo オブジェクトに定義されているコンストラクタを使用します。classNames コンストラクタ パラメータ値として、前の節で定義したイベント ハンドラ コンポーネント クラスの名前を渡す必要があります。 たとえば、次のコード抜粋では、イベント ハンドラ クラス sample.MyEventHandler の名前を渡して、新しいイベント ハンドラ値オブジェクトを作成しています。イベント ハンドラ クラスは、イベント ハンドラ コンポーネント クラスの定義に説明されているように、EventHandler com.bea.wlpi.server.plugin.EventHandler インタフェースを実装します。 EventHandlerInfo オブジェクトの詳細については、EventHandlerInfo オブジェクトを参照してください。 イベント ハンドラの登録 イベント ハンドラを登録するには、PluginCapabilitiesInfo オブジェクトに定義されているように com.bea.wlpi.common.plugin.PluginCapabilitiesInfo 値オブジェクトを作成し、前の節で定義した EventHandlerInfo オブジェクトを eventHandler コンストラクタ パラメータ値として渡します。 たとえば、次のコード抜粋では、引数として com.bea.wlpi.common.plugin.EventHandlerInfo オブジェクトの名前を渡して、新しい PluginCapabilitiesInfo 値オブジェクトを作成しています。 PluginCapabilitiesInfo オブジェクトの詳細については、PluginCapabilitiesInfo オブジェクトを参照してください。
eh = new EventHandlerInfo(SamplePluginConstants.PLUGIN_NAME,
bundle.getString("startOrderName"),
bundle.getString("startOrderDesc")
sample.MyEventHandler);
eventHandler = new EventHandlerInfo[]{ eh };PluginCapabilitiesInfo pci = new PluginCapabilitiesInfo(pi,
getCategoryInfo(bundle), eventInfo, fieldInfo, functionInfo,
startInfo, null, null, null, null, eventHandler);
プラグイン メッセージ タイプの定義
プロセス エンジンがプラグイン com.bea.wlpi.server.eventprocessor.EventData オブジェクトから情報を抽出できるようにするには、プラグイン メッセージ タイプ、すなわちプラグイン フィールドを定義する必要があります。抽出した値は、ワークフロー変数に代入したり、式の一部(キー値や条件式など)として使用できます。
プラグイン メッセージ タイプの定義方法の詳細については、メッセージ タイプのための実行時コンポーネント クラスの定義を参照してください。
イベント ウォッチ エントリの定義
イベント ウォッチ エントリにより、Event Processor は着信イベントをプラグイン ノードと照合できます。
次の表に、各プラグイン ノード タイプについて、プロセス エンジンがプラグイン イベント エントリをイベント ウォッチ テーブルに追加する方法を示します。
プラグイン イベント ハンドラに対するイベントの送信
プラグイン イベント ハンドラに対してイベントを送信するには、メッセージ送信側は、com.bea.wlpi.server.eventprocessor.EventData オブジェクトの WLPIPlugin 文字列プロパティをイベント ハンドラ名に設定する必要があります。
たとえば、次のコードは、イベント ハンドラ SamplePlugin の名前に対して WLPIPlugin プロパティを設定し、EventData コンストラクタにこの情報を渡すことにより、プロパティ マップを構築する方法を示しています。
Map props = new HashMap();
props.put("WLPIPlugin""SamplePlugin");
EventData eventData = new EventData(data,
"text/x-appplication/sample",
"Order", 0, null, null, props);
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |