ESB MuleのコンポーネントはPOO(Plain Old Object - ただのオブジェクト)の場合があります。ESB Muleを使い始めたばかりのユーザにはESB Muleがそれらのコンポーネントとどのように対話するのが明確でないかもしれません。
エントリー・ポイント
エントリー・ポイントとは、コンポーネントがイベントを感知した場合にESB Muleが実行するメソッドである。コンポーネントがイベントを感知すると、ESB Muleはイベントの内容によって動的に実行するメソッドを選定する。その結果、1つのコンポーネントに複数のエントリー・ポイントを設けることが可能であります。イベントのペイロード・タイプはコンポーネントのイベントを受信したプロバイダの受信(inbound)トランスフォーマーで決められる場合が多いです。ただし、SOAPプロバイダのようにタイプ・マッピングを独自で行い、トランフフォーマーを不要とするプロバイダもあります。
ESB Muleのデフォルト・インターフェースをorg.mule.umo.lifecycle.Callableを実装すると、動的解決をオーバーライドし、インターフェースで実装したメソッドを呼びます。
イベント・フロー
ESB Muleはコンポーネント間のイベント・フローに付いて以下のようなデフォルトのルールがあります:
- イベントを受信した場合は、Entrypointメソッドが呼ばれます。
- 返信及び送信(outbound)メッセージは以下のようにして取得されます:
- 呼び出したメソッドがvoidでない場合は、(Callable.onEvent()はObjectを返します)メソッドの戻り値を使います。もす戻り値がnullの場合は、レクエストに対して、それ以上の処理は行いません。
- メソッドがvoidの場合は、メソッドを呼び出したパラメータが使われます。この場合は、パラメータの値が変更されたか、イベントに変更が無かったと想定されます。
- コンポーネントの設定により、送信(outbound)イベントはルートされます。
- 送信(outbound)ルータが設定されている場合は、イベントをルートするために使われます。
- 1つしか送信(outbound)エンドポイントが設定されていない場合は、それが使われます。
- 複数の送信(outbound)エンドポイントが設定されている場合は、最初の設定が使われます。
振舞いのカスタマイズ
多くの場合はデフォルトのイベント・フロー処理で十分ですが、場合によってカスタマイズする必要があります。カスタマイズする場合はorg.mule.umo.UMOEventContextの参照が必要です。方法としては2通りあります:
org.mule.umo.lifecycle.Callableを実装。
イベント情報はこのインタフェースのパラメータとして渡されます。
public interface Callable
{
public Object onCall(UMOEventContext eventContext) throws Exception;
}
static RequestContextからもEventContextを取得することができます:
UMOEventContext context = RequestContext.getEventContext();
EventContextから同期/非同期でイベントの送受信、トランザクション管理、デフォルト・イベント、フローのオーバーライドを行うことができます。
例:
UMOEventContext context = RequestContext.getEventContext();
UMOEndpoint endpoint = new MuleEndpoint("jms:);
context.dispatchEvent(new MuleMessage("IBM:0.01", null), endpoint);
UMOMessage quote = context.receive(endpoint, 5000);
イベント・コンテキストを使って手動でイベント・フローを制御する場合でも、メソッドから戻った場合は、ESB Muleは通常通りに送信(outbound)イベントをルートします。
以下の2つの方法でESB Muleの処理を中断することができます:
1.サービス・メソッドがvoidでない場合はnullを返すと、ESB Muleはそれ以上の処理はないと認識します。
2.サービス・メソッドがvoidの場合は、ESB Muleは受信(inbound)イベント・ペイロードを送信(outbound)イベント・ペイロードにします。この処理を変更する場合は、以下のメソッドを呼びます:
context.setStopFurtherProcessing(true);
コンポーネント・ライフサイクル
コンポーネントは0以上の以下のライフサイクル・インターフェースを実装することが可能です:
コンポーネント・ディスクリプタの取得
以下のインターフェースを実装すると、起動時にコンポーネントはディスクリプタを参照することができます。
org.mule.impl.UMODescriptorAware.
UMODescriptor は、コンポーネントに設定できる全ての情報をもちます。