ESB Muleプログラマーズの手引き
 | このページはまだ作成中です。説明が不足しているところや、リンクが切れているところがあります。 |
始めに
この手引きは、ESB Muleを利用してアプリケーションを効率よく開発するための、手順や実践方法に付いて説明します。
前提条件
このガイドは、ESB Mule, ESB, J2EEの知識があることを前提とします。
ESB Muleに詳しくない場合は、ESB Muleの紹介を参照にしてください。
プログラミング・モデル
プログラミング・モデルをよりよく理解するためと、何を書く必要があり、何を制御することができるのかを分かるには、メッセージを処理するコンポーネントを知ることが最短です。
入力(inbound)メッセージ・フロー・ステージ
入力メッセージ・フローは、トランスポートにメッセージを受信するのを引きかねにして実行されます(例えば、データベースに行が書き込まれた場合やソケットにデータが書き込まれた場合)。ESB Muleトランスポート・プロバイダはデータを受信し、ESB Muleメッセージに包み変えます。入力ルータ(inbound router)は入力メッセージにルーティング・ロジックを適用します(例:Idem potency, 順序制御,バッチ等)。
 | MuleMessageの作成
ESB MuleMessageは受信したデータの本文を「ペイロード」とし、メッセージ・ヘッダやメタ情報(例:ファイル・トランスポートのファイル名)等の他情報から作成されます。例えば、HttpリクエストのContent-TypeはMuleMessage.getStringProperty("Content-Type", null)で取得でき、JMSPriorityのようなJMSヘッダはMuleMessage.getIntProperty("JMSPriority")で取得することができます。
もし、SOAPやメール・トランスポートのように添付がある場合は、MuleMessageに添付されます。 |
エンドポイント
エンドポイントはトランスポートからメッセージを受信するのに使われます。エンドポイントはESB Muleがどのようにしてデータを受信して変換するかを定義する構成オブジェクトです。エンドポイントには、エンドポイント・アドレス、トランスポートに特化した構成情報、トランザクション、フィルタなどを設定することができます。エンドポイントの詳細に付いてはESB Muleエンドポインを参照にしてください。
受信ルータ(inbound router)
受信ルータ(inbound router)は、コンポーネントのイベントの受信フローを制御します。受信メッセージのシーケンス番号を再設定をしたり、集約やフィルタすることができます。例えば[IdempotentReceiver]は既に受信したメッセージの再受信を防止します。[CorrelationResequencer]は関連(correlated)イベントを保留し、送信された順序でコンポーネントに引渡します。
| 要素 |
修正 |
必要なコード |
| Endpoint (受信) |
エンドポイントはESB Muleトランスポートの構成です。新しいエンドポイントを設定するとは、新しいトランスポートを構成することです。ESB Muleのトランスポートの書き方に付いてはここを参照にしてください。既存のトランスポートを修正して、メッセージの送受信の仕方を変更することができます。詳細に付いてはトランスポートの構成を参照にしてください。 |
トランスポートを作成するのは、ESB Muleで一覧労働を使う作業です。ただし、抽象クラスが用意されているので、トランスポート独自の部分のみを修正するだけです。 |
| Inbound Router |
ESB Muleは直接に使える複数の標準[入力ルータ(inbound router)]を用意しています。ただし、独自のイベントを集約するような、処理の修正が必要な場合は入力ルータを修正する必要があります。 |
[CorrelationAggregator]のように、複数のイベントを1つのイベントに集約する処理を変更するルータの場合のみを修正する必要があります。 |
コンポーネント・フロー・ステージ
コンポーネントのフローはMuleMessageがモデル(Model:サービス・コンテナ)に渡されたときから開始します。メッセージはサービス(Service)・オブジェクトに渡されますが、渡される前にインターセプタやトランスフォーマーを介すようにメッセージ・フローを設定することができます。
インターセプタ(受信)
インターセプタはサービス・コンポーネントへ送信されたメッセージを傍受します。メッセージの流れを監視したりイベントをトリガーすることができます(例:リクエストにサービスを起動するための権限認証を行う認証インターセプタを作成することができます)。
受信(inbound)トランスフォーマ
受信トランスフォーマは、受信メッセージをトランスポート形式からサービス・コンポーネントが扱える形式に変換します。トランスフォーマはデータ構造変更を行う場合に使うます(例:データ型/形式の変換)。[トランスフォーマ]を連鎖することもできます。
 | 複雑なトランスフォメーション
データ項目の追加やデータ一覧の参照等のように外部データ・ソースの参照等を行う高度な変換はトランスフォーマではなく、サービス・コンポーネントで行うことを推奨します。 |
サービスの呼出し
サービスとはビジネス・ロジックです。サービスはPOJO, EJB, リモート・オブジェクト, その他のオブジェクトで作成することができます。サービス・コンポーネントはESB Muleモデル(Model)でインスタント化することもでき、SpringFramework, Hivemind, JNDI, Pico, Plexusのような外部コンテナで生成・管理することもできます。
サービスの起動
TODO
Callableインタフェースの実装
詳細に付いてはコンポーネントの書き方を参照してください。
インターセプタ (送信)
サービスに設定されたインターセプタがEnvelopeインターセプタ([org.mule.interceptors.EnvelopeInterceptor]を継承 )の場合は、コンポーネントの処理が終了した後に after() メソッドが呼ばれます。
| 要素 |
修正 |
必要なコード |
| Interceptor (受信) |
認証のようにコンポーネントの横断的関心事を設定します。 |
[org.mule.umo.UMOInterceptor]を実装するために1つのメソッド。 |
| Inbound Transformer |
トランスフォーマーは、メッセージの内容(ペイロード)を一つの形式から別の形式に変換します。トランスフォーマーを連鎖して単機能の変換を組み合わせて利用することもできます。ESB Muleは標準でXML, XSLT, 標準Javaのデータ型用のトランスフォーマーを用意しています。トランスフォーマーにデータ形式変換を提供するためにトランスポートが必要です。 |
全てのトランスフォーマーが継承する必要がある[AbstractTransformer]があります。このトランスフォーマーの一つのメソッド doTransform(...) を実装する必要があります。
その他に用意されている[AbstractEventAwareTransformer]はメッセージ・フローから現在のUMOEventContextを取得します。 |
| Service Invocation |
ここでサービス・オブジェクトが呼ばれます。サービスはPOJO, EJB, リモート・オブジェクト, SpringFramework又はHivemind等のコンテナでインスタント化されたオブジェクトにすることができます。 |
開発者がオブジェクトを作成します。サービスの内容によって簡単か、複雑になります。サービス・オブジェクトをESB Muleに依存するように設計・開発する必要はありません。コンポーネントが[平行実行]されていない場合は、サービス・コンポーネントはステイトレス又は共有データ・リポジトリでステイトが管理されるようにします。 |
| Interceptor (送信) |
サービス・コンポーネントが処理した後に適用する横断的関心事を設定します。 |
開発者は[EnvelopeInterceptor]を継承して、実行する処理を after() メソッドに記述します。 |
送信(outbound)フローステージ
送信メッセージ・フローはサービスから結果メッセージ(サービスを実行した結果)が出力されると開始されます。結果メッセージが無い場合、又は送信ルータ(outbound router)が設定されていない場合は、省略されます。
送信ルータ(outbound router)
送信ルータ(outbound router)は、メッセージを次にどこに行くかを制御します。ESB Muleは
エンタープライズ統合パターンに掲載されているパターンとその他に見たルーティング・パターンを含む標準[送信ルータ]を提供しています。送信ルータ(outbound router)はコンテンツ・バース, Itinerary(ルーティング・スリップ)、動的、ヘッダーとその組み合わせに基づきルーティングを行うことができます。ESB Muleは標準で[MessageSplitting], [Multicasting]とコンテンツ・ベース・ルーティング用のルータを用意しています。
出力トランスフォーマ
TODO
エンドポイント (出力)
送信ルータ(outbound-router)のロジックによっては、イベントが発生されるエンドポイントは0又は数個ある場合があります。
TODO
| 要素 |
修正 |
必要なコード |
| Outbound Router(送信ルータ) |
|
|
| Outbound Transformer(送信トランスフォーマー) |
|
|
| Endpoint - Outbound(エンドポイント-送信) |
|
|
メッセージとイベント
TODO
UMOEventContext
TODO