db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-960) Client xa prepare returns XA_OK instead of XA_RDONLY for a read only transaction
Date Fri, 17 Feb 2006 20:04:26 GMT
    [ http://issues.apache.org/jira/browse/DERBY-960?page=comments#action_12366843 ] 

Kathey Marsden commented on DERBY-960:
--------------------------------------

Checked this fix into 10.2
The test for this issue was checked in (accidentally) in patch2 of DERBY-435.
I will add an appropriate comment to that test.

Date: Fri Feb 17 11:44:47 2006
New Revision: 378613

URL: http://svn.apache.org/viewcvs?rev=378613&view=rev

Leaving this issue open for port to 10.1


> Client xa prepare returns XA_OK instead of  XA_RDONLY for a read only transaction
> ---------------------------------------------------------------------------------
>
>          Key: DERBY-960
>          URL: http://issues.apache.org/jira/browse/DERBY-960
>      Project: Derby
>         Type: Bug
>   Components: Network Client
>     Versions: 10.1.2.3, 10.1.3.0, 10.2.0.0, 10.1.2.2
>     Reporter: Kathey Marsden
>     Assignee: Kathey Marsden
>      Fix For: 10.2.0.0, 10.1.3.0, 10.1.2.3
>  Attachments: ReadOnlyTran.zip, derby960_preview.diff
>
> Client xa prepare returns XA_OK instead of  XA_RDONLY for a read only transaction
> The code below checks the return value of XaResource.prepare to decide whether to commit
the transaction.   The prepare return value is XA_OK ( 0)  for client when it should be XA_RDONLY(3)
> D>java ReadOnlyTran derbycli
> 10.2.0.0 alpha
> Apache Derby
> Apache Derby Network Client JDBC Driver
> table already exists
> ==>: 1
> XAResource.XA_RDONLY3
> XAResource.XA_OK0
> prp1 is: 0
> Exception in thread "main" org.apache.derby.client.am.XaException: XAER_NOTA : Error
executing a XAResource.commit(), Server returned XAER_NOTA
>         at org.apache.derby.client.net.NetXAResource.throwXAException(NetXAResource.java:728)
>         at org.apache.derby.client.net.NetXAResource.commit(NetXAResource.java:216)
>         at ReadOnlyTran.main(ReadOnlyTran.java:94)
> Caused by: org.apache.derby.client.am.SqlException: Error executing a XAResource.commit(),
Server returned XAER_NOTA
>         at org.apache.derby.client.net.NetXAResource.xaRetValErrorAccumSQL(NetXAResource.java:976)
>         at org.apache.derby.client.net.NetXAResource.commit(NetXAResource.java:204)
>         ... 1 more
> D>
> import java.sql.Connection;
> import java.sql.DatabaseMetaData;
> import java.sql.PreparedStatement;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.Statement;
> import javax.sql.XAConnection;
> import javax.transaction.xa.XAException;
> import javax.transaction.xa.XAResource;
> import javax.transaction.xa.Xid;
> import com.ibm.db2.jcc.DB2Xid;
> class ReadOnlyTran  
> {
>    
>     public static void main (String args [])throws Exception 
>     {
>     	//org.apache.derby.jdbc.ClientConnectionPoolDataSource ds = new org.apache.derby.jdbc.ClientConnectionPoolDataSource();
>     	org.apache.derby.jdbc.ClientXADataSource ds = new 
> 		org.apache.derby.jdbc.ClientXADataSource();
>     	//org.apache.derby.jdbc.EmbeddedXADataSource ds = new 
> 		//org.apache.derby.jdbc.EmbeddedXADataSource();
>     	Connection conn = null;
>     	ds.setDatabaseName("sample");
> 		ds.setTraceFile("trace.out");
>     	ds.setConnectionAttributes("create=true");
>          conn = ds.getConnection();
>         PreparedStatement ps1 = null;
>          try
>          {
>              DatabaseMetaData md = conn.getMetaData() ;
>              
> System.out.println(md.getDatabaseProductVersion());
>              System.out.println(md.getDatabaseProductName());
>              ps1 = conn.prepareStatement("CREATE TABLE TAB1(COL1 INT NOT NULL)");
>              ps1.executeUpdate();
>         	 System.out.println("done creating  table");
>              conn.commit ();
>          } catch (SQLException x)
>          {
>              System.out.println ("table already exists");
>          }                 
>         
>         XAConnection pc1 = ds.getXAConnection();
>         XAResource xar1 = pc1.getXAResource();
>         Xid xid1 = createXid(11);
>         xar1.start(xid1, XAResource.TMNOFLAGS);
>         Connection conn1 = pc1.getConnection();             
>         doSelect(conn1, 50);
> 		//doInsert(conn1);
>         conn1.close();
>         xar1.end(xid1, XAResource.TMSUCCESS);
>         int prp1 = xar1.prepare(xid1);
>         System.out.println("XAResource.XA_RDONLY" + 
> XAResource.XA_RDONLY);
>         System.out.println("XAResource.XA_OK" + 
> XAResource.XA_OK);
>         System.out.println("prp1 is: " + prp1);
>         // Commit transaction
>         if (prp1 == XAResource.XA_OK)
>            xar1.commit(xid1, false);
>         // Close physical connection
>         pc1.close();
>       }
>   
>     
>     private static void doSelect(Connection conn, int deptno) 
> throws SQLException 
>     {
>         Statement stmt = conn.createStatement();
>         ResultSet rset1 = stmt.executeQuery("select * from tab1");
>         while (rset1.next())
>         {
>         	System.out.println("==>: " + rset1.getString(1));
>         }
>         
>         stmt.close();
>         stmt = null;
>     }
> 	private static void doInsert(Connection conn) throws SQLException
> 	{
>         Statement stmt = conn.createStatement();
> 		stmt.executeUpdate("Insert into tab1 values(1)");
> 		stmt.close();
> 	}
>     
>     static Xid createXid(int bids) throws XAException {
>         byte[] gid = new byte[1];
>         gid[0] = (byte) 9;
>         byte[] bid = new byte[1];
>         bid[0] = (byte) bids;
>         byte[] gtrid = new byte[64];
>         byte[] bqual = new byte[64];
>         System.arraycopy(gid, 0, gtrid, 0, 1);
>         System.arraycopy(bid, 0, bqual, 0, 1);
>         Xid xid = new DB2Xid(0x1234, gtrid, bqual);
>         return xid;
>     }
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message