Re: XAResource implementation - Mailing list pgsql-jdbc

From joël Winteregg
Subject Re: XAResource implementation
Date
Msg-id 1194985411.5533.6.camel@hatman
Whole thread Raw
In response to Re: XAResource implementation  (Heikki Linnakangas <heikki@enterprisedb.com>)
Responses Re: XAResource implementation
List pgsql-jdbc
Hello Heikki,

Many thanks for these informations !

> Patch attached. I also added a test for this in the test suite.

Really cool !

> Can you check that this fixes the issue for you, please? I can send you
> a patched jar if you don't have build environment, let me know if you
> need it.

Yes, that would be great (easier) to have it as a patched jar. Then, I will provide you a feedback about its behavior
inmy application...  

Many many thanks for your support !

Joël


On Tue, 2007-11-13 at 16:51 +0000, Heikki Linnakangas wrote:
> joël Winteregg wrote:
> > Many thanks for your answer and for the time you took to do some
> > testing ! As you can see I put Ludovic Orban as Cc because he is the BTM
> > developer and he seems to be interested to this issue too...
> >
> >> Hmm. I downloaded the BTM newUserDemo.zip and modified it to run with
> >> Postgres, and to run two queries in same transaction. Works for me.
> >>
> >
> > Ah Yes, you're right, your transaction just looks perfect !
> >
> >> Attached is the modified Test.java I used. To run:
> >> 0. Download newUserDemo.zip from
> >> http://docs.codehaus.org/display/BTM/NewUserGuide
> >> 1. Put postgresql.jar in newUserDemo/lib
> >> 2. Copy the attached Test.java to newUserDemo/src/jtatest
> >> 3. Modify database/username/password in Test.java if necessary
> >> 4. Run the CREATE TABLE from derby-create.sql
> >>
> >> Here's what I get in the Postgres log, with log_statements='all':
> >>
> >> LOG:  execute <unnamed>: SELECT gid FROM pg_prepared_xacts
> >> LOG:  execute S_1: BEGIN
> >> LOG:  execute <unnamed>: insert into messages(content) values ($1)
> >> DETAIL:  parameters: $1 = 'hello, world!'
> >> LOG:  execute S_2: COMMIT
> >> LOG:  execute S_1: BEGIN
> >> LOG:  execute <unnamed>: select content from messages
> >> LOG:  execute <unnamed>: select content from messages
> >> LOG:  execute S_2: COMMIT
> >
> > On my side, I tryed the following example:
> > http://docs.codehaus.org/download/attachments/9240687/HibernateBTM.zip?version=2
>
> Ok, I downloaded and installed that as well, and saw similar results.
>
> It looks like there is indeed a bug in the Postgres driver. I believe it
> was introduced by the recent changes to keep the connection in
> autocommit mode when no XA-transaction is in progress.
>
> It's this call sequence that borks it up:
>
> xares.start()
> conn = xares.getConnection()
> // do stuff
> conn.close();
> conn = xares.getConnection()
> // do more stuff
> xares.end()
> xares.commit()
>
> The 2nd getConnection call inadvertently commits the transaction, and
> opens another one.
>
> Patch attached. I also added a test for this in the test suite.
>
> Can you check that this fixes the issue for you, please? I can send you
> a patched jar if you don't have build environment, let me know if you
> need it.
>


pgsql-jdbc by date:

Previous
From: Kris Jurka
Date:
Subject: Re: XAResource implementation
Next
From: Kris Jurka
Date:
Subject: Re: XAResource implementation