MainQという名前のキューから読み取る MessageBean があります。 onMessage コードの実行により、あるタイプのユーザーベースの例外がスローされた場合は、UserExceptionという名前を付けます。これをキャッチして、このメッセージをUserErrorQという名前の別のキューに配置します。例外がこのタイプでない場合、DMQ によって処理されるように例外がスローされます。
これが私の問題です:
- 私の catch ブロックでは、ErrorQueueHandler を介して、この新しいメッセージを UserErrorQ に配置しようとします。これにより、connectionFactory に接続して UserErrorQ にメッセージを送信しようとするとエラーが発生します。
- どうやら QueueConnectionFactory(javax.jms.ConnectionFactory) への新しい接続を作成すると問題が発生する
エラー:
com.sun.messaging.jms.JMSException: MQRA:DCF:allocation failure:createConnection:Error in allocating a connection. Cause: javax.transaction.RollbackException
at com.sun.messaging.jms.ra.DirectConnectionFactory._allocateConnection(DirectConnectionFactory.java:548)
at com.sun.messaging.jms.ra.DirectConnectionFactory.createConnection(DirectConnectionFactory.java:265)
at com.sun.messaging.jms.ra.DirectConnectionFactory.createConnection(DirectConnectionFactory.java:244)`
メッセージ Bean:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void onMessage(Message message) {
try{
.
.
}catch(Exception e){
if(isUserExceptionWrappedInException(e){
errorQueueHandler.sendToErrorQueue(message);
}
}
}
private boolean isUserExceptionWrappedInException(Throwable t) {
if (t == null)
return false;
else if (t instanceof UserException)
return true;
else
return isUserExceptionWrappedInException(t.getCause());
}
エラーキューハンドラ:
public void sendToErrorQueue(Message message) {
try {
createConnection();
send((TextMessage)message);
} finally {
closeConnection();
}
}
private void createConnection() throws Exception {
try {
connection = connectionfactory.createConnection();
connection.start();
} catch (JMSException e) {
String msg = "Error while attempting to initialize connection to jms destination " + ERROR_QUEUE;
throw new OperationalException(msg, e, OperationalExceptionType.APPLIKASJONSTJENER);
}
}
前述のように、接続しようとするとエラーが発生します。誰でもこれを修正できますか?