3 月,我们将 websphere mq 从版本 6 更新到了 7。因为我们每个月都这样做,所以当我们的应用程序尝试将消息放入 MQ 队列时,一个事务会丢失。我们得到这个错误:
[8/1/12 11:37:53:163 MEST] 00000361 LocalTranCoor E WLTC0016E:资源 JMS$QueueConnectionFactory$JMSManagedConnection@1276 未能完成。异常堆栈跟踪如下:com.ibm.ws.LocalTransaction.LocalTranCoordImpl.complete(LocalTranCoordImpl.java:942) 处的 com.ibm.ejs.j2c.LocalTransactionWrapper.commit(LocalTransactionWrapper.java:283) 处的 javax.transaction.xa.XAException在 com.ibm.ws.LocalTransaction.LocalTranCoordImpl.complete(LocalTranCoordImpl.java:830) 在 com.ibm.ws.LocalTransaction.LocalTranCoordImpl.end(LocalTranCoordImpl.java:1424) 在 com.ibm.ejs.csi.TranStrategy.commit (TranStrategy.java:891) 在 com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:230) 在 com.ibm.ejs.csi.NotSupported.postInvoke(NotSupported.java:133) 在 com.ibm。 ejs.csi.TransactionControlImpl。JMSCC0020:此会话已关闭。一个应用程序调用了在会话关闭后不得使用的方法。确保在调用该方法之前会话未关闭。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.lang.reflect.Constructor .newInstance(Constructor.java:513) at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:313) at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices .java:388) 在 com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:104) 在 com.ibm。
我们的应用程序不是为处理回滚操作而设计的,因此消息会丢失。我想知道自升级以来导致此问题的原因以及我们可以做些什么。
我们使用的java代码是:
public void sendMessage(QueueConnectionFactory connectionFactory, Queue queue, String text, int priority) throws JMSException{
QueueConnection connection = null;
try {
connection = connectionFactory.createQueueConnection();
connection.start();
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(queue);
TextMessage message = session.createTextMessage(text);
sender.send(message);
} finally {
if (connection!=null)
connection.close();
}
}
亲切的问候,
汤姆