我使用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个
答案 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)