|
注意 : | メッセージ ブローカ コントロールは、WebLogic Integration の使用許諾を受けた場合にのみ、BEA Workshop for WebLogic Platform で使用できます。 |
エンタープライズ アプリケーションでは、多くの場合、メッセージング システムを使用して、従来のシステムとの通信またはソフトウェア コンポーネント間の通信を行います。メッセージング システムのクライアントは、他の任意のクライアントとメッセージを送受信することができます。
メッセージ ブローカ リソースにより、パブリッシュおよびサブスクライブ メッセージベースの通信モデルが WebLogic Integration ビジネス プロセスで使用可能になります。メッセージ ブローカには、強力なメッセージ フィルタ機能があります。
メッセージ ブローカには、メッセージをパブリッシュしたり、サービスがメッセージを受信するためにサブスクライブしたりできる、タイプ別のチャネルが用意されています。型保証メソッド用の XML Bean を使用して、特定のチャネルにサブスクライブするビジネス プロセスを設計できます。
メッセージ ブローカ チャネルのサブスクライバは、XQuery フィルタを使用してチャネル上のメッセージをフィルタ処理できます。WebLogic Integration では、チャネル用の XQuery フィルタを作成できる強力なマッピング ツールをサポートしています。ビジネス プロセスは、ドキュメント タイプまたはドキュメント コンテンツに基づいて、チャネル上のドキュメントをフィルタ処理できます。たとえば、銘柄記号ドキュメントをフィルタ処理するフィルタや、特定の発注書番号をフィルタ処理するフィルタを設計できます。
WebLogic Integration では、メッセージ ブローカ チャネルにメッセージをパブリッシュできるビジネス プロセスに加え、メッセージ ブローカ チャネルに外部イベントをパブリッシュできるイベント ジェネレータもサポートしています。WebLogic Integration には、電子メール イベント ジェネレータ、ファイル イベント ジェネレータ、HTTP イベント ジェネレータ、JMS イベント ジェネレータ、MQ イベント ジェネレータ、およびタイマー イベント ジェネレータなどのネイティブ イベント ジェネレータが用意されています。これらのイベント ジェネレータを使用すると、電子メールの受信やディレクトリでの新しいファイルの出現などのイベントに基づいて、ビジネス プロセスを開始したり続行したりすることができます。WebLogic Integration は、J2EE-CA コネクタと共に機能するアプリケーション ビュー イベント ジェネレータにも対応しています。WebLogic Integration Administration Console を使用してイベント ジェネレータを作成および管理する方法については、『WebLogic Integration ソリューションの管理』の「イベント ジェネレータ」(下記 URL) を参照してください。http://edocs.beasys.co.jp/e-docs/wli/docs92/adminhelp/evntgen.html
チャネルの定義、チャネルへのパブリッシュまたはサブスクライブ、およびサブスクリプション フィルタの作成の詳細については、以下を参照してください。
メッセージ ブローカ コントロールはいくつかの方法でカスタマイズできます。コントロールのプロパティを変更することができます。この変更の詳細については、以降の節で説明します。
ControlContext インタフェースを使用して、実行時にコントロールのプロパティにアクセスしたり、コントロール イベントを処理したりすることができます。コントロールを使用する開発者によって設定されたプロパティ値は、JWS、JSP、または JPD ファイルでコントロールの宣言のアノテーションとして、または コントロール ファイルでインタフェース宣言、コールバック宣言、またはメソッド宣言のアノテーションとして格納されます。
ビジネス プロセスの 2 つのメッセージ ブローカ コントロール、パブリッシュ コントロールとサブスクリプション コントロールを使用できます。ビジネス プロセスはパブリッシュ コントロールを使用して、メッセージをメッセージ ブローカ チャネルにパブリッシュします。メッセージ ブローカ チャネルは、パブリッシュ コントロールを宣言するときにコントロールにバインドしますが、これは動的にオーバーライドされます。メッセージ ブローカ パブリッシュ コントロールの拡張 (サブクラス) にメソッドを追加することができます。
コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。
以下のトピックでは、メッセージ ブローカ パブリッシュ コントロールの作成方法と使用方法について説明します。
注意 : | [データ パレット] ビューが BEA Workshop for WebLogic Platform に表示されない場合は、メニュー バーから [ウィンドウビューの表示データ パレット] をクリックします。 |
[Insert control: MB パブリッシュ] ダイアログ ボックスが表示されます。
注意 : | [チャネル名] フィールドに使用可能なオプションがない場合は、ビジネス プロセスがパブリッシュまたはサブスクライブできるチャネルを定義する、チャネル ファイルを作成する必要があります。このファイルの作成方法については、「メッセージ ブローカ チャネルを作成するには」を参照してください。 |
qualifiedMetadataType
が設定されている場合に、メタデータ型の値を表示します。
新しい 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 パブリッシュ コントロール インタフェースについて説明します。アプリケーション内からメソッドを使用して、メッセージ ブローカ チャネルにパブリッシュします。
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
message-metadata
message-metadata
{
parameter1
}
など) です。
message-body
パブリッシュ コントロールを使用すると、クラスレベルのアノテーションを動的なプロパティでオーバーライドできます。これを行うには、コントロールの動的なプロパティ スキーマに準拠する 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 パブリッシュ コントロールを拡張する必要があります。以下は、JPD ファイル内での MB パブリッシュ コントロールのコーディングの例です。
/*
* @jc:mb-publish-control channel-name="/controls/potopic"
*/
interface MyPublishControl extends PublishControl,com.bea.control.ControlExtension {
/**
* @jc:mb-publish-method
* message-metadata="<custom-header>ACME Corp</custom-header>"
* message-body="{myMsgToSend}"
*/
void publishPO(XmlObject myMsgToSend);
}
/*
* @common:control
*/
private MyPublishControl pubCtrl;
// メッセージをパブリッシュする
void sendIt(XmlObject myMsgToSend) {
pubCtrl.publishPO(myMsgToSend);
}
ビジネス プロセスの 2 つのメッセージ ブローカ コントロール、パブリッシュ コントロールとサブスクリプション コントロールを使用できます。ビジネス プロセスはサブスクリプション コントロールを使用してチャネルに動的にサブスクライブし、メッセージを受信します。ビジネス プロセスのコントロール インスタンスを作成するときに、チャネル、およびメッセージ フィルタ処理用の XQuary 式 (省略可能) をバインドします。バインディングは動的にオーバーライドできません。
サブスクリプション コントロール インタフェースには、ビジネス プロセスが、バインドされたメッセージ ブローカ チャネルをサブスクライブしたり、アンサブスクライブしたりできるメソッドが含まれています。
サブスクライブ処理は、他のビジネス プロセス処理と同様に、より大きな XA トランザクションの一部です。したがって、ビジネス プロセス処理が失敗した場合、サブスクライブ処理はロール バックされます。サブスクリプションはトランザクション内にあるため、サブスクリプションを永続的にするにはトランザクションをコミットする必要があります。トランザクション非対応の処理を行う場合、つまり、応答メッセージをトリガするアクションを実行する前にサブスクライブ処理をコミットする必要がある場合は、フロー内の <transaction/>
ブロックを使用して、サブスクリプションを含む現在のビジネス プロセスの状態をコミットします。
コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。
以下のトピックでは、メッセージ ブローカ サブスクリプション コントロールの作成方法と使用方法について説明します。
注意 : | [データ パレット] ビューが BEA Workshop for WebLogic Platform に表示されない場合は、メニュー バーから [ウィンドウビューの表示データ パレット] をクリックします。 |
[Insert Control: MB サブスクリプション] ダイアログ ボックスが表示されます。
注意 : | [チャネル名] フィールドに使用可能なオプションがない場合は、ビジネス プロセスがパブリッシュまたはサブスクライブできるチャネルを定義する、チャネル ファイルを作成する必要があります。このファイルの作成方法については、「メッセージ ブローカ チャネルを作成するには」を参照してください。 |
qualifiedMetadataType
が設定されている場合に、メタデータ型の値を表示します。 注意 : | [このサブスクリプションをフィルタ処理する] を選択すると、SubscriptionControl annotation でフィルタの値の入力が必要になります。 |
MB サブスクリプション コントロールのインスタンスがプロジェクト内に作成され、[コントロール] タブに表示されます。
コントロール宣言が Process.java ファイルに書き込まれます。
/**
* @common:control
*/
private processes.mbSubscribe mbSubscribe;
新しい 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 サブスクリプション コントロール インタフェースについて説明します。メッセージ ブローカ チャネルのサブスクライブに使用できるメソッドは、アプリケーション内から利用できます。
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 インタフェースを参照してください。
この節では、サブスクリプション コントロールでサポートされるクラス属性とメソッド属性について説明します。
{
parameter1
}
など) です。
XmlObject
(または型付きの XML Bean クラス) でなければなりません。
XmlObject
(または型付きの XML Bean クラス)、String
、RawData
、または非 XML MFL クラス (MflObject
のサブクラス) でなければなりません。
MB サブスクリプション コントロールを拡張する必要があります。以下は、JPD ファイル内での MB サブスクリプション コントロールのコーディングの例です。
/*
* @jc:mb-subscription-control
* channel-name="/controls/stocks"
* xquery="$message/StockSymbol/text()"
*/
interface MySubscriptionControl extends SubscriptionControl, ControlExtension {
/**
* @jc:mb-subscription-method
* filter-value-match="BEA"
*/
void subscribeToBEA();
/**
* @jc:mb-subscription-method
* filter-value-match="{symbol}"
*/
void subscribeToSymbol(String symbol);
interface Callback {
/**
* @jc:mb-subscription-callback message-body="{myMsgReceived}"
*/
onXMLMessage(XmlObject myMsgReceived);
}
}
.
.
.
/*
* @common:control
*/
MySubscriptionControl subCtrl;
// メッセージをサブスクライブする
void subscribeIt() {
subCtrl.subscribeToBEA();
}
// サブスクライブ後にメッセージを受信する
subCtrl_onXMLMessage(XmlObject myMsgReceived)
{
}
ビジネス プロセスのコントロール ノードに設計する動的なサブスクリプションの他に、開始ノードに静的なサブスクリプションを設計して、メッセージ ブローカ チャネルからメッセージを受信することができます。
ビジネス プロセスの開始ノードでメッセージ ブローカ チャネルの静的なサブスクリプションを設計する方法については、「開始ノードの設計」を参照してください。
イベント ジェネレータは、メッセージ ブローカ チャネルにメッセージをパブリッシュします。WebLogic Integration は以下のイベント ジェネレータをサポートしています。