使用jdbc进行JBoss事务回滚

时间:2012-07-25 14:17:06

标签: jdbc jboss transactions

我使用JBoss 4.0.4 GA作为应用服务器,使用EJB 2.x作为编码逻辑,使用Mysql 5.1作为后端。我最近将jboss配置中的 commit-option 更改为“B”,因为我们将一些JDBC查询与EJB一起引入。我的EJB代码inturn在MySql中调用存储过程,我使用CallableStatement来执行存储过程。我在MySQL中使用Innodb引擎用于表格和jboss数据源是最简单的配置使用。但是当我通过客户端执行EJB方法时,我得到以下异常:

  

引起:org.jboss.resource.connectionmanager.JBossLocalXAException:   无法提交本地tx; - 嵌套throwable:   (org.jboss.resource.JBossResourceException:SQLException; - 嵌套   throwable:(java.sql.SQLException:之后不允许任何操作   连接关闭。))   org.jboss.resource.connectionmanager.TxConnectionManager $ LocalXAResource.commit(TxConnectionManager.java:912)   在   org.jboss.tm.TransactionImpl $ Resource.commit(TransactionImpl.java:2253)   在   org.jboss.tm.TransactionImpl.commitResources(TransactionImpl.java:1784)   在org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:340)...   29更多

     

引起:org.jboss.resource.JBossResourceException:SQLException; -   嵌套throwable:(java.sql.SQLException:之后不允许任何操作   连接关闭。)at   org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkException(BaseWrapperManagedConnection.java:636)   在   org.jboss.resource.adapter.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:73)   在   org.jboss.resource.connectionmanager.TxConnectionManager $ LocalXAResource.commit(TxConnectionManager.java:905)   ......还有32个

     

引起:java.sql.SQLException:之后不允许任何操作   连接关闭。在   com.mysql.jdbc.Connection.checkClosed(Connection.java:1842)at   com.mysql.jdbc.Connection.commit(Connection.java:2154)at   org.jboss.resource.adapter.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:69)   ......还有33个

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,这是存储过程权限的问题。数据源配置了用户,该用户对存储过程没有权限。在使用正确的权限进行测试后,代码正常运行且交易正常。我尝试使用普通的JDBC连接[不使用数据源]执行存储过程。这一步给了我空指针异常,通过它我了解了访问权限。

我在前一篇文章中没有提交的异常“null”的长栈跟踪中有一条线索,但对我来说建议与数据源连接相同。感谢任何试图提供帮助的人。我希望将来可能会有其他人对我来说是个奇怪的错误。

org.jboss.tm.JBossTransactionRolledbackException: ***null***; nested exception is: 
org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=serverip/13308, BranchQual=, localId=13308] status=STATUS_NO_TRANSACTION; - nested throwable: (org.jboss.resource.connectionmanager.JBossLocalXAException: could not commit local tx; - nested throwable: (org.jboss.resource.JBossResourceException: SQLException; - nested throwable: (java.sql.SQLException: No operations allowed after connection closed.))); - nested throwable: (org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=serverip/13308, BranchQual=, localId=13308] status=STATUS_NO_TRANSACTION; - nested throwable: (org.jboss.resource.connectionmanager.JBossLocalXAException: could not commit local tx; - nested throwable: (org.jboss.resource.JBossResourceException: SQLException; - nested throwable: (java.sql.SQLException: No operations allowed after connection closed.)))) 
at org.jboss.ejb.plugins.TxInterceptorCMT.throwJBossException(TxInterceptorCMT.java:569) 
at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:506) 
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:361) 
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181) 
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168) 
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205) 
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:136) 
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:648) 
at org.jboss.ejb.Container.invoke(Container.java:954) 
at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) 
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 
at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:819) 
at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:420) 
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 sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) 
at sun.rmi.transport.Transport$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.rmi.transport.Transport.serviceCall(Unknown Source) 
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) 
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source)