0

我的 Glassfish 3.1.2.2 应用程序中有许多 MDB,它们定期使用 JMS 消息。在应用程序启动后的一段时间内,一切似乎都可以完美运行——从 12 小时到几天不等。然后,我将开始反复收到如下错误。从错误文本(“客户端的事务中止”)中,听起来好像容器正在尝试在现有事务中运行 MDB,但该事务以某种方式中止,因此它无法调用 MDB。另一条信息是重新部署应用程序不会使错误消失。重新启动 Glassfish 似乎确实使错误消失(一段时间,之后它会重新出现),这让我想知道这是否是某种资源耗尽问题。

[#|2012-09-12T21:42:15.045+0000|WARNING|glassfish3.1.2|javax.resourceadapter.mqjmsra.inbound.message|_ThreadID=74;_ThreadName=Thread-2;|MQJMSRA_MR2001: run:Caught Exception from onMessage():Redelivering:
javax.ejb.EJBException
    at com.sun.ejb.containers.MessageBeanContainer.deliverMessage(MessageBeanContainer.java:1176)
    at com.sun.ejb.containers.MessageBeanListenerImpl.deliverMessage(MessageBeanListenerImpl.java:81)
    at com.sun.enterprise.connectors.inbound.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:171)
    at $Proxy614.onMessage(Unknown Source)
    at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:260)
    at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:114)
    at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
    at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: javax.ejb.TransactionRolledbackLocalException: Client's transaction aborted
    at com.sun.ejb.containers.BaseContainer.useClientTx(BaseContainer.java:4722)
    at com.sun.ejb.containers.BaseContainer.preInvokeTx(BaseContainer.java:4601)
    at com.sun.ejb.containers.MessageBeanContainer.beforeMessageDelivery(MessageBeanContainer.java:1040)
    at com.sun.ejb.containers.MessageBeanListenerImpl.beforeMessageDelivery(MessageBeanListenerImpl.java:77)
    at com.sun.enterprise.connectors.inbound.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:139)
    at $Proxy614.beforeDelivery(Unknown Source)
    at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:247)
    ... 3 more
|#]
4

1 回答 1

1

当错误开始出现时,它是否仍然发生在同一个线程中?像_ThreadID=74;_ThreadName=Thread-2这种情况?我报告了这个错误,其中一个线程仍然与回滚事务相关联,但是对此没有任何反应。但是在我们的数据库连接变得更加稳定之后,我们就摆脱了它。

在此错误开始发生之前,我会查找违规线程上的最后一个活动。

于 2012-09-16T19:51:56.397 回答