views:

449

answers:

2

Hi All,

I have an application containing 4 MDB's each of which receives SOAP messages over JMS from MQ. Once the messages have been received we process the XML into an object model and process accordingly which always involves either loading or saving messages to an Oracle database via Hibernate.

Additionally we have a quartz process with fires every minute that may or may not trigger so actions which could also read or write to the database using Hibernate.

When the system in under high load, i.e. processing large numbers 1k + and potentially performing some database read/writes triggered by our quartz process we keep seeing the following exception be thrown in our logs.

=============================================================================== at com.integrasp.iatrade.logic.MessageContextRouting.lookup(MessageContextRouting. java:150) at com.integrasp.iatrade.logic.RequestResponseManager.findRequestDestination(Reque stResponseManager.java:153) at com.integrasp.iatrade.logic.RequestResponseManager.findRequestDestination(Reque stResponseManager.java:174) at com.integrasp.iatrade.logic.IOLogic.processResponse(IOLogic.java:411)< br /> at com.integrasp.iatrade.logic.FxOrderQuoteManager.requestQuote(FxOrderQuoteManage r.java:119) at com.integrasp.iatrade.logic.FxOrderQuoteManager.processRequest(FxOrderQuoteMana ger.java:682) at com.integrasp.iatrade.logic.FxOrderSubmissionManager.processRequest(FxOrderSubm issionManager.java:408) at com.integrasp.iatrade.eo.SubmitOrderRequest.process(SubmitOrderRequest.java:60) at com.integrasp.iatrade.ejb.BusinessLogicRegister.perform(BusinessLogicRegister.j ava:85) at com.integrasp.iatrade.ejb.mdb.OrderSubmissionBean.onMessage(OrderSubmissionBean .java:147) at com.ibm.ejs.jms.listener.MDBWrapper$PriviledgedOnMessage.run(MDBWrapper.java:30 2) at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63 ) at com.ibm.ejs.jms.listener.MDBWrapper.callOnMessage(MDBWrapper.java:271) at com.ibm.ejs.jms.listener.MDBWrapper.onMessage(MDBWrapper.java:240) at com.ibm.mq.jms.MQSession.run(MQSession.java:1593) at com.ibm.ejs.jms.JMSSessionHandle.run(JMSSessionHandle.java:970) at com.ibm.ejs.jms.listener.ServerSession.connectionConsumerOnMessage(ServerSessio n.java:891) at com.ibm.ejs.jms.listener.ServerSession.onMessage(ServerSession.java:656) at com.ibm.ejs.jms.listener.ServerSession.dispatch(ServerSession.java:623) at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja va:43) at java.lang.reflect.Method.invoke(Method.java:615) at com.ibm.ejs.jms.listener.ServerSessionDispatcher.dispatch(ServerSessionDispatch er.java:37) at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:96) at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:132) at com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java:481) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.ja va:43) at java.lang.reflect.Method.invoke(Method.java:615) at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionMana gerAdapter$TransactionAdapter.registerSynchronization(WebSphereExtendedJTATransa ctionLookup.java:225) ... 30 more Caused by: com.ibm.websphere.jtaextensions.NotSupportedException at com.ibm.ws.jtaextensions.ExtendedJTATransactionImpl.registerSynchronizationCall backForCurrentTran(ExtendedJTATransactionImpl.java:247)

... 34 more

Could any body help to shed come light on what com.ibm.websphere.jtaextensions.NotSupportedException means. The IBM documentation says

"The exception is thrown by the transaction manager if an attempt is made to register a SynchronizationCallback in an environment or at a time when this function is not available. "

Which to me sounds like the container is rejecting hibernates call to start a transaction. If anybody has any idea on why the container could be throwing the message please let me know.

Thanks in advance

Karl

A: 

If you really need high load I would remove the Hibernate layer between your app and the database. Without Hibernate you have less moving parts and more control.

That is the only advice I can give you.

tuinstoel
A: 

If anyone was interested it was a thread that was trying to sync the transaction when the transaction had timed out.

I had assumed that if the transaction timeout then the thread would have been killed however this was not the case.

karl

Karl