我有一个单例数据访问类,它在服务开始时初始化。我从QCF获得了QueueConnection,并在初始化时(在构造函数中)存储在DataAccess类中。
我正在为多个传入请求(每秒约30个)使用相同的连接来向MQ发送消息。我在加载测试时遇到了这个异常。
WLTC0011E: Cannot delist Resource. It is not enlisted for cleanup in the LocalTransactionContainment.
J2CA0031I: Method delist caught java.lang.IllegalStateException: Cannot delist Resource. It is not enlisted for cleanup with this LocalTransactionCoordinator.
J2CA0073E: Unable to delist connection from resource JMS$DBQCF1$JMSManagedConnection@9 from transaction in method localTransactionCommitted due to exception.
Initiating destruction of connection. Exception is: javax.resource.ResourceException: delist: caught Exception
这是我的代码,它将消息发送到队列。
public String sendMessage(String reqMsg) throws Exception{
QueueConnection queueCon = DataAccess.getDataAccess().getQueueCon();
Queue queue = DataAccess.getDataAccess().getRequestQueue();
QueueSession session = queueCon.createQueueSession(true,Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(queue);
TextMessage textMsg = queueSession.createTextMessage();
textMsg.setText(reqMsg);
sender.send(textMsg);
String msgId = textMsg.getJMSMessageID();
queueSession.commit();
closeSender(sender);
closeSession(session);
return msgId;
}
我试图搜索此异常但我找不到任何内容。有人可以说出它是什么。是因为我正在使用单个QueueConnection吗?
答案 0 :(得分:0)
实际上我没有找到这个问题的确切原因,但我通过调整Create Queue Session参数来解决这个问题。
我改变了
QueueSession session = queueCon.createQueueSession(true,Session.AUTO_ACKNOWLEDGE);
到
QueueSession session = queueCon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
然后删除提交。在这之后我从未见过这个例外。
希望这可以帮助那些正在寻找此例外的人。