トランスポート・プロバイダは以下の3つの方法で設定することができます:
- トランスポートの情報と接続情報を定義したエンドポイントURIを使って。例えば、tcp://localhost:12345。詳細に付いてはESB MuleエンドポイントURIを参照してください。URIはプロトコルにトランスポート特有な情報と、コネクタのプロパティに設定する0以上のパラメータを追加された文字列から構成されています。
- ESB Mule XML, SpringFramework又は他の対応した設定にコネクタ設定を定義する。
- エンドポイントにトランスポート・プロバイダ・プロパティを設定して、特定したエンドポイント・インスタンスのトランスポートの振る舞いを変更することもできます。
各トランスポートに設定できるパラメータに付いてはトランスポート・ガイドを参照してください。共通したプロパティに付いては、以下で説明します。
標準のコネクタ・プロパティ
| プロパティ |
説明 |
デフォルト |
必須 |
| name |
コネクタを識別するための名前。 |
|
○ |
| exceptionListener |
コネクタでエラーが発生した場合に使う 例外リスナー。 |
org.mule.impl. DefaultExceptionStrategy |
○ |
| receiverThreadingProfile |
コネクタからイベントを受信する際に使うスレッドのプロパティとWorkManager。 |
The defaultReceiverThreadingProfile set on the Mule Configuration |
○ |
| dispatcherThreadingProfile |
コネクタからイベントを発生するさせる場合に使うスレッドのプロパティとWorkManager。 |
The defaultDispatcherThreadingProfile set on the Mule Configuration |
○ |
| createDispatcherPerRequest |
エンドポイント用に生成されたMessageDispatcherをキャッシュするか、送信リクエスト毎に新規に作成するか。 |
false |
○ |
| connectionStrategy |
接続失敗やリトライを制御するオブジェクト。connectionStrategyは頻度、リトライ回数、JMX、その他のトリガーを元に接続を行います。 |
org.mule.providers. SingleAttemptConnectionStrategy |
○ |
| serviceOverrides |
このトランスポートのデフォルト設定をオーバーライドするためのサービス設定のMap。 |
|
× |
特定のトランスポート・プロバイダのプロパティに付いてはトランスポート・ガイドを参照してください。
接続例外処理(connection strategies)
接続例外処理は、コネクタが接続に失敗したときに行う処理を設定します。リトライ回数,間隔,例外やJMXの場合のみ再接続を試すようにするなどと、状況に基づいて例外処理を設定することができます。
接続例外処理は<connection-strategy>タグを使ってコネクタに設定します。コネクタに<connection-strategy>タグが追加されると、そのコネクタを使った受信と送信に適用されます。もし、同じコネクタの受信と送信に別々の諸ウィを設定する必要がある場合は、コネクタを受信用のコネクタと送信用のコネクタに分けてそれぞれのコネクタに例外処理を設定します。例えば以下は、TCPコネクタに接続が切れた場合は2秒毎に3回、再接続を試すようにする設定です:
<connector name="tcp" className="org.mule.providers.tcp.TcpConnector">
<connection-strategy className="org.mule.providers.SimpleRetryConnectionStrategy">
<properties>
<property name="retryCount" value="3"/>
<property name="frequency" value="2000"/>
</properties>
<connection-strategy/>
</connector>
ヒント: retryCount を-1に設定すると無限に再接続を試します(ESB Mule1.4.2以降で対応)。ただし、使うトランスポートによっては気を付けてください。
doThreading オプションも場合によっては便利です。ESB Muleのスレッドを再接続の試しから分離します。
ESB Muleインスタンスの全てのコネクタ用のデフォルト接続例外処理を設定するには、<mule-environment-properties>タグに接続例外処理を設定します。
例:
<mule-environment-properties>
<connection-strategy className="org.mule.providers.SimpleRetryConnectionStrategy">
<properties>
<property name="retryCount" value="3"/>
<property name="frequency" value="2000"/>
</properties>
<connection-strategy/>
</mule-environment-properties>
コネクション方式の修正
ESB Muleには上のSimpleRetryConnectionStrategyのような、標準接続例外処理を用意しています。自前の接続例外処理を設定する必要ばある場合もあります。 ConnectionStrategy は1つのメソッドがあるインターフェースです:
public void doConnect(UMOConnectable connectable) throws FatalConnectException;
このメソッドは UMOConnectable オブジェクトの connect() メソッドは再接続できるまで又は自前のUMOConnectionStrategyで設定された接続例外処理が失敗するまで、繰り返して呼び続けるようにします。もし接続に失敗した場合は FatalConnectException 例外を投げて、ESB Muleに接続が失敗したことを伝えます。RuntimeExceptionsを含めて、その他の例外を投げたらいけません。
コネクタ・サービス・ディスクリプタ
各トランスポートには、トランスポートを生成するクラスの情報をもつサービス・ディスクリプタがあります。ファイルは META-INF/services/org/mule/providers にあり、ファイルはトランスポート・プロトコルと同じ名前です。例: META-INF/services/org/mule/providers/tcp
例えば、TCPトランスポート・プロバイダのファイルには以下のような内容が記述されています:
| プロパティ |
説明 |
必須 |
| connector |
使うUMOConnectorの実装のクラス名 |
connector.factoryが設定されて無い場合は○ |
| connector.factory |
「connector」プロパティが設定されて無い場合にUMOConnectorインスタンスを生成するファクトリのクラス名。ファクトリ・クラスは org.mule.util.ObjectFactory を実装していなければんりません。 |
× |
| dispatcher.factory |
このトランスポートの UMOMessageDispatcher インスタンスを生成する_UMOMessageDispatcherFactory_ の実装をしたクラスのクラス名。トランスポート・プロバイダが受信(inbound)接続のみに対応している場合は、このプロパティを設定しません。 |
× |
| message.receiver |
トランスポートのメッセージ・リスナーを登録するUMOMessageReceiverを実装したクラスのクラス名。トランスポートが送信(outbound)接続のみんに対応している場合は、このプロパティは設定しません。 |
× |
| transaction.factory |
このトランスポートがトランザクションの場合は、このトランスポートのトランザクションを生成するUMOTransactionFactoryを実装するクラスのクラス名。 |
× |
| message.adapter |
このトランスポートのメッセージ・タイプの情報を汎用的に取得するするUMOMessageAdapterの実装のクラス名。 |
○ |
| inbound.transformer |
このトランスポートをデフォルトの受信(inbound)トランスフォーマ。このトランスポートの受信エンドポイントにトランスフォーマが設定されて無い場合に、このトランスフォーマを使って受信メッセージは変換されます。トランスフォーマが設定されている受信(inbound)エンドポイントでは、このプロパティは無視されます。 |
× |
| outbound.transformer |
このトランスポートのデフォルト送信(outbound)トランスフォーマ。このトランスポートの送信エンドポイントにトランスフォーマが設定されて無い場合に、このトランスフォーマを使って送信メッセージは変換されます。トランスフォーマが設定されている送信(outbound)エンドポイントでは、このプロパティは無視されます。 |
× |
| response.transformer |
このトランスポートのデフォルト返信(response)トランスフォーマ。トランスポートがリクエストに対して返信をするかによって、このトランスフォーマが使われるかが決まります(返信に対応したトランスポートの例としてhttpが挙げられます)。コンポーネントの返信ルータ(response router)にトランスフォーマが設定されて無い場合に、このトランスフォーマは返信(response)メッセージを変換します。 |
× |
| endpoint.builder |
このトランスポートのMuleEndpointURIインスタンスを設定するエンドポイント・ビルダー。このコネクタが処理できるような形式にURIから情報を抽出します。例えば、URI「jms://topic:datafeed」はResourceNameEndpointBuilderで処理される場合は、エンドポイント・アドレスは「datafeed」、「topic」はエンドポイントのresourceInfoに設定され、JMSはトピック「datafeed」を利用/生成します。 |
○ |
| service.finder |
SOAPのようなトランスポート・プロバイダはAxis, Glue, XFireのようにベンダー特有のトランスポートの実装がされています。この場合は、サービス検索(service finder)クラスを使って、使う実装を決めることができます(多くの場合はクラスパスに設定されているクラスに基づいて)。例えばエンドポイントURIがsoap:http//localhost/8080/services」の場合は、SOAPServiceFinderはクラスパスにAxis又はGlueが設定されているか探し、見つかったクラスを利用してサービスを生成します。 |
× |
| service.error |
エンドポイントURIからトランスポート・コネクタを生成できない場合は、ConnectorFactoryExceptionはこのプロパティに設定されたエラーメッセージを使って例外を投げます。 |
× |
ESB MuleがエンドポイントURIを処理する場合は、エンドポイント・プロトコルからサービス・ディスクリプタが捜され、 ディスクリプタとURIの情報を使ってコネクタ及びエンドポイント・インスタンスが生成されます。
サービス・プロパティのオーバーライド
各ESB Muleトランスポートにはトランスポートが対応したプロトコル毎に上で説明したプロパティをもつコネクタ・サービス・ディスクリプタ(Connector Service Descriptor)があります。ユーザは特定のトランスポートの設定をオーバーライドして、利用に適した適したように設定を変更することができます。例えば、FileConnectorはディレクトリはファイルを一つずる読みますが、 UMOMessageReceiver を修正して既存のファイルの変更箇所のみを読み込むようにすることもできます。
コネクタ毎に上で説明したプロパティのMapから構成される serviceOverrides プロパティがあります。FileReceiverの例を引き続けてると、開発者は「message.reciever」コネクタ・サービス・ディスクリプタ(Connector Service Descriptor)プロパティをオーバーライドすることができます。
<connector name="myFileConnector" className="org.mule.providers.file.FileConnector">
<properties>
...
<map name="serviceOverrides">
<property name="message.receiver" value="com.foo.MyFileReceiver"/>
</map>
</properties>
</connector>
デフォルト・コネクタ値の設定
トランスポートによっては、全ての設定情報をトランスポートのURIに記述することができます(例:tcp://localhist:12345)。しかし、JMSのようなトランスポートの場合は、開発者が接続を行うために多くのパラメータを設定する必要があり、URIにこれらのパラメータを設定するのが難しいです。一つの対策方法は、前もって全てのコネクタを設定ファイルで定義することです。場合によっては便利ですが、他の対策方法もあります。
ESB Muleでは、コネクタのデフォルト・プロパティを定義することができます。これらのデフォルト・プロパティは、コネクタにプロパティが設定されていない場合に使われます。プロパティはコネクタ用のプロパティ名の前にコネクタのプロトコルを挿入して設定されます。以下はJMSのデフォルトの jndiInitialFactory プロパティを定義する例です:
<environment-properties>
<property name="jms.jndiInitialFactory"
value="org.codehaus.activemq.jndi.ActiveMQInitialContextFactory"/>
</environment-properties>
又は
MuleManager.getInstance.setProperty("jms.jndiInitialFactory",
"org.codehaus.activemq.jndi.ActiveMQInitialContextFactory");
これらのプロパティはMuleManager又はクライアントに設定することができます。
もう少し多くの情報を記載された例に付いては知恵袋:複数JMSクライアントの設定を参照してください。
自前のトランスポートの開発
自前でESB Mule用のトランスポートを開発する情報に付いてはトランスポートの開発を参照してください。