You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Phil Steitz (JIRA)" <ji...@apache.org> on 2006/09/18 04:54:26 UTC

[jira] Resolved: (DBCP-116) [dbcp] transactionIsolation, testOnBorrow and autoCommmit=false crashes for Oracle

     [ http://issues.apache.org/jira/browse/DBCP-116?page=all ]

Phil Steitz resolved DBCP-116.
------------------------------

    Resolution: Fixed

Patch applied.  Thanks!

> [dbcp] transactionIsolation,  testOnBorrow and autoCommmit=false crashes for Oracle
> -----------------------------------------------------------------------------------
>
>                 Key: DBCP-116
>                 URL: http://issues.apache.org/jira/browse/DBCP-116
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: Nightly Builds
>         Environment: Operating System: other
> Platform: Other
>            Reporter: Thomas Fischer
>             Fix For: 1.2.2
>
>         Attachments: patch_35591.txt, TestSerializableOracleConnection.java, TestSerializableOracleConnection.java
>
>
> I'm using dbcp nightly build 20050626 (i.e. COM-1666 is fixed) to work with a
> SharedPoolDataSource with an underlying oracle9i database and the 9.2.0.4 oracle
> jdbc driver.
> defaultTransactionIsolation is set to 8 (serializable), testOnBorrow is set to
> true and defaultAutoCommit is set to false. (as an aside, with the oracle 10g
> driver 10.1.0.4 the error also appears for defaultAutoCommit=true, but this is
> an oracle problem) 
> I retrieve a connection, commit it, and close it. The first time works fine. The
> second time while retrieving the connection, I get the ORA-01453: SET
> TRANSACTION must be first statement of transaction error in the method
> SharedPoolDataSource.setupDefaults upon execution of the line 215 :
> con.setTransactionIsolation(defaultTransactionIsolation);
> I have debugged the pool behaviour, extracted the jdbc commands and am able to
> reproduce the behaviour with the following code:
> Connection connection = DriverManager.getConnection(sid, user, password);
> connection.createStatement().execute("Select 1 from dual");
> connection.setAutoCommit(false);
> connection.setTransactionIsolation(
>     Connection.TRANSACTION_SERIALIZABLE);
> //connection.setReadOnly(false);  // not needed to get error
> connection.commit();
>             
> connection.createStatement().execute("Select 1 from dual");
> // connection.rollback(); // this would solve the problem
>                           // might be inserted into the validateObject()
>                           // method of KeyedCPDSConnectionFactory
> // connection.setAutoCommit(false); // not needed to get error
> connection.setTransactionIsolation(
>     Connection.TRANSACTION_SERIALIZABLE); // this causes the error
> I am not sure whether the rollback after the validation query fits into the
> general philosophy of dbcp. Before I have come to use dbcp, I had programmed my
> own pool and had done a rollback on every connection returned to the pool, in
> order not to hand out a connection with a started transaction. In my opinion,
> this is a good thing, but one might also argue against it because it eats
> performance.
> Another solution would be to reverse the validation query /
> setTransactionIsolation order, but it seems to me that this is very deep in the
> pool architecture.
> Still another solution would be to reset autocommit to true when a connection is
> returned into the pool, but personally I do not like this solution (it has no
> additional merit like the rollback solution).

-- 
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

        

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org