public class JmsInvokerClientInterceptor extends ObjectSE implements MethodInterceptor, InitializingBean
MethodInterceptor
。リモート呼び出しオブジェクトをシリアライズし、リモート呼び出し結果オブジェクトをデシリアライズします。RMI と同様に Java 直列化を使用しますが、通信インフラストラクチャとして JMS プロバイダーを使用します。
QueueConnectionFactory
EE とターゲットキュー(Queue
EE 参照またはキュー名として)を使用して構成されます。
この JMS 呼び出しメカニズムが着想を得た元のプロトタイプを作成した James Strachan に感謝します。
setConnectionFactory(javax.jms.ConnectionFactory)
, setQueue(javax.jms.Queue)
, setQueueName(java.lang.String)
, JmsInvokerServiceExporter
, JmsInvokerProxyFactoryBean
コンストラクターと説明 |
---|
JmsInvokerClientInterceptor() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
protected RemoteAccessException | convertJmsInvokerAccessException(JMSExceptionEE ex) 指定された JMS 呼び出しアクセス例外を適切な Spring RemoteAccessException に変換します。 |
protected ConnectionEE | createConnection() この JMS 呼び出し元の新しい JMS 接続を作成します。 |
protected RemoteInvocation | createRemoteInvocation(MethodInvocation methodInvocation) 指定された AOP メソッド呼び出し用に新しい RemoteInvocation オブジェクトを作成します。 |
protected MessageEE | createRequestMessage(SessionEE session, RemoteInvocation invocation) 呼び出し元のリクエストメッセージを作成します。 |
protected SessionEE | createSession(ConnectionEE con) この JMS 呼び出し元の新しい JMS セッションを作成します。 |
protected MessageEE | doExecuteRequest(SessionEE session, QueueEE queue, MessageEE requestMessage) 指定されたリクエストを実際に実行し、呼び出し元のリクエストメッセージを指定されたターゲットキューに送信し、対応するレスポンスを待ちます。 |
protected RemoteInvocationResult | executeRequest(RemoteInvocation invocation) 指定されたリモート呼び出しを実行し、呼び出し元のリクエストメッセージをこのアクセサーのターゲットキューに送信し、対応するレスポンスを待ちます。 |
protected RemoteInvocationResult | extractInvocationResult(MessageEE responseMessage) レスポンスメッセージから呼び出し結果を抽出します。 |
protected ConnectionFactoryEE | getConnectionFactory() JMS QueueConnections の取得に使用する QueueConnectionFactory を返します。 |
protected long | getReceiveTimeout() リクエストに対するレスポンスメッセージの受信に使用するタイムアウトをミリ秒単位で返します。 |
ObjectSE | invoke(MethodInvocation methodInvocation) このメソッドを実装して、呼び出しの前後に追加の処理を実行します。 |
protected RemoteInvocationResult | onInvalidResponse(MessageEE responseMessage) 無効なレスポンスメッセージを検出したときに extractInvocationResult(javax.jms.Message) によって呼び出されるコールバック。 |
protected RemoteInvocationResult | onReceiveTimeout(RemoteInvocation invocation) 指定された RemoteInvocation の受信タイムアウトの期限が切れたときに executeRequest(org.springframework.remoting.support.RemoteInvocation) によって呼び出されるコールバック。 |
protected ObjectSE | recreateRemoteInvocationResult(RemoteInvocationResult result) 指定された RemoteInvocationResult オブジェクトに含まれる呼び出し結果を再作成します。 |
protected QueueEE | resolveQueue(SessionEE session) このアクセサーのターゲットキューを解決します。 |
protected QueueEE | resolveQueueName(SessionEE session, StringSE queueName) このアクセサーの DestinationResolver を介して、指定されたキュー名を JMS Queue EE に解決します。 |
void | setConnectionFactory(ConnectionFactoryEE connectionFactory) JMS QueueConnections の取得に使用する QueueConnectionFactory を設定します。 |
void | setDestinationResolver(DestinationResolver destinationResolver) このアクセサーのキュー参照を解決するために使用される DestinationResolver を設定します。 |
void | setMessageConverter(MessageConverter messageConverter) MessageConverter を指定して、RemoteInvocation オブジェクトをリクエストメッセージに変換し、レスポンスメッセージを RemoteInvocationResult オブジェクトに変換します。 |
void | setQueue(QueueEE queue) 呼び出し元のリクエストを送信するターゲットキューを設定します。 |
void | setQueueName(StringSE queueName) 呼び出し元のリクエストを送信するターゲットキューの名前を設定します。 |
void | setReceiveTimeout(long receiveTimeout) リクエストに対するレスポンスメッセージの受信に使用するタイムアウトを設定します(ミリ秒単位)。 |
void | setRemoteInvocationFactory(RemoteInvocationFactory remoteInvocationFactory) このアクセサーに使用する RemoteInvocationFactory を設定します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setConnectionFactory(@Nullable ConnectionFactoryEE connectionFactory)
@Nullable protected ConnectionFactoryEE getConnectionFactory()
public void setQueue(QueueEE queue)
public void setQueueName(StringSE queueName)
指定された名前は DestinationResolver
を介して動的に解決されます。
public void setDestinationResolver(@Nullable DestinationResolver destinationResolver)
デフォルトのリゾルバーは DynamicDestinationResolver
です。宛先名を JNDI ロケーションとして解決するための JndiDestinationResolver
を指定します。
public void setRemoteInvocationFactory(@Nullable RemoteInvocationFactory remoteInvocationFactory)
RemoteInvocationFactory
を設定します。 デフォルトは DefaultRemoteInvocationFactory
です。
カスタム呼び出しファクトリは、ユーザー資格情報など、さらにコンテキスト情報を呼び出しに追加できます。
public void setMessageConverter(@Nullable MessageConverter messageConverter)
MessageConverter
を指定して、RemoteInvocation
オブジェクトをリクエストメッセージに変換し、レスポンスメッセージを RemoteInvocationResult
オブジェクトに変換します。 デフォルトは SimpleMessageConverter
で、各呼び出し / 呼び出し結果オブジェクトに標準の JMS ObjectMessage
EE を使用します。
カスタム実装は通常、Serializable
SE オブジェクトを特別な種類のメッセージに適合させるか、RemoteInvocation(Result)s
を特定の種類のメッセージに変換するように特別に調整されている場合があります。
public void setReceiveTimeout(long receiveTimeout)
デフォルトは 0 で、タイムアウトなしで受信をブロックすることを示します。
protected long getReceiveTimeout()
public void afterPropertiesSet()
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
@Nullable public ObjectSE invoke(MethodInvocation methodInvocation) throws ThrowableSE
MethodInterceptor
Joinpoint.proceed()
を呼び出すようにします。MethodInterceptor
の invoke
methodInvocation
- メソッド呼び出しジョインポイント Joinpoint.proceed()
の呼び出しの結果。インターセプターによってインターセプトされる可能性があります ThrowableSE
- インターセプターまたはターゲットオブジェクトが例外をスローする場合 protected RemoteInvocation createRemoteInvocation(MethodInvocation methodInvocation)
RemoteInvocation
オブジェクトを作成します。 デフォルトの実装は RemoteInvocationFactory
に委譲します。
ユーザー資格情報などの追加の呼び出しパラメーターを含むカスタム RemoteInvocation
サブクラスを提供するために、サブクラスでオーバーライドできます。再利用可能な戦略であるカスタム RemoteInvocationFactory
を使用することが望ましいことに注意してください。
methodInvocation
- 現在の AOP メソッドの呼び出し RemoteInvocationFactory.createRemoteInvocation(org.aopalliance.intercept.MethodInvocation)
protected RemoteInvocationResult executeRequest(RemoteInvocation invocation) throws JMSExceptionEE
invocation
- 実行する RemoteInvocationJMSExceptionEE
- JMS 障害の場合 doExecuteRequest(javax.jms.Session, javax.jms.Queue, javax.jms.Message)
protected ConnectionEE createConnection() throws JMSExceptionEE
protected SessionEE createSession(ConnectionEE con) throws JMSExceptionEE
protected QueueEE resolveQueue(SessionEE session) throws JMSExceptionEE
session
- 現在の JMS セッション JMSExceptionEE
- 解決に失敗した場合 protected QueueEE resolveQueueName(SessionEE session, StringSE queueName) throws JMSExceptionEE
DestinationResolver
を介して、指定されたキュー名を JMS Queue
EE に解決します。session
- 現在の JMS セッション queueName
- キューの名前 JMSExceptionEE
- 解決に失敗した場合 setDestinationResolver(org.springframework.jms.support.destination.DestinationResolver)
protected MessageEE createRequestMessage(SessionEE session, RemoteInvocation invocation) throws JMSExceptionEE
デフォルトの実装では、指定された RemoteInvocation オブジェクトの JMS ObjectMessage
EE を作成します。
session
- 現在の JMS セッション invocation
- 送信するリモート呼び出し JMSExceptionEE
- メッセージを作成できなかった場合 @Nullable protected MessageEE doExecuteRequest(SessionEE session, QueueEE queue, MessageEE requestMessage) throws JMSExceptionEE
デフォルトの実装は、レスポンスの受信に TemporaryQueue
EE を使用する標準の JMS 送信 / 受信に基づいています。
session
- 使用する JMS セッション queue
- 送信先の解決されたターゲットキュー requestMessage
- 送信する JMS メッセージ JMSExceptionEE
- JMS 障害の場合 protected RemoteInvocationResult extractInvocationResult(MessageEE responseMessage) throws JMSExceptionEE
デフォルトの実装では、RemoteInvocationResult
オブジェクトを運ぶ JMS ObjectMessage
EE が必要です。無効なレスポンスメッセージが検出されると、onInvalidResponse
コールバックが呼び出されます。
responseMessage
- レスポンスメッセージ JMSExceptionEE
- JMS 例外が発生した場合にスローされます onInvalidResponse(javax.jms.Message)
protected RemoteInvocationResult onReceiveTimeout(RemoteInvocation invocation)
RemoteInvocation
の受信タイムアウトの期限が切れたときに executeRequest(org.springframework.remoting.support.RemoteInvocation)
によって呼び出されるコールバック。 デフォルトでは、RemoteTimeoutException
がスローされます。サブクラスは、より専用の例外をスローするか、デフォルトの RemoteInvocationResult
をフォールバックとして返すかを選択できます。
invocation
- 呼び出し protected RemoteInvocationResult onInvalidResponse(MessageEE responseMessage) throws JMSExceptionEE
extractInvocationResult(javax.jms.Message)
によって呼び出されるコールバック。 デフォルトの実装は MessageFormatException
EE をスローします。
responseMessage
- 無効なレスポンスメッセージ JMSExceptionEE
- 無効なレスポンスが呼び出し元に伝達されるインフラストラクチャ例外につながる場合 extractInvocationResult(javax.jms.Message)
@Nullable protected ObjectSE recreateRemoteInvocationResult(RemoteInvocationResult result) throws ThrowableSE
RemoteInvocationResult
オブジェクトに含まれる呼び出し結果を再作成します。 デフォルトの実装では、デフォルトの recreate()
メソッドを呼び出します。
サブクラスでオーバーライドしてカスタムレクリエーションを提供し、返された結果オブジェクトを処理する可能性があります。
result
- 再作成する RemoteInvocationResultThrowableSE
- 呼び出し結果が例外の場合 RemoteInvocationResult.recreate()
protected RemoteAccessException convertJmsInvokerAccessException(JMSExceptionEE ex)
RemoteAccessException
に変換します。ex
- 変換する例外