Hi Jack Cai: I have tried, the "tranql-connector-oracle-local" is ok, but it doesnt use xa transaction in jta, and use a faked Local-XAResource instead of real oracle-xa-resource;
I am sorry to mis-understand your means and give the run-time class name in my previous reply; The error occurred program is just using " tranql-connector-oracle-xa" Additionally, I have try another Mysql database and using " tranql-connector-mysql-xa" do real xa transaction. It works well. So my mind changed, maybe there is something not compatible with oracle 9i database; In my original mail, I have post a very simple program which use the Geronimo Transaction Manager and Oracle XA API directly, this works well; Because tranql resource adaptor is a very simple wrapper , Geronimo does additional things to wrap the database connection (etc control pooling, xa-resource wrap, xa-resource cache for transaction-manager ...) , so I am wondering if there is some other un-excepted database operation has been done and cause this problem? for convenience I post the simple program again. If we only concern database operation, does this simple program done exactly like the Geronimo done ? Or it doesn't , Geronimo do additional things... maybe the difference will be the real reason cause the problem; I have tracked at runtime, but unfortunately has not find some difference yet... Thanks a lot xuhongbo -----origin----- sender: Jack Cai [mailto:[email protected]] date: 2009/12/30 11:45 receiver: [email protected] subject: Re: Reply: Cannot using Geronimo to execute bean-managed transaction with oracle transaction more than once, but Glassfish does Can you try to use the tranql-connector-oracle-xa or tranql-connector-oracle-local to do the test? -Jack On Wed, Dec 30, 2009 at 11:26 AM, xuhongbo <[email protected]> wrote: > >>>In the future it would be great if you could only post to one mailing >>>list. > Thanks, I know > >>>I'm not sure what is wrong yet, however you should never try to set >>>the autocommit state of a connection that is enlisted in a jta >>>transaction. Enlisting and delisting the XAConnection will result in >>>the autocommit being dealt with properly. The value from >>>getAutoCommit may or may not be meaningful in a jta transaction. >>>Outside a jta transaction the autocommit state defaults to true. I'm >>>quite surprised you didn't get a more informative error. > > Yes you are right, auto commit has no means for jta connection and cannot be > set to true; here I just set auto commit to false, so a jta connection > should just omit it; > But the surprise thing is if I doesn't affect auto commit state(in the > program, just comment the statement "setAutocommit(false)"), when execute > database operation, a "ORA-02089: COMMIT ..." exception will be throwed by > oracle's database driver; it looks like the Geronimo does a wrong things > "commit on the connection when execute database operation"; and this should > only occurs on non-jta connection, because only no-jta connection will set > auto commit default to true. > >>>One important piece of information that I don't see is which tranql >>>wrapper you used to deploy your datasource. > > The datasource is org.tranql.connector.jdbc.DataSource. And it use a a > managed-connection factory " org.tranql.connector.oracle.XAMCF" to open > connection; And the managed-connection factory use a oracle's xa datasource > (oracle.jdbc.xa.client.OracleXADataSource); > > By the way , I haven't ever post a trivial problem I have meet when I deploy > the Oracle-XA data source. The trivial thing is: I must change the deploy > plan created by Geronimo's web manage console tools, delete the empty > property "TNSEntryName" and manually deploy it; because this is the oracle9i > database driver's question --- "a empty string value(not a null value) set > to TNSEntryName" will cause oracle9i's database driver to omit the other > property (etc serverName, serviceName ...) and cannot establish a connect ; > I thinks this should have no means to the transaction commit failure; but > maybe it would give some other useful things help to find out the reason. > > Thanks a lot > xuhongbo > > -----origin ----- > sender: David Jencks [mailto:[email protected]] > date: 2009/12/30 1:43 > receiver: [email protected] > subject: Re: Reply: Cannot using Geronimo to execute bean-managed > transaction with oracle transaction more than once, but Glassfish does > > In the future it would be great if you could only post to one mailing > list. > > I'm not sure what is wrong yet, however you should never try to set > the autocommit state of a connection that is enlisted in a jta > transaction. Enlisting and delisting the XAConnection will result in > the autocommit being dealt with properly. The value from > getAutoCommit may or may not be meaningful in a jta transaction. > Outside a jta transaction the autocommit state defaults to true. I'm > quite surprised you didn't get a more informative error. > > One important piece of information that I don't see is which tranql > wrapper you used to deploy your datasource. > > thanks > david jencks > > On Dec 29, 2009, at 3:48 AM, xuhongbo wrote: > >> Hi: >> Yet I haven't find the real reason , I have noticed another thing >> about the problem; >> The original test program will throw exception while transaction >> commit; but if I comment the statement >> "connection.setAutoCommit(false); ". >> the exception will throws while execute prepare statement; and >> exception >> changed as "ORA-02089: COMMIT doesn't allowed in sub transaction" >> which >> raised by oracle's driver; >> It seems the connection 's auto commit is default set to true; so I >> am wondering while secondly execute the trasaction , a no- >> transaction data >> source (not a transactional-datasource) is returned? >> >> -----origin----- >> Sender: xuhongbo [mailto:[email protected]] >> Date: 2009/12/29 12:53 >> Receiver: [email protected] >> CC: [email protected] >> Subject: Cannot using Geronimo to execute bean-managed transaction >> with >> oracle transaction more than once, but Glassfish does >> >> 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) >> >> >> >> >> >> > > > >
