![]() ![]() ![]() ![]() |
エンタープライズ アプリケーションでは、多くの場合、メッセージング システムを使用して、従来のシステムとの通信またはソフトウェア コンポーネント間の通信を行います。メッセージング システムのクライアントは、他の任意のクライアントとメッセージを送受信することができます。
メッセージ ブローカ リソースにより、パブリッシュおよびサブスクライブ メッセージベースの通信モデルが 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 つのメッセージ ブローカ コントロール、パブリッシュ コントロールとサブスクリプション コントロールを使用できます。ビジネス プロセスはパブリッシュ コントロールを使用して、メッセージをメッセージ ブローカ チャネルにパブリッシュします。メッセージ ブローカ チャネルは、パブリッシュ コントロールを宣言するときにコントロールにバインドしますが、これは動的にオーバーライドされます。メッセージ ブローカ パブリッシュ コントロールの拡張 (サブクラス) にメソッドを追加することができます。
コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。
以下のトピックでは、メッセージ ブローカ パブリッシュ コントロールの作成方法と使用方法について説明します。
注意 : | [データ パレット] ビューが Oracle Workshop for WebLogic に表示されない場合は、メニュー バーから [ウィンドウ|ビューの表示|データ パレット] をクリックします。 |
[コントロールの挿入 : MB パブリッシュ] ダイアログ ボックスが表示されます (図 8-1 を参照)。
新しい 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 パブリッシュ コントロールを拡張する必要があります。以下は、ビジネス プロセス内での 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/>
ブロックを使用して、サブスクリプションを含む現在のビジネス プロセスの状態をコミットします。
コントロール インスタンスをビジネス プロセスに追加する方法については、「ビジネス プロセスでコントロールを使用する」を参照してください。
以下のトピックでは、メッセージ ブローカ サブスクリプション コントロールの作成方法と使用方法について説明します。
注意 : | [データ パレット] ビューが Oracle Workshop for WebLogic に表示されない場合は、メニュー バーから [ウィンドウ|ビューの表示|データ パレット] をクリックします。 |
[コントロールの挿入 : MB サブスクリプション] ダイアログ ボックスが表示されます。
注意 : | [チャネル名] フィールドに使用可能なオプションがない場合は、ビジネス プロセスがパブリッシュまたはサブスクライブできるチャネルを定義する、チャネル ファイルを作成する必要があります。 |
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 サブスクリプション コントロールを作成すると、プロジェクト内に新しい 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 サブスクリプション コントロールを拡張する必要があります。以下は 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 は以下のイベント ジェネレータをサポートしています。
![]() ![]() ![]() |