我使用JBoss 4.0.4GA作为应用服务器,EJB2.x作为编码逻辑,MySQL5.1作为后端。我最近将jboss配置中的提交选项更改为"B",因为我们与EJB一起引入了一些JDBC查询。我的EJB代码反过来在MySql中调用一个存储过程,我使用CallableStatement来执行存储过程。我在MySQL中为表使用Innodb引擎,jboss数据源是使用的最简单的配置。但是,当我通过客户机执行EJB方法时,我会得到以下异常:
由: org.jboss.resource.connectionmanager.JBossLocalXAException:无法提交本地tx引起;-嵌套throwable:(org.jboss.resource.JBossResourceException: SQLException;- nested:(java.sql.SQLException:在连接关闭后不允许操作)。在org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource.commit(TxConnectionManager.java:912) at org.jboss.tm.TransactionImpl$Resource.commit(TransactionImpl.java:2253) at org.jboss.tm.TransactionImpl.commitResources(TransactionImpl.java:1784) at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:340) 29 由: org.jboss.resource.JBossResourceException: SQLException引起;-嵌套throwable:(java.sql.SQLException:在连接关闭后不允许进行操作。)在org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkException(BaseWrapperManagedConnection.java:636) at org.jboss.resource.adapter.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:73) at 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
发布于 2012-07-26 09:33:31
我解决了问题,这是存储过程权限的问题。数据源配置为没有存储过程权限的用户。在使用正确的权限进行测试之后,代码工作正常,事务处理也很好。我尝试使用正常的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) https://stackoverflow.com/questions/11651839
复制相似问题