Domanda

Ho un'applicazione contenente 4 MDB, ognuno dei quali riceve messaggi MMS su JMS da MQ. Una volta che i messaggi sono stati ricevuti, elaboriamo l'XML in un modello a oggetti ed elaboriamo di conseguenza, il che comporta sempre il caricamento o il salvataggio di messaggi in un database Oracle tramite Hibernate.

Inoltre abbiamo un processo al quarzo con incendi ogni minuto che possono o meno innescare azioni che potrebbero anche leggere o scrivere nel database usando Hibernate.

Quando il sistema è sotto carico elevato, ovvero l'elaborazione di grandi numeri 1k + e potenzialmente l'esecuzione di alcune letture / scritture di database attivate dal nostro processo al quarzo, continuiamo a vedere nei nostri registri la seguente eccezione:

=============================================== ================================ 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) su com.integrasp.iatrade.logic.IOLogic.processResponse (IOLogic.java:411) < br / > su com.integrasp.iatrade.logic.FxOrderQuoteManager.requestQuote (FxOrderQuoteManage r.java:119) su com.integrasp.iatrade.logic.FxOrderQuoteManager.processRequest (FxOrderQuoteMana ger.java:682) su com.integrasp.iatrade.logic.FxOrderSubmissionManager.processRequest (FxOrderSubm issionManager.java:408) su com.integrasp.iatrade.eo.SubmitOrderRequest.process (SubmitOrderRequest.java:60) su com.integrasp.iatrade.ejb.BusinessLogicRegister.perform (BusinessLogicRegister.j ava: 85) su com.integrasp.iatrade.ejb.mdb.OrderSubmissionBean.onMessage (OrderSubmissionBean .java: 147) su com.ibm.ejs.jms.listener.MDBWrapper $ PriviledgedOnMessage.run (MDBWrapper.java:30 2) su com.ibm.ws.security.util.AccessController.doPrivileged (AccessController.java:63) su com.ibm.ejs.jms.listener.MDBWrapper.callOnMessage (MDBWrapper.java:271) su com.ibm.ejs.jms.listener.MDBWrapper.onMessage (MDBWrapper.java:240) su com.ibm.mq.jms.MQSession.run (MQSession.java:1593) su com.ibm.ejs.jms.JMSSessionHandle.run (JMSSessionHandle.java:970) su com.ibm.ejs.jms.listener.ServerSession.connectionConsumerOnMessage (ServerSessio n.java:891) su com.ibm.ejs.jms.listener.ServerSession.onMessage (ServerSession.java:656) su com.ibm.ejs.jms.listener.ServerSession.dispatch (ServerSession.java:623) at sun.reflect.GeneratedMethodAccessor79.invoke (fonte sconosciuta) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.ja va: 43) at java.lang.reflect.Method.invoke (Method.java:615) su com.ibm.ejs.jms.listener.ServerSessionDispatcher.dispatch (ServerSessionDispatch er.java:37) su com.ibm.ejs.container.MDBWrapper.onMessage (MDBWrapper.java:96) su com.ibm.ejs.container.MDBWrapper.onMessage (MDBWrapper.java:132) su com.ibm.ejs.jms.listener.ServerSession.run (ServerSession.java:481) at com.ibm.ws.util.ThreadPool $ Worker.run (ThreadPool.java:1473) Causato da: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor42.invoke (fonte sconosciuta) 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) ... altri 30 Causato da: com.ibm.websphere.jtaextensions.NotSupportedException su com.ibm.ws.jtaextensions.ExtendedJTATransactionImpl.registerSynchronizationCall backForCurrentTran (ExtendedJTATransactionImpl.java:247)

... 34 in più

Qualunque organismo potrebbe aiutare a far luce sul significato di com.ibm.websphere.jtaextensions.NotSupportedException. La documentazione IBM dice

" L'eccezione viene generata dal gestore delle transazioni sesi tenta di registrare un SynchronizationCallback in un ambiente o in un momento in cui questa funzione non è disponibile. quot &;

Il che per me sembra che il contenitore stia rifiutando la chiamata di ibernazione per iniziare una transazione. Se qualcuno ha idea del perché il contenitore potrebbe lanciare il messaggio, per favore fatemelo sapere.

Grazie in anticipo

Karl

È stato utile?

Soluzione 2

Se qualcuno era interessato, era un thread che stava cercando di sincronizzare la transazione quando la transazione era scaduta.

Avevo supposto che se il timeout della transazione sarebbe stato interrotto il thread, tuttavia non era così.

karl

Altri suggerimenti

Se hai davvero bisogno di un carico elevato, rimuoverei il livello di ibernazione tra la tua app e il database. Senza Ibernazione hai meno parti in movimento e più controllo.

Questo è l'unico consiglio che posso darti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top