[Tomcat, HTTPD, Servlets & JSP] - JBoss Transactions in AS5.0.0.GA
by rnicholson10
We recently moved from JBoss AS 4.0.5.GA to AS 5.0.0.GA and have begun testing our applications. The first problem I'm having is to do with transactions. In 4.0.5.GA there are no issues, but in the new version I'm getting the following exception:
java.lang.IllegalStateException: Can't lock a TransactionLocal after the Transaction has ended
followed by the following:
2008-12-18 13:22:34,505 ERROR [org.jboss.web.tomcat.service.jca.CachedConnectionValve] (http-0.0.0.0-8080-2) Application error: action did not complete its transaction suspended tx=TransactionImple < ac, BasicAction: 7f000001:e47f:49491afc:a32 status: ActionStatus.COMMITTED >
If I try to start another transaction after these errors I get a null pointer exception. The transaction completes successfully on all DB's. Has something changed drastically between the 2 AS releases? Any help would be greatly appreciated.
Code is like this:
| TransactionManager transactionManager = TransactionManagerLocator.getInstance().locate();
| Transaction transaction = null;
|
| try
| {
| //Begin the transaction and then get the transaction...
| transactionManager.begin();
| transaction = transactionManager.getTransaction();
|
| //Update on DB1
| //Update on DB2
| //Update on DB3
|
| transaction.commit();
| }
| catch(Exception e)
| {
| try
| {
| transaction.rollback();
| }
| catch (SystemException se)
| {
| log.debug(se);
| }
|
| }
| finally
| {
| try
| {
| //close all resources
| }
| catch(SQLException se)
| {
| log.error("SQLException: "+ se);
| }
| }
|
|
Stack trace as follows:
| 2008-12-18 13:22:32,437 DEBUG [org.jboss.resource.connectionmanager.CachedConnectionManager] (http-0.0.0.0-8080-2) Unable to synchronize with transaction
| java.lang.IllegalStateException: Can't lock a TransactionLocal after the Transaction has ended
| at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.lock(BaseTransactionManagerDelegate.java:226)
| at org.jboss.tm.TransactionLocal.lock(TransactionLocal.java:109)
| at org.jboss.resource.connectionmanager.TransactionSynchronizer.lock(TransactionSynchronizer.java:222)
| at org.jboss.resource.connectionmanager.CachedConnectionManager.getCloseConnectionSynchronization(CachedConnectionManager.java:545)
| at org.jboss.resource.connectionmanager.CachedConnectionManager.unregisterConnection(CachedConnectionManager.java:303)
| at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:720)
| at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:362)
| at org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:155)
| at com.paddypower.shopwallet.db.MultipleDatabaseDAO.performTransaction(MultipleDatabaseDAO.java:286)
| at com.paddypower.shopwallet.action.WalletLDAction.performTransaction(WalletLDAction.java:589)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
| at java.lang.reflect.Method.invoke(Unknown Source)
| at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:266)
| at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:167)
| at org.apache.struts.actions.LookupDispatchAction.execute(LookupDispatchAction.java:143)
| at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
| at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
| at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
| at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
| at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
| at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
| at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
| at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
| at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
| at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
| at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
| at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
| at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
| at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
| at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| at java.lang.Thread.run(Unknown Source)
| 2008-12-18 13:22:32,438 DEBUG [org.jboss.resource.connectionmanager.CachedConnectionManager] (http-0.0.0.0-8080-2) Unable to synchronize with transaction
| java.lang.IllegalStateException: Can't lock a TransactionLocal after the Transaction has ended
| at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.lock(BaseTransactionManagerDelegate.java:226)
| at org.jboss.tm.TransactionLocal.lock(TransactionLocal.java:109)
| at org.jboss.resource.connectionmanager.TransactionSynchronizer.lock(TransactionSynchronizer.java:222)
| at org.jboss.resource.connectionmanager.CachedConnectionManager.getCloseConnectionSynchronization(CachedConnectionManager.java:545)
| at org.jboss.resource.connectionmanager.CachedConnectionManager.unregisterConnection(CachedConnectionManager.java:303)
| at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:720)
| at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:362)
| at org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:155)
| at com.paddypower.shopwallet.db.MultipleDatabaseDAO.performTransaction(MultipleDatabaseDAO.java:287)
| at com.paddypower.shopwallet.action.WalletLDAction.performTransaction(WalletLDAction.java:589)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
| at java.lang.reflect.Method.invoke(Unknown Source)
| at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:266)
| at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:167)
| at org.apache.struts.actions.LookupDispatchAction.execute(LookupDispatchAction.java:143)
| at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
| at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
| at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
| at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
| at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
| at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
| at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
| at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
| at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
| at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
| at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
| at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
| at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
| at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
| at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:601)
| at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| at java.lang.Thread.run(Unknown Source)
| 2008-12-18 13:22:32,468 DEBUG [org.jboss.web.tomcat.service.jasper.TagLibCache] (http-0.0.0.0-8080-2) Scanning for tlds in: vfsfile:/opt/jboss-5.0.0.GA/server/default/deploy/jbossweb.sar/jsf-libs/jsf-impl.jar
| 2008-12-18 13:22:32,687 DEBUG [org.jboss.web.tomcat.service.jasper.TagLibCache] (http-0.0.0.0-8080-2) Scanning for tlds in: vfsfile:/opt/jboss-5.0.0.GA/server/default/deploy/jbossweb.sar/jstl.jar
| 2008-12-18 13:22:34,505 ERROR [org.jboss.web.tomcat.service.jca.CachedConnectionValve] (http-0.0.0.0-8080-2) Application error: action did not complete its transaction suspended tx=TransactionImple < ac, BasicAction: 7f000001:e47f:49491afc:a32 status: ActionStatus.COMMITTED >
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4197572#4197572
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4197572
17 years, 4 months
[JBoss jBPM] - Re: How to best control access from multiple threads to a Pr
by kukeltje
anonymous wrote :
| I think, perhaps, my first post was a bit too abstract to be clear. So... here is a more concrete example.
|
Thanks, that always helps
anonymous wrote : E(mail) will provide J(bpm) with delivery notification and read receipt information via http callbacks.
| I hope it is an internal emailing system where users have no control over whether or not they send de read notification.
anonymous wrote : think that you are saying that I could model this in a different way, using tokens to ensure that the two async events are handled correctly (i.e. thread J2 will signal the "delivery" token and thread J3 will signal the "read" token. For example:
|
|
|
| |
| | start
| | |
| | |
| | V
| | send email via http
| | |
| | |
| | V
| | +------------------fork------------------+
| | | |
| | V V
| | wait for delivery receipt wait for read receipt
| | | |
| | | |
| | V V
| | send delivery receipt via http send read receipt via http
| | | |
| | | |
| | +------------------join------------------+
| | |
| | |
| | V
| | end
| |
|
| Have I understood you correctly?
Yes, and if you want to prevent de read-receipt being send to the P system before or at the same time as the delivery-receipt, you could also model it like this
| start
| |
| |
| V
| send email via http
| |
| |
| V
| +------------------fork------------------+
| | |
| V V
| wait for delivery receipt wait for read receipt
| | |
| | |
| V |
| send delivery receipt via http |
| | |
| | |
| +------------------join------------------+
| |
| |
| send read receipt via http
| |
| |
| V
| end
|
|
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4197570#4197570
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4197570
17 years, 4 months