概要
アウトバウンド通信を使用するための主要なコンポーネントを以下に示します.
アウトバウンド通信で利用するコンポーネントは,大きく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.SessionFactoryImpl
org.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.QueueFactory
org.seasar.jms.core.destination.impl.TemporaryQueueFactory
org.seasar.jms.core.destination.impl.TopicFactory
org.seasar.jms.core.destination.impl.TemporaryTopicFactory
org.seasar.jms.core.destination.impl.JndiDestinationFactory
org.seasar.jms.core.destination.impl.SimpleDestinationFactory
org.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.BytesMessageFactory
org.seasar.jms.core.message.impl.MapMessageFactory
org.seasar.jms.core.message.impl.ObjectMessageFactory
org.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.SendMessageInterceptor
org.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.TextHolder
org.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
にします.