2012-07-25 90 views
0

我使用JBoss 4.0.4 GA作为应用服务器和EJB 2.x的编码逻辑和MySQL 5.1中作为后端。我最近改变了提交选项在JBoss中配置“B”,因为我们推出了一些JDBC与EJB一起查询。我的EJB代码inturn调用MySql中的存储过程,并使用CallableStatement执行存储过程。我在MySQL中使用Innodb引擎作为表,而jboss数据源是使用最简单的配置。但是,当我通过客户端执行的EJB方法,我得到以下异常:JBoss的事务回滚使用JDBC

产生的原因:org.jboss.resource.connectionmanager.JBossLocalXAException: 不能犯本地TX; - 嵌套抛出: (org.jboss.resource.JBossResourceException:的SQLException; - 嵌套 抛出:(值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.JBossResourceExce ption:SQLException; - 嵌套抛出:(值java.sql.SQLException:无操作后允许连接 关闭。)在 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: 连接关闭后,不允许任何操作。 at 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

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

有异常“空”这是我没有跟过去后提交的长堆栈跟踪一个线索,但对我提出的上述相同的数据源连接。感谢任何试图帮助的人。我希望这可能会对其他人在未来,对我来说是奇怪的错误。

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)