1 22 package org.enhydra.jdbc.instantdb; 23 24 import org.enhydra.jdbc.standard.StandardXAConnection; 25 import org.enhydra.jdbc.standard.StandardXADataSource; 26 import org.enhydra.jdbc.standard.StandardXAStatefulConnection; 27 import org.enhydra.instantdb.jdbc.ConnectionExtensions; 28 29 import javax.transaction.xa.XAException ; 30 import javax.transaction.xa.Xid ; 31 import javax.transaction.xa.XAResource ; 32 import java.sql.SQLException ; 33 34 35 42 public final class IdbXAConnection extends StandardXAConnection { 43 44 47 public IdbXAConnection (StandardXADataSource dataSource, String user, String password) throws SQLException { 48 super (dataSource, user, password); } 50 51 58 public void start(Xid xid, int flags) throws XAException { 59 doStart (xid, flags); curCon.commitOnPrepare = false; ConnectionExtensions conExt 62 = (ConnectionExtensions)curCon.con; conExt.startGlobalTransaction (xid); curCon = null; con = null; } 67 68 70 73 public int prepare(Xid xid) throws XAException { 74 StandardXAStatefulConnection stateCon = checkPreparedState (xid); ConnectionExtensions con 76 = (ConnectionExtensions)stateCon.con; int status = con.prepare(); if (status == XA_RDONLY) { xaDataSource.freeConnection (xid, false); } return status; 82 } 83 84 88 94 public boolean isSameRM(XAResource xares) throws XAException { 95 if (super.isSameRM(xares)) { return true; } if (xares instanceof IdbXAConnection) { IdbXAConnection xac = (IdbXAConnection)xares; IdbXADataSource cmpds = (IdbXADataSource)xac.dataSource; IdbXADataSource ds = (IdbXADataSource)dataSource; if (ds.databaseId.equals (cmpds.databaseId)) { return true; } } return false; 107 } 108 109 } 110 | Popular Tags |