geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jack Cai <greensi...@gmail.com>
Subject Re: Reply: Cannot using Geronimo to execute bean-managed transaction with oracle transaction more than once, but Glassfish does
Date Wed, 30 Dec 2009 03:44:50 GMT
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 <xuhb@tongtech.com> 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:david_jencks@yahoo.com]
> date: 2009/12/30 1:43
> receiver: user@geronimo.apache.org
> 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:xuhb@tongtech.com]
>> Date: 2009/12/29 12:53
>> Receiver: dev@geronimo.apache.org
>> CC: user@geronimo.apache.org
>> 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.WrapperNamedXAResource@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)
>>
>>
>>
>>
>>
>>
>
>
>
>

Mime
View raw message