У меня есть приложение, содержащее 4 MDB, каждое из которых получает сообщения SOAP через JMS от MQ. Как только сообщения получены, мы обрабатываем XML в объектную модель и обрабатываем соответствующим образом, что всегда включает либо загрузку, либо сохранение сообщений в базе данных Oracle через Hibernate.
Кроме того, у нас есть кварцевый процесс с пожарами каждую минуту, который может или не может запускать действия, которые также могут считывать или записывать в базу данных, используя 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 (Reque stResponseManager ):
в com.integrasp.iatrade.logic.IOLogic.processResponse (IOLogic.java:411)
в com.integrasp.iatrade.logic.FxOrderQuoteManager.requestQuote (FxOrderQuoteManage r.java:119)
в com.integrasp.iatrade.logic.FxOrderQuoteManager.processRequest (FxOrderQuoteMana ger.java:682)
в com.integrasp.iatrade.logic.FxOrderSubmissionManager.processRequest (FxOrderSubm issionManager.java:408)
в 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)
at sun.reflect.GeneratedMethodAccessor79.invoke (неизвестный источник)
at 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.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor42.invoke (неизвестный источник)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.ja va: 43)
в 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
в com.ibm.ws.jtaextensions.ExtendedJTATransactionImpl.registerSynchronizationCall backForCurrentTran (ExtendedJTATransactionImpl.java:247)
... еще 34
Может ли какое-либо тело помочь пролить свет на то, что означает com.ibm.websphere.jtaextensions.NotSupportedException. Документация IBM гласит
"Исключение выдается диспетчером транзакций, если предпринята попытка зарегистрировать SynchronizationCallback в среде или в то время, когда эта функция недоступна."
Что для меня похоже на то, что контейнер отклоняет вызов hibernates для начала транзакции. Если кто-нибудь знает, почему контейнер может выдавать сообщение, пожалуйста, дайте мне знать.
Заранее спасибо
Karl