概要
アウトバウンド通信を使用するための主要なコンポーネントを以下に示します.

アウトバウンド通信で利用するコンポーネントは,大きく3つに分類されます.
- 接続系
- 送信系
- 受信系
それぞれのカテゴリごとに,複数のコンポーネントを定義する必要があります.
接続系
接続系のコンポーネントは,JMSメッセージを送信する場合も受信する場合も必要となるコンポーネントです.
ManagedConnectionFactoryDeployer(必須)-
リソースアダプタが提供する
ManagedConnectionFactoryを S2コンテナ内で利用可能にするコンポーネントです. SessionFactory(必須)- JMSセッションを提供するコンポーネントです.
DestinationFactory(必須)- JMSメッセージの宛先を提供するコンポーネントです.
送信系
送信系のコンポーネントは,JMSメッセージを送信する場合に必要となるコンポーネントです.
MessageSender(必須)- JMSメッセージを送信するコンポーネントです.
MessageFactory(任意)- 送信するJMSメッセージを作成するコンポーネントです.
TextProvider(任意)- JMSメッセージで送信する文字列を提供するコンポーネントです.
SendMessageInterceptor(任意)- AOPを利用してメソッドの実行終了時にJMSメッセージを送信するコンポーネントです.
接続系
ManagedConnectionFactoryDeployer
ManagedConnectionFactoryDeployerは,
リソースアダプタが提供するManagedConnectionFactory
を
S2コンテナ内で利用可能にするコンポーネントです.
ManagedConnectionFactoryDeployerの実装クラスを以下に示します.
org.seasar.jms.core.deploy.impl.JMSManagedConnectionFactoryDeployer
JMSManagedConnectionFactoryDeployerのプロパティおよびメソッドを以下に示します.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
managedConnectionFactoryClass |
Yes |
リソースアダプタが提供する,
javax.resource.spi.ManagedConnectionFactoryの実装クラスをFQNで指定します.
|
N/A |
managedConnectionFactoryIndex |
No |
リソースアダプタ内のra.xmlファイルに記述された何番目の
connector/resource-adapter/outbound-resourceadapter/connection-definition
をベースにするかを示すインデックスを指定します.
|
0 |
managedTx |
No |
コンテナ管理のトランザクションを使用する場合はtrueを指定します.
|
true |
allowLocalTx |
No |
コンテナ管理のトランザクションを使用する場合に,
リソースローカルなトランザクションを許可する場合はtrueを設定します.
false (デフォルト) の場合,
JTAトランザクションが開始されていない状態でコネクションが取得されると例外がスローされます.
|
false |
maxPoolSize |
No | コネクションプールの最大値を指定します. | 10 |
minPoolSize |
No | コネクションプールの最小値を指定します. | 5 |
timeout |
No | アイドル状態になったコネクションをクローズするまでのタイムアウト時間を秒単位で指定します. | 600(秒) |
メソッド
| メソッド | 説明 |
|---|---|
setProperty(String key, String value) |
リソースアダプタ固有のプロパティを指定します. |
setProperty(String key, String type, String value) |
型を明示してリソースアダプタ固有のプロパティを指定します. |
createConnectionFactory() |
ConnectionFactory
を作成します.
|
diconファイルへの記述は以下のようになります.
<component name="mcfDeployer"
class="org.seasar.jms.core.deploy.impl.JMSManagedConnectionFactoryDeployer">
<property name="managedConnectionFactoryClass">
"リソースアダプタの提供するManegedConnectionFactory実装クラスのFQN"
</property>
<initMethod name="setProperty">
<arg>"リソースアダプタ固有のプロパティ名"</arg>
<arg>"リソースアダプタ固有のプロパティ値"</arg>
</initMethod>
...
</component>
リソースアダプタ固有のプロパティ
リソースアダプタ固有のプロパティは,使用するリソースアダプタのドキュメントを参照してください. 主なプロダクトのドキュメントを以下に示します.
- Apache ActiveMQ
- Sun Generic Resource Adapter for JMS の「ManagedConnectionFactory Properties」
SessionFactory
SessionFactoryは,JMSセッションを提供するコンポーネントです.
ConnectionFactoryが提供するJMSコネクション上でJMSセッションを作成して提供します.
SessionFactoryの実装クラスを以下に示します.
org.seasar.jms.core.session.impl.SessionFactoryImplorg.seasar.jms.container.session.impl.GenericRaSessionFactoryImpl
SessionFactoryImpl
ConnectionFactoryが提供するJMSコネクション上で作成したJMSセッションを提供するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
connectionFactory |
Yes |
JMSコネクションを提供するConnectionFactoryです.
通常は自動バインディングされるため,明示的に設定する必要はありません.
|
N/A |
transacted |
No |
JMSメッセージをトランザクショナルに受信する場合はtrueを指定します.
|
true |
acknowledgeMode |
No | JMSメッセージを受信した場合の応答モードを指定します. | AUTO_ACKNOWLEDGE
|
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.session.impl.SessionFactoryImpl"/>
GenericRaSessionFactoryImpl
S2JMS-Containerを使用する場合に,インバウンド通信でJMSメッセージを受信したJMSセッションを提供するコンポーネントです. このコンポーネントは,S2JMS-ContainerでSun Generic Resource Adapter for JMS と IBM WebSphere MQ (formerly known MQSeries) を組み合わせて,受信したJMSメッセージに対する応答メッセージを 同じJMSコネクション (WebSphere MQのキューマネージャ) に送信する場合に使用します.
このコンポーネントにはプロパティが無く,ManagedConnectionFactoryDeployerおよび,
ConnectionFactoryは必要ありません.
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.container.session.impl.GenericRaSessionFactoryImpl"/>
DestinationFactory
DestinationFactoryは,JMSデスティネーション (キューまたはトピック) を提供するコンポーネントです.
SessionFactoryの実装クラスを以下に示します.
org.seasar.jms.core.destination.impl.QueueFactoryorg.seasar.jms.core.destination.impl.TemporaryQueueFactoryorg.seasar.jms.core.destination.impl.TopicFactoryorg.seasar.jms.core.destination.impl.TemporaryTopicFactoryorg.seasar.jms.core.destination.impl.JndiDestinationFactoryorg.seasar.jms.core.destination.impl.SimpleDestinationFactoryorg.seasar.jms.core.destination.impl.ReplyToDestinationFactory
QueueFactory
QueueFactoryは,
Session#createQueue(String name)
を使用して
作成したキューを提供するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
name |
Yes | 作成するキューの名前です. | N/A |
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.destination.impl.QueueFactory">
<property name="name">"QUEUE"</property>
</component>
TemporaryQueueFactory
TemporaryQueueFactoryは,
Session#createTemporaryQueue()
を使用して
作成したテンポラリキューを提供するコンポーネントです.
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.destination.impl.TemporaryQueueFactory"/>
TopicFactory
TopicFactoryは,
Session#createTopic(String name)
を使用して
作成したトピックを提供するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
name |
Yes | 作成するトピックの名前です. | N/A |
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.destination.impl.TopicFactory">
<property name="name">"TOPIC"</property>
</component>
TemporaryTopicFactory
TemporaryTopicFactoryは,
Session#createTemporaryTopic()
を使用して
作成したテンポラリトピックを提供するコンポーネントです.
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.destination.impl.TemporaryTopicFactory"/>
JndiDestinationFactory
JndiDestinationFactoryは,
JNDIからルックアップしたJMSデスティネーション (キューまたはトピック) を提供するコンポーネントです.
アプリケーションサーバに構成されたJMSデスティネーションを使用する場合に使用します.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
name |
Yes | ルックアップするJMSデスティネーションのJNDI名です. | N/A |
env |
No |
JNDIのInitialContext
を
作成する際にコンストラクタに渡される環境プロパティです.
省略すると環境プロパティを指定せずにInitialContextを作成します.
|
N/A |
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.destination.impl.JndiDestinationFactory">
<property name="name">"java:comp/env/jms/Queue"</property>
</component>
SimpleDestinationFactory
SimpleDestinationFactoryは,
コンポーネントとしてdiconに定義されたキューまたはトピックを提供するコンポーネントです.
QueueFactoryやTopicFactoryを使うことができず,
ベンダ固有のキューまたはトピック実装クラスをインスタンス化して使う場合に使用します.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
destination |
Yes | キューまたはトピックを指定します. | N/A |
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.destination.impl.SimpleDestinationFactory">
<property name="destination">
<component class="ベンダ固有のキューまたはトピック実装クラス">
...
</component>
</property>
</component>
ReplyToDestinationFactory
ReplyToDestinationFactoryは,
受信したJMSメッセージのJMSReplyTo
ヘッダで
指定されたJMSデスティネーション (キューまたはトピック) を提供するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
message |
Yes | 受信したJMSメッセージを指定します. | N/A |
このコンポーネントはdiconファイルに定義して使うことは想定していません.
送信系
MessageSender
MessageSenderは,JMSメッセージを送信するコンポーネントです.
MessageSenderの実装クラスを以下に示します.
org.seasar.jms.core.impl.MessageSenderImpl
MessageSenderのプロパティおよびメソッドを以下に示します.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
deliveryMode |
No | 送信するJMSメッセージの配信モード を指定します. | DEFAULT_DELIVERY_MODE
|
destinationFactory |
Yes |
JMSデスティネーション (キューまたはトピック) を提供するDestinationFactoryです.
通常は自動バインディングされるため,明示的に設定する必要はありません.
|
N/A |
disableMessageID |
No |
送信するJMSメッセージのメッセージIDを無効化する場合はtrueを指定します.
|
false |
disableMessageTimestamp |
No |
送信するJMSメッセージのを無効化する場合はtrueを指定します.
|
false |
messageFactory |
No |
送信するJMSメッセージを提供するMessageFactoryです.
send()メソッドを呼び出す場合にのみ必要です.
通常は自動バインディングされるため,明示的に設定する必要はありません.
|
なし |
priority |
No | 送信するJMSメッセージの優先度を指定します. | DEFAULT_PRIORITY
|
sessionFactory |
Yes |
送信に使用するするJMSセッションを提供するSessionFactoryです.
通常は自動バインディングされるため,明示的に設定する必要はありません.
|
N/A |
timeToLive |
No | 送信するJMSメッセージの生存時間をミリ秒単位で指定します. | DEFAULT_TIME_TO_LIVE
|
diconファイルへの記述は以下のようになります.
<component instance="prototype"
class="org.seasar.jms.core.impl.MessageSenderImpl"/>
MessageSenderはスレッドセーフではないため,インスタンス属性はprotytpeにします.
MessageFactory
MessageFactoryは,送信するJMSメッセージを提供するコンポーネントです.
MessageFactoryの実装クラスを以下に示します.
org.seasar.jms.core.message.impl.BytesMessageFactoryorg.seasar.jms.core.message.impl.MapMessageFactoryorg.seasar.jms.core.message.impl.ObjectMessageFactoryorg.seasar.jms.core.message.impl.TextMessageFactory
BytesMessageFactory
BytesMessage
を作成するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
bytes |
Yes | 送信するJMSメッセージのペイロードに設定されるバイト列です. | N/A |
diconファイルへの記述は以下のようになります.
<component instance="prototype"
class="org.seasar.jms.core.message.impl.BytesMessageFactory"/>
<property name="bytes">
someObject.byteDate()
</property>
</component>
MapMessageFactory
MapMessage
を作成するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
map |
No | 送信するJMSメッセージのペイロードに設定されるマッピングです. | なし |
メソッド
| メソッド | 説明 |
|---|---|
addValue(String key, Object value) |
送信するJMSメッセージのペイロードに設定されるマッピングを追加します. |
diconファイルへの記述は以下のようになります.
<component instance="prototype"
class="org.seasar.jms.core.message.impl.MapMessageFactory"/>
<property name="map">
#{"foo" : foo, "bar" : bar}
</property>
</component>
ObjectMessageFactory
ObjectMessage
を作成するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
object |
Yes | 送信するJMSメッセージのペイロードに設定されるオブジェクトです. | N/A |
diconファイルへの記述は以下のようになります.
<component instance="prototype"
class="org.seasar.jms.core.message.impl.ObjectMessageFactory"/>
<property name="object">
someObject
</property>
</component>
TextMessageFactory
TextMessage
を作成するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
text |
No |
送信するJMSメッセージのペイロードに設定される文字列です.
textProviderプロパティが設定されない場合,このプロパティは必須です.
|
なし |
textProvider |
No |
送信するJMSメッセージのペイロードに設定される文字列を提供するTextProviderです.
通常は自動バインディングされるため,明示的に設定する必要はありません.
textプロパティが設定されない場合,このプロパティは必須です.
|
なし |
diconファイルへの記述は以下のようになります.
<component instance="prototype"
class="org.seasar.jms.core.message.impl.TextMessageFactory"/>
SendMessageInterceptor
SendMessageInterceptorは,アプリケーションコンポーネントのメソッドが例外をスローすることなく終了した際に,
JMSメッセージを送信するコンポーネントです.
AOPにより,既存のアプリケーションコンポーネントに手を加えることなく,JMSメッセージを送信することが可能となります.
SendMessageInterceptorの実装クラスを以下に示します.
org.seasar.jms.core.interceptor.SendMessageInterceptororg.seasar.jms.core.interceptor.SendReturnValueInterceptor
SendMessageInterceptor
MessageSender#send()を呼び出すことによりJMSメッセージを送信するコンポーネントです.
使用するMessageSenderはmessageFactoryプロパティが設定されている必要があります.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
messageSenderName |
Yes |
JMSメッセージを送信するMessageSenderのコンポーネント名を指定します.
|
N/A |
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.interceptor.SendMessageInterceptor">
<property name="messageSenderName">
"fooSender"
</property>
</component>
SendReturnValueInterceptor
このインターセプタが適用されたメソッドの戻り値をJMSメッセージのペイロードして送信するコンポーネントです.
使用するMessageSenderはmessageFactoryプロパティが設定されている必要はありません.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
messageSenderName |
Yes |
JMSメッセージを送信するMessageSenderのコンポーネント名を指定します.
|
N/A |
メソッド
| メソッド | 説明 |
|---|---|
addMessageFactory(Class<?> returnType, Class<? extends MessageFactory<? extends Message>> messageFactoryClass) |
メソッドの戻り値の型に対応したJMSメッセージを作成するMessageFactoryを追加します.
|
デフォルトでは,次の戻り値の型に対応します.
| メソッドの戻り値の型 | 対応するMessageFactory |
|---|---|
java.lang.String |
TextMessageFactory |
byte[] |
BytesMessageFactory |
java.util.Map |
MapMessageFactory |
java.io.Serializable |
ObjectMessageFactory |
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.interceptor.SendReturnValueInterceptor">
<property name="messageSenderName">
"fooSender"
</property>
</component>
TextProvider
JMSメッセージ (TextMessage
を送信する場合に,
ペイロードに設定する文字列を提供するコンポーネントです.
TextProviderの実装クラスを以下に示します.
org.seasar.jms.core.text.impl.TextHolderorg.seasar.jms.core.text.impl.VelocityTextFormatter
TextHolder
インスタンスフィールドに保持した文字列を提供するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
text |
Yes | このコンポーネントが提供する文字列を指定します. | N/A |
diconファイルへの記述は以下のようになります.
<component instance="prototype"
class="org.seasar.jms.core.text.impl.TextHolder">
<property name="text">
someObject.message
</property>
</component>
VelocityTextFormatter
Velocityを使用して組み立てた文字列を提供するコンポーネントです.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
templateText |
Yes | Velocityで処理するテンプレート文字列を指定します. | N/A |
diconファイルへの記述は以下のようになります.
<component class="org.seasar.jms.core.text.impl.VelocityTextFormatter">
<property name="templateText">
"foo:$foo.name bar:$bar.name baz:$baz.name"
</property>
</component>
受信系
MessageReceiver
MessageReceiverは,JMSメッセージを受信するコンポーネントです.
MessageReceiverの実装クラスを以下に示します.
org.seasar.jms.core.impl.MessageReceiverImpl
MessageReceiverのプロパティおよびメソッドを以下に示します.
プロパティ
| プロパティ | 必須 | 説明 | デフォルト |
|---|---|---|---|
destinationFactory |
Yes |
JMSデスティネーション (キューまたはトピック) を提供するDestinationFactoryです.
通常は自動バインディングされるため,明示的に設定する必要はありません.
|
N/A |
durable |
No |
JMSメッセージをデュラブル(継続的)に受信する場合はtrueを指定します.
|
false |
messageSelector |
No |
受信するJMSメッセージを選択するためのJMSメッセージセレクタ
を指定します.
|
null |
noLocal |
No |
受信するJMSコネクションから送信されたJMSメッセージを受信しない場合はtrueを指定します.
|
false |
sessionFactory |
Yes |
送信に使用するするJMSセッションを提供するSessionFactoryです.
通常は自動バインディングされるため,明示的に設定する必要はありません.
|
N/A |
subscriptionName |
No |
JMSメッセージをデュラブル(継続的)に受信する場合のサブスクリプション名です.
durableプロパティにtrueを指定した場合は必須です.
|
なし |
timeout |
No | JMSメッセージを受信するまで待機する時間をミリ秒単位で指定します. 正数が指定されると,JMSメッセージを受信するまで指定された時間待機します. 0が指定されると待機しません. 負数が指定されると無制限に待機します. | -1 |
diconファイルへの記述は以下のようになります.
<component instance="prototype"
class="org.seasar.jms.core.impl.MessageReceiverImpl"/>
MessageReceiverはスレッドセーフではないため,インスタンス属性はprotytpeにします.
