--- Dasarath Weeratunge <[EMAIL PROTECTED]>写道:
> keep on forgetting to send replies to the list...
> 
> ----- Forwarded message from Dasarath Weeratunge <[EMAIL PROTECTED]> -----
>     Date: Sun, 12 Feb 2006 14:11:35 -0500
>     From: Dasarath Weeratunge <[EMAIL PROTECTED]>
> Reply-To: Dasarath Weeratunge <[EMAIL PROTECTED]>
>  Subject: Re: MySQL's XA problem
>       To: Jack Wang <[EMAIL PROTECTED]>
> 
> Quoting Jack Wang <[EMAIL PROTECTED]>:
>       
> >     
> > The java code (JOTM example):
> > ========================================================
> > UserTransaction ut = null;
> > try{
> >     Context ctx = new InitialContext();
> >     MysqlXADataSource xaDs =
> > (MysqlXADataSource)ctx.lookup("java:comp/env/jdbc/myXADB");
> >     ut = (UserTransaction)ctx.lookup("java:comp/env/UserTransaction");
> 
> How did u obtain this UserTransaction Object? It should come from the 
> Geronimo 
> TM object instantiated by Bridge.
> 

   Hi, Dasarath. Thanks you. I come back. 

   This UserTransaction Object is obtained from Tomcat 5.5 in which I have 
configured
UserTransaction with JOTM . In the non ws environment, the ut controls the db 
operation correctly
with ut.rollback() or ut.commit(), i.e. Now I can do XA operation in a jsp or a 
java bean. 

   Current situation is that I can get the not null local tm, but the local tx 
is null from this
tm regardless I use JOTM's tm or Bridge's tm. So I can not enlist the 
XAResource to the tx. So in
the ws environment, I can call the ws by kandula, but the wstm.rollback() did 
not effect on the ws
side's database. 

    So how can I get the correct tx to enlist the XAResource ? 
        
    p.s. After I get the XADataSource, I have set the tm to xaDs. If I commit 
the ut, the database
will be effected though I use wstm.rollback() in the client side.
-----------------------------------------------
// Get tx
TransactionManager tm = jotm.getTransactionManager();
//or
TransactionManager tm = o.a.k.g.Bridge.getInstance().getTM();
javax.transaction.Transaction tx = tm.getTransaction();   <== NULL, Ooops

// Get xaRes
XADataSource xaDs = (XADataSource)ctx.lookup("java:comp/env/jdbc/myXADB");
// tm <--> xaDs
((StandardXADataSource)xaDs).setTransactionManager(tm);
XAConnection xCon = xaDs.getXAConnection("root", "password");
XAResource xRes = xCon.getXAResource();

// Here should add tx.enlistResource(xRes), but tx is null

// Following is the db operation ...
java.sql.Connection conn = xCon.getConnection();
-----------------------------------------------

> 
> 
> Here we go once again. Please don't commit the tx in your code. The tx will 
> be 
> started and commited when you terminate your distributed (ws-at) tx using 
> wa-at 
> Completion protocol. If you want to rollback your tx, you may do so however. 
> Even then it is better to mark the tx as "RollbackOnly".
> 
> I will give u some steps later on.
> 
> --dasarath

    Yes. So I should add try catch in the ws side. If exception occurs, in the 
server side, I
should mark the ut setRollbackOnly(). Kandula will automatically detect this 
exception, and
rollback the whole wsat. Is it right ?






Wang Jun


        

        
                
___________________________________________________________ 
雅虎1G免费邮箱百分百防垃圾信 
http://cn.mail.yahoo.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to