Integration コントロールを使用する

     前  次    新しいウィンドウで目次を開く     
ここから内容

メッセージ ブローカ コントロール

コントロールの挿入 : MB サブスクリプション

エンタープライズ アプリケーションでは、多くの場合、メッセージング システムを使用して、従来のシステムとの通信またはソフトウェア コンポーネント間の通信を行います。メッセージング システムのクライアントは、他の任意のクライアントとメッセージを送受信することができます。

メッセージ ブローカ リソースにより、パブリッシュおよびサブスクライブ メッセージベースの通信モデルが Oracle WebLogic Integration ビジネス プロセスで使用可能になります。メッセージ ブローカには強力なメッセージ フィルタ機能もあります。

メッセージ ブローカには、メッセージをパブリッシュしたり、サービスがメッセージを受信するためにサブスクライブしたりできる、タイプ別のチャネルが用意されています。型保証メソッド用の XML Bean を使用して、特定のチャネルにサブスクライブするビジネス プロセスを設計できます。

メッセージ ブローカ チャネルのサブスクライバは、XQuery フィルタを使用してチャネル上のメッセージをフィルタ処理できます。Oracle WebLogic Integration では、チャネル用の XQuery フィルタを作成できる強力なマッピング ツールをサポートしています。ビジネス プロセスは、ドキュメント タイプまたはドキュメント コンテンツに基づいて、チャネル上のドキュメントをフィルタ処理できます。たとえば、銘柄記号ドキュメントをフィルタ処理するフィルタや、特定の発注書番号をフィルタ処理するフィルタを設計できます。

Oracle WebLogic Integration では、メッセージ ブローカ チャネルにメッセージをパブリッシュできるビジネス プロセスに加え、メッセージ ブローカ チャネルに外部イベントをパブリッシュできるイベント ジェネレータもサポートしています。Oracle WebLogic Integration には、電子メール イベント ジェネレータ、ファイル イベント ジェネレータ、HTTP イベント ジェネレータ、JMS イベント ジェネレータ、MQ イベント ジェネレータ、およびタイマー イベント ジェネレータなどのネイティブ イベント ジェネレータが用意されています。これらのイベント ジェネレータを使用すると、電子メールの受信やディレクトリでの新しいファイルの出現などのイベントに基づいて、ビジネス プロセスを開始したり続行したりすることができます。Oracle WebLogic Integration Administration Console でイベント ジェネレータを作成および管理する方法については、『WebLogic Integration Administration Console の使用』の「イベント ジェネレータ」を参照してください。

チャネルの詳細については、以下を参照してください。

メッセージ ブローカ コントロールはいくつかの方法でカスタマイズできます。コントロールのプロパティを変更することができます。この変更の詳細については、以降の節で説明します。

 


この節に含まれるトピック

 


メッセージ ブローカ パブリッシュ コントロール

ビジネス プロセスの 2 つのメッセージ ブローカ コントロール、パブリッシュ コントロールとサブスクリプション コントロールを使用できます。ビジネス プロセスはパブリッシュ コントロールを使用して、メッセージをメッセージ ブローカ チャネルにパブリッシュします。メッセージ ブローカ チャネルは、パブリッシュ コントロールを宣言するときにコントロールにバインドしますが、これは動的にオーバーライドされます。メッセージ ブローカ パブリッシュ コントロールの拡張 (サブクラス) にメソッドを追加することができます。

コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。

以下のトピックでは、メッセージ ブローカ パブリッシュ コントロールの作成方法と使用方法について説明します。

メッセージ ブローカ パブリッシュ コントロールのインスタンスを作成するには
  1. [パッケージ・エクスプローラー] ペインで、MB パブリッシュ コントロールを追加するビジネス プロセスをダブルクリックします。ビジネス プロセスがデザイン ビューに表示されます。
  2. データ パレットの コントロールの挿入 : MB サブスクリプション をクリックし、ドロップダウン リストから Integration コントロールを選択して、アプリケーションの統合に使用するコントロールのリストを表示します。
注意 : [データ パレット] ビューが Oracle Workshop for WebLogic に表示されない場合は、メニュー バーから [ウィンドウ|ビューの表示|データ パレット] をクリックします。
  1. [MB パブリッシュ] を選択します。
  2. [コントロールの挿入 : MB パブリッシュ] ダイアログ ボックスが表示されます (図 8-1 を参照)。

    図 8-1 コントロールの挿入 : MB パブリッシュ
    コントロールの挿入 : MB パブリッシュ
  3. [コントロールの挿入 : MB パブリッシュ] ダイアログ ボックスで、以下の情報を入力します。
    • [フィールド名] に、ビジネス プロセスから新しい MB パブリッシュ コントロール インスタンスにアクセスするときに使用する変数の名前を入力します。有効な Java 識別子を入力する必要があります。
    • [挿入位置] で、フィールド名をプロセス ファイルに挿入するポイントをドロップダウン リストから選択します。
    • これをコントロール ファクトリにするかどうかを決定し、[これを実行時に複数のインスタンスを作成できるコントロール ファクトリにする] チェック ボックスをチェックするか、チェックをはずします。
    • [次へ] をクリックします。
    • [コントロールの作成] ウィザードが表示されます。

  4. [コントロールの作成] ダイアログ ボックスで、以下の情報を入力します。
    • [名前] フィールドに新しいコントロール拡張ファイルの名前を入力します。
    • 現在のプロジェクトのプロパティに設定されているようにコメントを追加するかどうかを決定し、[コメントの生成] チェック ボックスをチェックするか、チェックをはずします。
    • [次へ] をクリックします。
  5. [コントロールの挿入 - MB Publish] ダイアログ ボックスで、以下のいずれかの情報を入力します。
    • チャネル名 - ビジネス プロセスがパブリッシュするチャネルを選択します。
    • 注意 : [チャネル名] フィールドに使用可能なオプションがない場合は、ビジネス プロセスがパブリッシュまたはサブスクライブできるチャネルを定義する、チャネル ファイルを作成する必要があります。
    • メッセージ タイプ - 読み込み専用フィールド。指定されたチャネルにパブリッシュされるデータの型が表示されます。
    • メタデータ タイプ - 読み込み専用フィールド。チャネル定義に qualifiedMetadataType が設定されている場合に、メタデータ型の値を表示します。
    • [終了] をクリックします。
    • MB パブリッシュ コントロールのインスタンスがプロジェクト内に作成され、データ パレットに表示されます。

MB パブリッシュ コントロールの Java ファイル

新しい MB パブリッシュ コントロールを作成すると、プロジェクト内に新しい Control Java ファイルが作成されます。以下のサンプル Control Java ファイルは、コントロール ウィザードで自動的に作成されます。

package requestquote;
import org.apache.beehive.controls.api.bean.ControlExtension;
/*
 * カスタム パブリッシュ コントロール。  
 */
@ControlExtension
@com.bea.control.PublishControl.ClassPublish(channelName = "/deadletter/rawData")
public interface MBPublish extends com.bea.control.PublishControl {
	@com.bea.control.PublishControl.MethodPublish(body = "{value}")
	void publish(com.bea.data.RawData value);
	@com.bea.control.PublishControl.MethodPublish(metadata = "{metadata}", body = "{value}")
	void publishWithMetadata(org.apache.xmlbeans.XmlObject metadata,
			com.bea.data.RawData value);
	static final long serialVersionUID = 1L;
	public MBPublish create();
}

MB パブリッシュ インタフェースのメソッドを使用する

この節では、MB パブリッシュ コントロール インタフェースについて説明します。アプリケーション内からメソッドを使用して、メッセージ ブローカ チャネルにパブリッシュします。

MB パブリッシュ コントロール インタフェース
package com.bea.control;

import com.bea.wli.control.dynamicProperties.PublishControlPropertiesDocument;
import org.w3c.dom.Element;
import weblogic.jws.control.Control;

/**
 * メッセージ ブローカ パブリッシュ コントロールの基本インタフェース
 */
public interface PublishControl extends Control {
    /**
     * 次回のパブリッシュ操作で使用するためにメッセージ ヘッダを一時的に設定する
     * @param headers headers to set
     */
    void setOutputHeaders(Element[] headers);
    /**
     * コントロールの動的なプロパティを設定する
     * @param props コントロールの動的なプロパティ
     */
     void setProperties(PublishControlPropertiesDocument props);
    /**
     * コントロールの動的なプロパティを設定する
     * @return コントロールの現在のプロパティ
     */
     PublishControlPropertiesDocument getProperties();
}

PublishControlPropertiesDocument XML Bean は、各プロセス アプリケーションの Schemas フォルダ内にある DynamicProperties.xsd で定義されています。

MB パブリッシュ コントロールで使用できるメソッドの詳細については、PublishControl インタフェースを参照してください。

メソッド属性

以下のメソッド属性は、MB パブリッシュ コントロールの動作を決定します。

クラス属性には以下があります。

channel-name

MB パブリッシュ コントロールがメッセージをパブリッシュするメッセージ ブローカ チャネルの名前です。

message-metadata

デフォルトでは、この XML ヘッダはこのコントロールでパブリッシュされるメッセージに含まれます。有効な値は XML を含む文字列です。

メソッド属性には以下があります。

message-metadata

関連付けられたコントロール メソッドでパブリッシュされるメッセージに含まれる XML ヘッダです。有効な値は、XML を含む文字列、または中括弧で囲まれたメソッド パラメータ ({parameter1} など) です。

message-body

有効な値は、パブリッシュされるメッセージでメッセージ本体として使用されるテキストを含んだ文字列、または中括弧で囲まれたメソッド パラメータ ({parameter2} など) です。

MB パブリッシュ コントロールのサンプル コード

パブリッシュ コントロールを使用すると、クラスレベルのアノテーションを動的なプロパティでオーバーライドできます。これを行うには、コントロールの動的なプロパティ スキーマに準拠する XML 変数を使用します。

以下は、動的なプロパティの指定に使用できる XML 変数の例です。

<PublishControlProperties>
<channel-name>potopic</channel-name>
<message-metadata>
<custom-header>ACME Corp</custom-header>
<message-metadata>
</PublishControlProperties>

MB パブリッシュ コントロールの動的なプロパティに対する XML スキーマを以下に示します。WLI スキーマ プロジェクト テンプレートをアプリケーションに追加することによって、このスキーマを取得できます。getProperties メソッドと setProperties メソッドを使用して、これらのプロパティを取得および設定できます。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.bea.com/wli/control/dynamicProperties"
xmlns="http://www.bea.com/wli/control/dynamicProperties"
elementFormDefault="qualified">
<xs:element name="PublishControlProperties">
<xs:complexType>
<xs:sequence>
<xs:element name="channel-name" type="xs:string"
minOccurs="0" maxOccurs="1" />
<xs:element name="message-metadata" type="header"
minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- 以下の複合型は、XML のコンテンツにおける任意のシーケンスを表す -->
    <xs:complexType name="header">
<xs:sequence>
<xs:any namespace="##other" minOccurs="0"
maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
</xs:complexType>
</xs:schema>
サンプル コード

MB パブリッシュ コントロールを拡張する必要があります。以下は、ビジネス プロセス内での MB パブリッシュ コントロールのコーディングの例です。

/*
* @com.bea.control.PublishControl.ClassPublish channel-name="/controls/potopic"
*/
public interface MBPublish extends com.bea.control.PublishControl{
/**
* @com.bea.control.PublishControl.MethodPublish
* message-metadata="<custom-header>ACME Corp</custom-header>"
* message-body="{myMsgToSend}"
*/
    void publishPO(XmlObject myMsgToSend);
}
/*
* org.apache.beehive.controls.api.bean.Control
*/
private MyPublishControl pubCtrl;
// メッセージをパブリッシュする 
void sendIt(XmlObject myMsgToSend) {
pubCtrl.publishPO(myMsgToSend);
}

 


メッセージ ブローカ サブスクリプション コントロール

ビジネス プロセスの 2 つのメッセージ ブローカ コントロール、パブリッシュ コントロールとサブスクリプション コントロールを使用できます。ビジネス プロセスはサブスクリプション コントロールを使用してチャネルに動的にサブスクライブし、メッセージを受信します。ビジネス プロセスのコントロール インスタンスを作成するときに、チャネル、およびメッセージ フィルタ処理用の XQuery 式 (省略可能) をバインドします。バインディングは動的にオーバーライドできません。

サブスクリプション コントロール インタフェースには、ビジネス プロセスが、バインドされたメッセージ ブローカ チャネルをサブスクライブしたり、アンサブスクライブしたりできるメソッドが含まれています。

サブスクライブ処理は、他のビジネス プロセス処理と同様に、より大きな XA トランザクションの一部です。したがって、ビジネス プロセス処理が失敗した場合、サブスクライブ処理はロールバックされます。サブスクリプションはトランザクション内にあるため、サブスクリプションを永続的にするにはトランザクションをコミットする必要があります。トランザクション非対応の処理を行う場合、つまり、応答メッセージをトリガするアクションを実行する前にサブスクライブ処理をコミットする必要がある場合は、フロー内の <transaction/> ブロックを使用して、サブスクリプションを含む現在のビジネス プロセスの状態をコミットします。

コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。

以下のトピックでは、メッセージ ブローカ サブスクリプション コントロールの作成方法と使用方法について説明します。

メッセージ ブローカ サブスクリプション コントロールのインスタンスを作成するには
  1. [パッケージ・エクスプローラー] ペインで、MB サブスクリプション コントロールを追加するビジネス プロセスをダブルクリックします。ビジネス プロセスがデザイン ビューに表示されます。
  2. [データ パレット] の コントロールの挿入 : MB パブリッシュ をクリックし、
    ドロップダウン リストから [Integration コントロール] を選択して、アプリケーションの統合に使用するコントロールのリストを表示します。
注意 : [データ パレット] ビューが Oracle Workshop for WebLogic に表示されない場合は、メニュー バーから [ウィンドウ|ビューの表示|データ パレット] をクリックします。
  1. MB サブスクリプション を選択します。
  2. [コントロールの挿入 : MB サブスクリプション] ダイアログ ボックスが表示されます。

    図 8-2 コントロールの挿入 : MB サブスクリプション


    コントロールの挿入 : MB サブスクリプション

  3. [コントロールの挿入 : MB サブスクリプション] ダイアログ ボックスで、以下の情報を入力します。
    • [フィールド名] に、ビジネス プロセスから新しい MB サブスクリプション コントロール インスタンスにアクセスするときに使用する変数の名前を入力します。有効な Java 識別子を入力する必要があります。
    • [挿入位置] で、フィールド名をプロセス ファイルに挿入するポイントをドロップダウン リストから選択します。
    • これをコントロール ファクトリにするかどうかを決定し、[これを実行時に複数のインスタンスを作成できるコントロール ファクトリにする] チェック ボックスをチェックするか、チェックをはずします。
    • [次へ] をクリックします。
    • [コントロールの作成] ダイアログ ボックスが表示されます。

  4. [コントロールの作成] ダイアログ ボックスで、以下の情報を入力します。
    • [名前] フィールドに新しいコントロール拡張ファイルの名前を入力します。
    • 現在のプロジェクトのプロパティに設定されているようにコメントを追加するかどうかを決定し、[コメントの生成] チェック ボックスをチェックするか、チェックをはずします。
    • [次へ] をクリックします。
  5. [コントロールの挿入 - MB Subscription] ダイアログ ボックスで、以下の情報を入力します。
    • チャネル名 - ビジネス プロセスがサブスクライブするチャネルを選択します。
    • 注意 : [チャネル名] フィールドに使用可能なオプションがない場合は、ビジネス プロセスがパブリッシュまたはサブスクライブできるチャネルを定義する、チャネル ファイルを作成する必要があります。
    • メッセージ タイプ - 読み込み専用フィールド。指定されたチャネルから受け取ったデータの型 (StringXmlObjectRawData) が表示されます。
    • メタデータ タイプ - 読み込み専用フィールド。チャネル定義に qualifiedMetadataType が設定されている場合に、メタデータ型の値を表示します。
    • フィルタの値を使用してサブスクライブする場合は、[このサブスクリプションをフィルタ処理する] チェック ボックスをチェックします。
    • 注意 : [このサブスクリプションをフィルタ処理する] を選択すると、SubscriptionControl アノテーションでフィルタの値の入力が必要になります。
    • [終了] をクリックします。
    • MB サブスクリプション コントロールのインスタンスがプロジェクト内に作成され、[コントロール] タブに表示されます。

      コントロール宣言が Process.java ファイルに書き込まれます。

      /**
        * org.apache.beehive.controls.api.bean.Control
        */
        private processes.mbSubscribe mbSubscribe;
注意 : JPD にインライン XQuery が含まれている場合は、JPD をアップグレードすると、XQuery がアップグレードされるか、JPD が @XQuery.Version=2002 とマーキングされます。JPD に XQuery が含まれていない場合、バージョンは xquery=2004 には設定されません。この JPD から、XQuery が設定されたサブスクリプション コントロールが参照されている場合は、アップグレード後の JPD のバージョンは xquery=2004 になり、アップグレード後のサブスクリプション コントロールのバージョンは xquery=2002 になります。コンパイルされたアーティファクト (wli-subscriptions.xml) の生成中には、JPD で使用されているサブスクリプション コントロール内の XQuery に、JPD の XQuery Prolog が追加されます。この場合、XQuery が XQ2002、その Prolog が XQ2004 となるため、バージョン間の互換性の欠如により、生成された XQuery は無効になります。
注意 : 唯一の解決策は、アップグレードしたアプリケーションのすべての XQuery のバージョンが XQ2002 であるか XQ2004 であるかを確認することです。JPD の XQuery Prolog で宣言されている XQuery の関数とネームスペースからは、サブスクリプション コントロール内の XQuery にはアクセスできません。このようなケースは、同じアプリケーションにバージョンの異なる XQuery が混在する場合はサポートされません。

MB サブスクリプション コントロールの Java ファイル

新しい MB サブスクリプション コントロールを作成すると、プロジェクト内に新しい Control Java ファイルが作成されます。以下のサンプル Control Java ファイルは、コントロール ウィザードで自動的に作成されます。

import com.bea.control.SubscriptionControl;  
import com.bea.data.RawData;
import com.bea.xml.XmlObject;
package requestquote;
import com.bea.control.SubscriptionControl;
import org.apache.beehive.controls.api.bean.ControlExtension;
import org.apache.beehive.controls.api.events.EventSet;
/*
 * カスタム サブスクリプション コントロール。  
 */
@ControlExtension
@SubscriptionControl.ClassSubscription(channelName = "/deadletter/string")
public interface MBSubscription extends com.bea.control.SubscriptionControl {
	@EventSet
	interface Callback {
		@SubscriptionControl.SubscriptionCallback(body = "{message}")
		void onMessage(String message);
	}
	static final long serialVersionUID = 1L;
	public MBSubscription create();
}

[このサブスクリプションをフィルタ処理する] チェック ボックスをチェックして、subscribeWithFilterValue() メソッドがコントロールの Java ファイルに必ず含まれるようにする必要があります。Callback インタフェースの onMethod メソッドは、チャネル ファイルで定義されているメッセージ タイプを使用します。

MB サブスクリプション インタフェースのメソッドを使用する

この節では、MB サブスクリプション コントロール インタフェースについて説明します。メッセージ ブローカ チャネルのサブスクライブに使用できるメソッドは、アプリケーション内から利用できます。

クラス インタフェース

package com.bea.control;
import weblogic.jws.control.Control;
/**
 * メッセージ ブローカ サブスクリプション コントロールの基本インタフェース
 */
public interface SubscriptionControl extends Control
{
/**
     * コントロールでメッセージ ブローカをサブスクライブする。サブスクリプションで
     * フィルタ式を使用する場合、デフォルトのフィルタ値が
     * 使用される。デフォルトのフィルタ値がアノテーションで定義されていない場合は、
     * <tt>null</tt> フィルタ値が使用される。これは
     * フィルタ結果がコールバックをトリガすることを意味する。
     */
    void subscribe();
    /**
     * コントロールをメッセージ ブローカからアンサブスクライブする。
     * 以降のイベント (メッセージ) のコントロールへの配信が停止される。
    void unsubscribe();

interface Callback {
        /**
         * ユーザ定義のコールバックを実装するために使用される内部的なコールバック メソッド。
         * JPD ではこのコールバック メソッドを実装できない。
         *
         * @param msg サブスクリプションをトリガしたメッセージ
         * @throws Exception
         *
        void _internalCallback(Object msg) throws Exception;
         */
    }
}
注意 : サブスクリプションでフィルタを使用する場合は、カスタム サブスクリプション メッドを定義して、実行時にマッチングするフィルタ値を指定する必要があります。

サブスクリプション コントロールはコールバック メソッドを定義しません。カスタム コールバックを定義して、ビジネス プロセスが受信を想定するイベント メッセージについて指定する必要があります (イベント メッセージには XML、生データ、または文字列を使用できます)。

MB パブリッシュ コントロールで使用できるメソッドの詳細については、SubscriptionControl インタフェースを参照してください。

メソッド属性

この節では、サブスクリプション コントロールでサポートされるクラス属性とメソッド属性について説明します。

クラス属性には以下があります。

channel-name

コントロールがサブスクライブするメッセージ ブローカ チャネルの名前です。必須のクラスレベルのアノテーションで、オーバーライドできません

xquery

サブスクライブされたチャネルにパブリッシュされるメッセージごとに評価される XQuery 式です。この式を満たさないメッセージは、サブスクライブするビジネス プロセスにディスパッチされません。省略可能なクラスレベルのアノテーションで、オーバーライドできません

メソッド属性には以下があります。

filter-value-match

サブスクライブするビジネス プロセスにディスパッチされるために、メッセージに対する XQuery 式の結果が一致しなければならない filter-value です。省略可能なメソッドレベルのアノテーションです。filter-value-match アノテーションの有効な値は、XQuery の結果に直接比較される文字列定数、または中括弧に囲まれたメソッド パラメータ ({parameter1} など) です。

コールバック メソッド属性には以下があります。

message-metadata

サブスクリプションをトリガしたメッセージからメタデータを受け取るコールバック メソッドのパラメータの名前です。このパラメータの型は XmlObject (または型付きの XML Bean クラス) でなければなりません。

message-body

サブスクリプションをトリガしたメッセージから本体を受け取るコールバック メソッドのパラメータの名前です。このパラメータの型は XmlObject (または型付きの XML Bean クラス)、StringRawData、または非 XML MFL クラス (MflObject のサブクラス) でなければなりません。

MB サブスクリプション コントロールのサンプル コード

MB サブスクリプション コントロールを拡張する必要があります。以下は MB サブスクリプション コントロール ファイルのサンプルです。

package requestquote;
import org.apache.beehive.controls.api.bean.ControlExtension;
import org.apache.beehive.controls.api.events.EventSet;
import org.apache.xmlbeans.XmlObject;
/*
 * カスタム サブスクリプション コントロール。  
 */
@ControlExtension
@SubscriptionControl.ClassSubscription(channelName = "/deadletter/xml")
public interface SubscriptionControl extends
		com.bea.control.SubscriptionControl {
	@SubscriptionControl.MethodSubscription(filterValueMatch = "{value}")
	void subscribeWithFilterValue(String value);
	@EventSet
	interface Callback {
		@SubscriptionControl.SubscriptionCallback(body = "{message}", metadata = "{metadata}")
		void onMessage(XmlObject message, XmlObject metadata);
	}
	static final long serialVersionUID = 1L;
	public SubscriptionControl create();
}

メッセージ ブローカ チャネルへの静的および動的サブスクリプションに関する注意

ビジネス プロセスのコントロール ノードに設計する動的なサブスクリプションの他に、開始ノードに静的なサブスクリプションを設計して、メッセージ ブローカ チャネルからメッセージを受信することができます。

ビジネス プロセスの開始ノードでメッセージ ブローカ チャネルの静的なサブスクリプションを設計する方法については、「開始ノードの設計」を参照してください。

 


イベント ジェネレータを使用してメッセージ ブローカ チャネルへパブリッシュする

イベント ジェネレータは、メッセージ ブローカ チャネルにメッセージをパブリッシュします。Oracle WebLogic Integration は以下のイベント ジェネレータをサポートしています。


  ページの先頭       前  次