Re: [BUGS] BUG #2444: XA Connections given by posgres driver has

Lists: pgsql-bugspgsql-jdbc
From: "Jagadish Prasath Ramu" <jagadish(dot)ramu(at)Sun(dot)COM>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #2444: XA Connections given by posgres driver has auto-commit value false by default
Date: 2006-05-19 10:09:24
Message-ID: 200605191009.k4JA9OjS042465@wwwmaster.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs pgsql-jdbc


The following bug has been logged online:

Bug reference: 2444
Logged by: Jagadish Prasath Ramu
Email address: jagadish(dot)ramu(at)Sun(dot)COM
PostgreSQL version: posgres driver
Operating system: Fedora Core 4, Solaris
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.

Thanks,
-Jagadish


From: Kris Jurka <books(at)ejurka(dot)com>
To: Jagadish Prasath Ramu <jagadish(dot)ramu(at)Sun(dot)COM>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: [BUGS] BUG #2444: XA Connections given by posgres driver has
Date: 2006-05-22 20:14:14
Message-ID: Pine.BSO.4.63.0605221510340.26500@leary2.csoft.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs pgsql-jdbc


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


From: Jagadish Prasath Ramu <Jagadish(dot)Ramu(at)Sun(dot)COM>
To: Kris Jurka <books(at)ejurka(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: [BUGS] BUG #2444: XA Connections given by posgres driver has
Date: 2006-05-23 06:14:34
Message-ID: 1148364874.4088.7.camel@sunonehpux1.india.sun.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs pgsql-jdbc

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:

> 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


From: "Chris Smith" <cdsmith(at)twu(dot)net>
To: <Jagadish(dot)Ramu(at)Sun(dot)COM>, "Kris Jurka" <books(at)ejurka(dot)com>
Cc: <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: [BUGS] BUG #2444: XA Connections given by posgres driver has
Date: 2006-05-23 06:58:03
Message-ID: 018c01c67e36$3dac65c0$c002a8c0@KALIO
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs pgsql-jdbc

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