3月,我们将websphere mq从版本6更新为7.由于我们每个月都会这样做,因此当我们的应用程序尝试将消息放入MQ队列时,会丢失一个事务。我们收到此错误:
[8/1/12 11:37:53:163 MEST] 00000361 LocalTranCoor E WLTC0016E: 资源JMS $ QueueConnectionFactory $ JMSManagedConnection @ 1276失败 去完成。异常堆栈跟踪如下: javax.transaction.xa.XAException at com.ibm.ejs.j2c.LocalTransactionWrapper.commit(LocalTransactionWrapper.java:283) 在 com.ibm.ws.LocalTransaction.LocalTranCoordImpl.complete(LocalTranCoordImpl.java:942) 在 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)at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:230)at at com.ibm.ejs.csi.NotSupported.postInvoke(NotSupported.java:133)at at com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.java:570) 在 com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:4558) 在com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:111) 在com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:136) 在com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java:567) 在com.ibm.ws.util.ThreadPool $ Worker.run(ThreadPool.java:1604)引起 by:javax.resource.spi.ResourceAdapterInternalException:失败 提交事务 com.ibm.ejs.jms.JMSCMUtils.mapToResourceException(JMSCMUtils.java:176) 在 com.ibm.ejs.jms.JMSManagedSession $ JMSLocalTransaction.commit(JMSManagedSession.java:1209) 在 com.ibm.ejs.j2c.LocalTransactionWrapper.commit(LocalTransactionWrapper.java:263) ... 12更多引起: com.ibm.msg.client.jms.DetailedIllegalStateException:JMSCC0020:这个 会议已结束。一个叫做方法的应用程序,一定不能 会议结束后使用。确保会话不是 在调用方法之前关闭。在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:313) 在 com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:388) 在 com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:104) 在 com.ibm.msg.client.jms.internal.State.checkNotClosed(State.java:145) 在 com.ibm.msg.client.jms.internal.JmsSessionImpl.checkNotClosed(JmsSessionImpl.java:2479) 在 com.ibm.msg.client.jms.internal.JmsSessionImpl.commit(JmsSessionImpl.java:516) 在com.ibm.mq.jms.MQSession.commit(MQSession.java:214)at com.ibm.ejs.jms.JMSManagedSession $ JMSLocalTransaction.commit(JMSManagedSession.java:1203) ......还有13个。
我们的应用程序不是为处理回滚操作而设计的,因此邮件会丢失。 我想知道自升级以来导致此问题的原因以及我们可以采取的措施。
我们使用的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();
}
}
亲切的问候,
汤姆