Hi David, 
    Below is the stack trance: 
2010-08-12 09:21:23,585 WARN  [Transaction] Error ending association for 
XAResource 
org.apache.geronimo.transaction.manager.wrappernamedxaresou...@1e77734; 
transaction will roll back. XA error code: 100
org.apache.derby.client.am.XaException: XA_RBROLLBACK : Error executing a 
XAResource.end(), server returned XA_RBROLLBACK.
at org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
at org.apache.derby.client.net.NetXAResource.end(Unknown Source)
at 
org.apache.geronimo.transaction.manager.WrapperNamedXAResource.end(WrapperNamedXAResource.java:53)
at 
org.apache.geronimo.transaction.manager.TransactionImpl.endResources(TransactionImpl.java:570)
at 
org.apache.geronimo.transaction.manager.TransactionImpl.endResources(TransactionImpl.java:549)
at 
org.apache.geronimo.transaction.manager.TransactionImpl.rollback(TransactionImpl.java:480)
at 
org.apache.geronimo.transaction.manager.TransactionManagerImpl.rollback(TransactionManagerImpl.java:265)
at 
org.apache.geronimo.transaction.GeronimoUserTransaction.rollback(GeronimoUserTransaction.java:74)
at org.apache.geronimo.sample.servlet.DoTransfer.doPost(DoTransfer.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
at 
org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:700)
at 
org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
at 
org.apache.geronimo.tomcat.valve.ProtectedTargetValve.invoke(ProtectedTargetValve.java:53)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:146)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:402)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:254)
at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:267)
at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:245)
at 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:260)
at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214)
at 
org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:344)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.derby.client.am.SqlException: Error executing a 
XAResource.end(), server returned XA_RBROLLBACK.
at org.apache.derby.client.net.NetXAResource.xaRetValErrorAccumSQL(Unknown 
Source)
... 30 more

Thanks!


2010-08-12 



lilisacat 



发件人: David Jencks 
发送时间: 2010-08-12  00:44:04 
收件人: dev 
抄送: 
主题: Re: XA_RBROLLBACK Exception when using Derby in transaction.roolback() 
 
You should be able to use two datasources on one database.  It's a bit odd but 
we should be able to handle it.  It's more plausible to get in this situation 
with a jms provider where you have inbound and outbound messaging, geronimo 
will treat the inbound XAResource and outbound XAResource as different.


It's possible that this is affected by whether what derby returns from 
isSameRM.  



I suspect this is from the second branch, derby is telling the tm that the tx 
has already been rolled back from the first branch.


It would be a lot easier to investigate this if you could provide a complete 
exception stack trace.


thanks!
david jencks


On Aug 11, 2010, at 8:30 AM, lilisacat wrote:


I use
DataSourceDefinition(name="java:app/SHAcc") link to 
url="jdbc:derby://localhost:1527/SHAcc",
DataSourceDefinition(name="java:app/BJAcc")link to another 
url="jdbc:derby://localhost:1527/BJAcc",
so they point to two different databases.
    The transaction can commit correctly.

    The problem appears when I call the transaction.setRollBackOnly() method, 
transaction will rollback in fact,
but the server say: 
org.apache.derby.client.am.XaException: XA_RBROLLBACK : Error executing a 
XAResource.end(), server returned XA_RBROLLBACK

2010-08-11



lilisacat



发件人: sghayal
发送时间: 2010-08-11  21:03:11
收件人: dev
抄送:
主题: Re: XA_RBROLLBACK Exception when using Derby in transaction.roolback()
U r using wrong url. Both the url point to same database.

This is what seems to be happening. A single transaction has been started which 
is being committed twice.

If using xa u need two physically different databases.

Hope this helps.

Cheers,

Sandip
Sent from my “contract free” BlackBerry® smartphone on the WIND network.



From: "lilisacat" <[email protected]>
Date: Wed, 11 Aug 2010 15:15:41 +0800
To: dev<[email protected]>
ReplyTo: [email protected]
Subject: XA_RBROLLBACK Exception when using Derby in transaction.roolback()


Hi,
    I encournter a problem when run the app in the G-3.0-SANPSHOT.
    In the app, I used Datasource DS-A and Datasource DS-B to link two derby 
database.
If UserTransaction.rollback() called, the server occured error:
org.apache.derby.client.am.XaException: XA_RBROLLBACK : Error executing a 
XAResource.end(), server returned XA_RBROLLBACK.
   
Here is the details of two Datasource:
//DataSourceSH
@DataSourceDefinition(name="java:app/SHAcc",
   className="org.apache.derby.jdbc.ClientXADataSource",
   url="jdbc:derby://localhost:1527/SHAcc",
   user="system",
   databaseName="SHAcc",
   transactional=true,
   maxPoolSize=10,
   properties = {"createDatabase = create"})
//DataSourceBJ
@DataSourceDefinition(name="java:app/BJAcc",
   className="org.apache.derby.jdbc.ClientXADataSource",
   url="jdbc:derby://localhost:1527/BJAcc",
   user="system",
   databaseName="BJAcc",
   transactional=true,
   maxPoolSize=10,
   properties = {"createDatabase = create"})

In the Servlet, I used two datasources as following:
Context initContext = new InitialContext();
tx = (UserTransaction)initContext.lookup("java:comp/UserTransaction");
// Start a transaction
// First, use DataSourceSH
ds = (javax.sql.DataSource) initContext.lookup("java:app/SHAcc");
//get connection with database: SHAcc
//do some update on database: SHAcc
if(failFlag)
            {tx.setRollBackOnly();}
// Second, use DataSourceBJ 
ds = (javax.sql.DataSource) initContext.lookup("java:app/BJAcc");
//get connection with database: BJAcc
//do some update on database: BJAcc
// commit all the operations
tx.commit();
}
        catch(Exception e){
if(tx!=null){
try{
// rollback the operations
tx.rollback();
System.out.println("catch: roll back success.");}
catch(Exception e1){
System.out.println("catch: roll back fail.");}
}
System.out.println("catch: " + e.getClass() + "; " + e.getMessage()+"");
}......

    I have no idea why Error executing a XAResource.end() if tx.rollback() 
happens?

 Thanks !
2010-08-11



Lisa

Reply via email to