2012-09-13 35 views
0

我在我的Glassfish 3.1.2.2应用程序中定期使用JMS消息的MDB数量很多。在应用程序启动后的一段时间内,所有应用程序都可以完美无缺地工作 - 从12小时到几天的任何时间。然后,我会重复出现下面的错误。从错误文本(“客户端事务中止”),听起来好像容器正试图在现有事务中运行MDB,但事务以某种方式中止,因此无法调用MDB。另一个信息是重新部署应用程序不会使错误消失。重新启动Glassfish似乎会使错误消失(一段时间后,它会重新出现),这让我怀疑这是否是某种资源耗尽问题。Glassfish/JMS MDB事务异常终止

[#|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 
|#] 

回答

1

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

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