ESB MuleはJavaSpace環境と接続するためにGigaSpacesを使います。
GigaSpacesは拡張性が高いスペース技術であり、無償のコミュニティ版が提供されています。
ESB Muleはスペースのイベントを購買する事と、スペースへイベントを発行する事ができます。例えば、以下の設定を行うとスペースのオブジェクト全てを購買し、結果オブジェクトをJMSキューに送ります。
<mule-descriptor name="unprocessedOrders" implementation="com.foo.ProcessingComponent">
<inbound-router>
<endpoint address="gs:java://localhost/mule-space_container/mule-space?schema=cache"/>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="jms://processed"/>
</router>
</outbound-router>
</mule-descriptor>
購買エンドポイントのアドレスに gs: が含まれていることに注目してください。これはスペースのレファレンスを取得するのと登録を行うために、処理するURLをGigaSpacesへ送ることを意味しています。
次のURL、
はローカル・スペース(メモリ)を参照するためのGigaSpaces URLです。リモートGigaSpacesスペースに接続するにはRMIのような他プロトコルを使います:
又は、r
GigaSpacesのへの接続やスペースの設定の詳細に付いては、資料を参照してください。
テンプレートの使い方
上の例はスペース内の全てをイベントを購買します。ただし、JavaSpaceはテンプレートを使って受信するイベントを選択します。ESB Muleのフィルタでそのテンプレートを定義することができます。
<mule-descriptor name="unprocessedOrders" implementation="com.foo.ProcessingComponent">
<inbound-router>
<endpoint address="gs:java://localhost/mule-space_container/mule-space?schema=cache">
<filter className="org.mule.providers.gs.filters.JavaSpaceTemplateFilter" expectedType="com.foo.Order" >
<properties>
<map name="fields">
<property name="processed" value="false"/>
</map>
</properties>
</filter>
</endpoint>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="jms://processed"/>
</router>
</outbound-router>
</mule-descriptor>
上の例は、Orderオブジェクトの processed プロパティが false かつ com.foo.Order 型のイベントを受信するフィルタを設定です。
com.foo.Order オブジェクトはJavaBeanの仕様ではなく、JavaSpacesのオブジェクト仕様に準拠していることに注意してください。即ち、Orderオブジェクトは以下のように定義されます:
public class Order implements Entry {
public String orderId;
public Boolean processed = Boolean.FALSE;
public String toString(){
return "Order{id=" + orderId + ", processed=" + processed.booleanValue() + "}";
}
}
カプセル化を違反したくない開発者は(自分を含めて)、エンドポイントにOrderオブジェクトをJavaBeanのOrderオブジェクトに変換するトランスフォーマを定義すか、JavaBeansをJavaSpaceオブジェクトに見えるようにするJavaBeanプロキシ・アダプタを作成することができます。これに付いては読者にお任せします。
全てのオブジェクトはObjectでなければなりません。Javaの基本データ型は使えません。