public class MessageListenerAdapter extends AbstractAdaptableMessageListener implements SubscriptionNameProvider
デフォルトでは、受信 JMS メッセージのコンテンツはターゲットリスナーメソッドに渡される前に抽出され、ターゲットメソッドが生の Message
EE の代わりに文字列やバイト配列などのメッセージコンテンツ型を操作できるようにします。メッセージ型の変換は Spring JMS MessageConverter
に委譲されます。デフォルトでは、SimpleMessageConverter
が使用されます。(このような自動メッセージ変換を行わない場合は、必ず MessageConverter
を null
に設定してください。)
ターゲットリスナーメソッドが null 以外のオブジェクト(通常は String
またはバイト配列などのメッセージコンテンツ型のオブジェクト)を返す場合、JMS Message
にラップされ、レスポンスの宛先(JMS の「返信先」の宛先)に送信されます。または specified default destination
)。
注 : レスポンスメッセージの送信は、SessionAwareMessageListener
エントリポイントを使用している場合にのみ使用できます(通常、Spring メッセージリスナーコンテナーを介して)。標準の JMS MessageListener
EE としての使用は、レスポンスメッセージの生成をサポートしていません。
このアダプタークラスに準拠するメソッドシグネチャーの例を以下に示します。この最初の例では、すべての Message
型を処理し、各 Message
型の内容を引数として渡します。これらのメソッドはすべて void
を返すため、Message
は返送されません。
public interface MessageContentsDelegate { void handleMessage(String text); void handleMessage(Map map); void handleMessage(byte[] bytes); void handleMessage(Serializable obj); }次の例では、すべての
Message
型を処理し、実際の(未加工の) Message
を引数として渡しています。繰り返しますが、これらのメソッドはすべて void
を返すため、Message
は返送されません。public interface RawMessageDelegate { void handleMessage(TextMessage message); void handleMessage(MapMessage message); void handleMessage(BytesMessage message); void handleMessage(ObjectMessage message); }この次の例は、
TextMessages
EE の String
コンテンツを使用するだけの Message
デリゲートを示しています。Message
処理メソッドの名前が original
とどのように異なるかにも注意してください(これは、付随する Bean 定義で構成する必要があります)。この場合も、メソッドが void
を返すため、Message
は返送されません。public interface TextMessageContentDelegate { void onMessage(String text); }この最後の例は、
TextMessages
EE の String
コンテンツを使用するだけの Message
デリゲートを示しています。このメソッドの戻り値の型が String
であることに注意してください。これにより、構成済みの MessageListenerAdapter
がレスポンスとして TextMessage
EE を送信します。public interface ResponsiveTextMessageContentDelegate { String handleMessage(String text); }詳細な例と説明については、このクラス(および付随する XML 構成)を詳細に説明している Spring リファレンスドキュメントを参照してください。
setDelegate(java.lang.Object)
, setDefaultListenerMethod(java.lang.String)
, AbstractAdaptableMessageListener.setDefaultResponseDestination(javax.jms.Destination)
, AbstractAdaptableMessageListener.setMessageConverter(org.springframework.jms.support.converter.MessageConverter)
, SimpleMessageConverter
, SessionAwareMessageListener
, AbstractMessageListenerContainer.setMessageListener(java.lang.Object)
修飾子と型 | フィールドと説明 |
---|---|
static StringSE | ORIGINAL_DEFAULT_LISTENER_METHOD デフォルトのリスナーメソッド "handleMessage" のすぐに使える値。 |
logger
コンストラクターと説明 |
---|
MessageListenerAdapter() デフォルト設定で新しい MessageListenerAdapter を作成します。 |
MessageListenerAdapter(ObjectSE delegate) 指定されたデリゲートの新しい MessageListenerAdapter を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected ObjectSE[] | buildListenerArguments(ObjectSE extractedMessage) ターゲットリスナーメソッドに渡される引数の配列を作成します。 |
protected StringSE | getDefaultListenerMethod() 委譲先のデフォルトのリスナーメソッドの名前を返します。 |
protected ObjectSE | getDelegate() リッスンしているデリゲートメッセージにターゲットオブジェクトを返します。 |
protected StringSE | getListenerMethodName(MessageEE originalMessage, ObjectSE extractedMessage) 指定されたメッセージを処理することになっているリスナーメソッドの名前を決定します。 |
StringSE | getSubscriptionName() このメッセージリスナーオブジェクトのサブスクリプション名を決定します。 |
protected ObjectSE | invokeListenerMethod(StringSE methodName, ObjectSE[] arguments) 指定されたリスナーメソッドを呼び出します。 |
void | onMessage(MessageEE message, SessionEE session) Spring SessionAwareMessageListener エントリポイント。 |
void | setDefaultListenerMethod(StringSE defaultListenerMethod) 特定のリスナーメソッドが決定されていない場合に、委譲先のデフォルトリスナーメソッドの名前を指定します。 |
void | setDelegate(ObjectSE delegate) リスニングするメッセージを委譲するターゲットオブジェクトを設定します。 |
buildMessage, extractMessage, getDestinationResolver, getMessageConverter, getMessagingMessageConverter, getResponseDestination, getResponseQosSettings, handleListenerException, handleResult, onMessage, postProcessProducer, postProcessResponse, preProcessResponse, resolveDefaultResponseDestination, sendResponse, setDefaultResponseDestination, setDefaultResponseQueueName, setDefaultResponseTopicName, setDestinationResolver, setHeaderMapper, setMessageConverter, setResponseQosSettings
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public MessageListenerAdapter()
MessageListenerAdapter
を作成します。public MessageListenerAdapter(ObjectSE delegate)
MessageListenerAdapter
を作成します。delegate
- デリゲートオブジェクト public void setDelegate(ObjectSE delegate)
明示的なデリゲートオブジェクトが指定されていない場合、リスナーメソッドは、このアダプターインスタンス(つまり、このアダプターのカスタムサブクラス)に存在し、リスナーメソッドを定義することが想定されています。
protected ObjectSE getDelegate()
public void setDefaultListenerMethod(StringSE defaultListenerMethod)
"handleMessage"
です。protected StringSE getDefaultListenerMethod()
public void onMessage(MessageEE message, @Nullable SessionEE session) throws JMSExceptionEE
SessionAwareMessageListener
エントリポイント。メッセージ引数を適切に変換して、メッセージをターゲットリスナーメソッドに委譲します。ターゲットメソッドが null 以外のオブジェクトを返す場合は、JMS メッセージをラップして送り返します。
SessionAwareMessageListener<MessageEE>
の onMessage
AbstractAdaptableMessageListener
の onMessage
message
- 受信 JMS メッセージ session
- 操作する JMS セッション JMSExceptionEE
- JMS API メソッドによってスローされた場合 public StringSE getSubscriptionName()
SubscriptionNameProvider
SubscriptionNameProvider
の getSubscriptionName
protected StringSE getListenerMethodName(MessageEE originalMessage, ObjectSE extractedMessage) throws JMSExceptionEE
デフォルトの実装は、構成されているデフォルトのリスナーメソッドがあれば、それを返すだけです。
originalMessage
- JMS リクエストメッセージ extractedMessage
- 引数としてリスナーメソッドに渡される、変換された JMS リクエストメッセージ null
)JMSExceptionEE
- JMS API メソッドによってスローされた場合 setDefaultListenerMethod(java.lang.String)
protected ObjectSE[] buildListenerArguments(ObjectSE extractedMessage)
デフォルトの実装では、指定されたメッセージオブジェクトを唯一の要素として配列を構築します。つまり、抽出されたメッセージは、たとえそれが配列であっても、常に単一のメソッド引数に渡され、ターゲットメソッドには対応する配列の型の単一の引数が宣言されます。
これをオーバーライドして、配列などの特別なメッセージコンテンツを異なる方法で処理することができます。たとえば、メッセージ配列の各要素を個別のメソッド引数として渡します。
extractedMessage
- メッセージの内容 @Nullable protected ObjectSE invokeListenerMethod(StringSE methodName, ObjectSE[] arguments) throws JMSExceptionEE
methodName
- リスナーメソッドの名前 arguments
- 渡されるメッセージ引数 JMSExceptionEE
- JMS API メソッドによってスローされた場合 getListenerMethodName(javax.jms.Message, java.lang.Object)
, buildListenerArguments(java.lang.Object)