Thread: Re: [BUGS] BUG #2444: XA Connections given by posgres driver has
Moving to -jdbc. On Fri, 19 May 2006, Jagadish Prasath Ramu wrote: > The following bug has been logged online: > > Bug reference: 2444 > Description: XA Connections given by posgres driver has auto-commit > value false by default > Details: > > Problem with PostgresDriver : postgresql-8.1-405.jdbc3.jar > > I am using the above driver to get an XA Connection and I found that > auto-commit value of it is false by default. > > Source : org/postgresql/xa/PGXAConnection.java > Constructor : > > PGXAConnection(BaseConnection conn) throws SQLException > { > super(conn, false); > this.conn = conn; > this.conn.setAutoCommit(false); > this.state = STATE_IDLE; > this.logger = conn.getLogger(); > } > > >> From JDBC Specification 3.0, Chapter 10.1.1 > Disabling AutoCommit mode : > > " The default is for auto-commit mode to be enabled when the Connection > object is > created. If the value of auto-commit is changed in the middle of a > transaction, the > current transaction is committed. It is an error to enable auto-commit for > a > connection participating in a distributed transaction, as described in > Chapter 12 > “Distributed Transactions”. " > > Chapter 12 > 12.4 Transaction Management : > "In contrast to the local case, the boundaries of a > distributed transaction must be controlled by an external transaction > manager that is > coordinating the work of multiple connections. For this reason, it is an > error for > applications to call any of the following Connection methods while they are > participating in a distributed transaction: > setAutoCommit(true) > commit > rollback > setSavepoint > The JDBC driver throws an SQLException if one of these operations is > attempted > on a connection that is participating in a distributed transaction. If the > connection is > later used for a local transaction, these operations are legal at that > point." > >> From these excerpts what I could understand is auto-commit for XA's > connection need to be true when created and auto-commit can not be set to > true when a transaction in progress. > I'm not sure what the purpose of this is. Why would you want a connection to be in autocommit = true when this is a condition you are explicitly not allowed to set yourself? Kris Jurka
Hi Kris,
I am trying to use this XA-Connection without any transaction context.
eg: I have a test case using 2 XA-Connections on 2 different DBs and DB-operations go fine.
As a part of the test, I need to check whether the data is actually is persisted.
In this case, I get a connection (XAConnection) from the datasource and do a query. This connection's auto-commit value is false.
According to the JDBC 3.0 Specification, auto-commit need to be true when created. [ my case ]
Only when the connection is taking part in a transaction, setting auto-commit value is not allowed.
Since I am using the connection without any transaction context, auto-commit need to be true in this case according to the specification.
Thanks,
-Jagadish
On Mon, 2006-05-22 at 15:14 -0500, Kris Jurka wrote:
I am trying to use this XA-Connection without any transaction context.
eg: I have a test case using 2 XA-Connections on 2 different DBs and DB-operations go fine.
As a part of the test, I need to check whether the data is actually is persisted.
In this case, I get a connection (XAConnection) from the datasource and do a query. This connection's auto-commit value is false.
According to the JDBC 3.0 Specification, auto-commit need to be true when created. [ my case ]
Only when the connection is taking part in a transaction, setting auto-commit value is not allowed.
Since I am using the connection without any transaction context, auto-commit need to be true in this case according to the specification.
Thanks,
-Jagadish
On Mon, 2006-05-22 at 15:14 -0500, Kris Jurka wrote:
Moving to -jdbc. On Fri, 19 May 2006, Jagadish Prasath Ramu wrote: > The following bug has been logged online: > > Bug reference: 2444 > Description: XA Connections given by posgres driver has auto-commit > value false by default > Details: > > Problem with PostgresDriver : postgresql-8.1-405.jdbc3.jar > > I am using the above driver to get an XA Connection and I found that > auto-commit value of it is false by default. > > Source : org/postgresql/xa/PGXAConnection.java > Constructor : > > PGXAConnection(BaseConnection conn) throws SQLException > { > super(conn, false); > this.conn = conn; > this.conn.setAutoCommit(false); > this.state = STATE_IDLE; > this.logger = conn.getLogger(); > } > > >> From JDBC Specification 3.0, Chapter 10.1.1 > Disabling AutoCommit mode : > > " The default is for auto-commit mode to be enabled when the Connection > object is > created. If the value of auto-commit is changed in the middle of a > transaction, the > current transaction is committed. It is an error to enable auto-commit for > a > connection participating in a distributed transaction, as described in > Chapter 12 > “Distributed Transactions”. " > > Chapter 12 > 12.4 Transaction Management : > "In contrast to the local case, the boundaries of a > distributed transaction must be controlled by an external transaction > manager that is > coordinating the work of multiple connections. For this reason, it is an > error for > applications to call any of the following Connection methods while they are > participating in a distributed transaction: > setAutoCommit(true) > commit > rollback > setSavepoint > The JDBC driver throws an SQLException if one of these operations is > attempted > on a connection that is participating in a distributed transaction. If the > connection is > later used for a local transaction, these operations are legal at that > point." > >> From these excerpts what I could understand is auto-commit for XA's > connection need to be true when created and auto-commit can not be set to > true when a transaction in progress. > I'm not sure what the purpose of this is. Why would you want a connection to be in autocommit = true when this is a condition you are explicitly not allowed to set yourself? Kris Jurka ---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq
Jagadish Prasath Ramu wrote: > In this case, I get a connection (XAConnection) from the datasource > and do a query. This connection's auto-commit value is false. > According to the JDBC 3.0 Specification, auto-commit need to be true > when created. [ my case ] > Only when the connection is taking part in a transaction, setting > auto-commit value is not allowed. > > Since I am using the connection without any transaction context, > auto-commit need to be true in this case according to the > specification. The auto-commit mode is specified to be ignored for any connection that is participating in a non-local transaction. Hence, it doesn't matter whether auto-commit is true or false in the situation you're talking about. The behavior is always as if auto-commit is false. It does seem, though, that the flag should be set to false in order to comply by-the-letter, as useless as that is. -- www.designacourse.com The Easiest Way To Train Anyone... Anywhere. Chris Smith - Lead Software Developer/Technical Trainer MindIQ Corporation