我有一个包含 4 个 MDB 的应用程序,每个 MDB 通过 JMS 从 MQ 接收 SOAP 消息。收到消息后,我们将 XML 处理为对象模型并进行相应的处理,这始终涉及通过 Hibernate 将消息加载或保存到 Oracle 数据库。
此外,我们有一个石英进程,每分钟触发一次,可能会触发也可能不会触发这些动作,这些动作也可以使用 Hibernate 读取或写入数据库。
当系统处于高负载下时,即处理大量 1k + 并可能执行由我们的石英进程触发的一些数据库读/写,我们不断看到在我们的日志中抛出以下异常。
==================================================== ============================= 在 com.integrasp.iatrade.logic.MessageContextRouting.lookup(MessageContextRouting.java:150) 在 com .integrasp.iatrade.logic.RequestResponseManager.findRequestDestination(Reque stResponseManager.java:153) 在 com.integrasp.iatrade.logic.RequestResponseManager.findRequestDestination(请求 stResponseManager.java:174) 在 com.integrasp.iatrade.logic.IOLogic.processResponse (IOLogic.java:411)< br /> 在 com.integrasp.iatrade.logic.FxOrderQuoteManager.requestQuote(FxOrderQuoteManage r.java:119) 在 com.integrasp.iatrade.logic.FxOrderQuoteManager.processRequest(FxOrderQuoteMana ger.java:682) ) 在 com.integrasp.iatrade.eo.SubmitOrderRequest.process(SubmitOrderRequest.java:60) 在 com.integrasp.iatrade.ejb.BusinessLogicRegister.perform(BusinessLogicRegister.j ava:85) 在 com.integrasp.iatrade.ejb.mdb.OrderSubmissionBean.onMessage(OrderSubmissionBean .java:147) 在 com.ibm.ejs。 jms.listener.MDBWrapper$PriviledgedOnMessage.run(MDBWrapper.java:30 2) 在 com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63) 在 com.ibm.ejs.jms.listener.MDBWrapper .callOnMessage(MDBWrapper.java:271) 在 com.ibm.ejs.jms.listener.MDBWrapper.onMessage(MDBWrapper.java:240) 在 com.ibm.mq.jms.MQSession.run(MQSession.java:1593) 在com.ibm.ejs.jms.JMSSessionHandle.run(JMSSessionHandle.java:970) 在 com.ibm.ejs.jms.listener.ServerSession.connectionConsumerOnMessage(ServerSessio n.java:891) 在 com.ibm.ejs.jms.listener .ServerSession.onMessage(ServerSession.java:656) 在 com.ibm.ejs.jms.listener.ServerSession.dispatch(ServerSession.java:623) 在 sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja va:43) 在 java.lang.reflect.Method.invoke(Method.java:615) 在com.ibm.ejs.jms.listener.ServerSessionDispatcher.dispatch(ServerSessionDispatch er.java:37) 在 com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:96) 在 com.ibm.ejs.container.MDBWrapper .onMessage(MDBWrapper.java:132) 在 com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java:481) 在 com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473 ) 引起:java.lang.reflect.Method.invoke( Method.java:615) 在 org.hibernate。transaction.WebSphereExtendedJTATransactionLookup$TransactionMana gerAdapter$TransactionAdapter.registerSynchronization(WebSphereExtendedJTATransa ctionLookup.java:225) ... 30 更多原因:com.ibm.websphere.jtaextensions.NotSupportedException at com.ibm.ws.jtaextensions.ExtendedJTATransactionImpl.registerSynchronizationCall backForCurrentTran(ExtendedJTATransactionI .java:247)
... 34 更多
任何机构都可以帮助阐明 com.ibm.websphere.jtaextensions.NotSupportedException 的含义。IBM 文档说
“如果尝试在环境中注册 SynchronizationCallback 或在此功能不可用时,事务管理器会抛出异常。”
对我来说,这听起来像是容器拒绝休眠调用以启动事务。如果有人对容器为什么会抛出消息有任何想法,请告诉我。
提前致谢
卡尔