Yes, I am sure the first commit completed successfully; The test program has catch all the exception , and print it to console. The first time, there is no exception printed to the console, and the database is updated. And the next time, a Geronimo-exception printed;
Change code as your suggestion will be a better exception handler, but cannot resolve the problem. It also be first time transaction commit success. the next time transaction commit failed, and the transaction will be rollback; ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ------------------------- 发件人: Rex Wang [mailto:[email protected]] 发送时间: 2009年12月29日 14:54 收件人: [email protected] 主题: Re: Cannot using Geronimo to execute bean-managed transaction with oracle transaction more than once, but Glassfish does Are you sure the first commit completed successfully? could you modify you codes to: ... ut.commit(); } catch (Exception e) { ut.rollback(); e.printStackTrace(); } finally { conn.close(); } to see what happened? 2009/12/29 xuhongbo <[email protected]> Hi: When I using bean managed transaction with oracle-xa , I found that it cannot execute more than once; the first time, things is right and database is update; but if execute once again a oracle- xa-warning and a Geronimo exception occurs; the warning and exception is list at the end of this mail; The Geronimo Version I used is 2.1.4; and oracle version is 9i; I have use another app-server GlassFish test the same program, and it works well; My test program is list in the attachments: MyStatelessSessionBean.java is the ejb, and MyServlet is a servlet call the ejb; The oracle xa datasource 's plan is also list in attachments; I am not sure about if I miss configured the datasource some-where; but The datasource does works: I can test it and execute a query through the Geronimo's console; Although the oracle 's version is older, but I doesn't thinks the database is not compatible with Geronimo's XA process; To ensure this, I write a simple test case which use the Geronimo's Transaction Manager and Oralce's XA API directly; the simple test case works well; The simple test case is also list in the list; In the simple test case I doesn't use the UserTransaction but direct use the Geronimo's TransactionManager, because when debugging the my-application, I found the UserTransaction is provided by OpenEJB, and it just wrap the Geronimo's Transaction Manager; Finally , I guess if the tranql provided XADatasource is not compatible with my application. So I try the following calling sequence, but they both occurs same problem; 1:open-connection-->begin-trans-->do-update--> end-trans->close-conn 2:begin-trans-->open-connection-->do-update-->end-trans->close-conn; 3:begin-trans->open-connection-->do-update-->close-conn->end-trans; Now I have no idea about this problem, so I hope if anyone can help-me to check this problem Thanks for any-suggestion; =========================================================================== Orcla XA Warning is: 009-12-25 19:39:00,500 WARN [Transaction] Unable to enlist XAResource org.apache.geronimo.transaction.manager.wrappernamedxaresou...@1e7dc51, errorCode: -3 oracle.jdbc.xa.OracleXAException at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1157) at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:295) at org.apache.geronimo.transaction.manager.WrapperNamedXAResource.start(Wrapper NamedXAResource.java:86) at org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource(Trans actionImpl.java:209) at org.apache.geronimo.connector.outbound.TransactionEnlistingInterceptor.getCo nnection(TransactionEnlistingInterceptor.java:54) at org.apache.geronimo.connector.outbound.TransactionCachingInterceptor.getConn ection(TransactionCachingInterceptor.java:87) at org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.getConnec tion(ConnectionHandleInterceptor.java:43) ....... at java.lang.Thread.run(Unknown Source) Geronimo Exception is: javax.transaction.RollbackException: Unable to commit: transaction marked for rollback at org.apache.geronimo.transaction.manager.TransactionImpl.rollbackResourcesDur ingCommit(TransactionImpl.java:671) at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionIm pl.java:270) at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(Transa ctionManagerImpl.java:250) at org.apache.openejb.core.CoreUserTransaction.commit(CoreUserTransaction.java: 62) at org.apache.openejb.core.BaseContext$UserTransactionWrapper.commit(BaseContex t.java:194) at sampleear.MyStatelessSessionBean.sayHello(MyStatelessSessionBean.java:40) ...... at java.lang.Thread.run(Unknown Source)
