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:x...@tongtech.com]
Date: 2009/12/29 12:53
Receiver: d...@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.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)