pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Assaf Arkin <arkin@exoffice.com>
To: Peter Mount <petermount@it.maidstone.gov.uk>
Cc: pgsql-interfaces@hub.org
Subject: Re: [INTERFACES] Transaction support in 6.5.3/JDBC
Date: Wed, 08 Dec 1999 11:41:02 -0800
Message-ID: <384EB44E.DCDEF1E9@exoffice.com> (raw)
References: <1B3D5E532D18D311861A00600865478C70BF1A@exchange1.nt.maidstone.gov.uk>

> PM: JDBC based code should never issue begin/commit/rollback commands,
> and should use the similarly named methods in Connection. This is
> because a JDBC driver could be issuing these statements internally, and
> it would be confused. With our driver, you could currently get away with
> it, but it's not guaranteed to stay that way.

Inside a transaction, the application should not even use
commit/rollback on the JDBC connection, only through the transaction
monitor API. This is easy to solve, I simply return a ClientConnection
wrapper that prevents that. But someone can still send a commit/rollback
statement directly through the JDBC driver.

What I'm more afraid of is some operation that will cause a
commit/rollback to occur, e.g. a failed update, a trigger or stored
procedure.


> PM: Hmmm, in theory if a transaction is in a dead state (ie: an SQL
> statement failed, so anything else is ignored until the rollback), there
> should be a message in the notify queue. Our JDBC driver keeps these in
> the warnings queue, so you could read them prior to calling commit()
> yourself.

Thanks I'll try to look that out.


I've minimized all the special requirements I need from the driver to
three methods calls:

1. enbleSQLTransactions -- prevents a commit/rollback from being
executed directly in SQL; you can never be too careful ;-)

2. prepare -- should return false if the transaction is read-only, true
if it will commit, throw an exception if it will rollback

3. isCriticalError -- should tell me if a critical error occured in the
connection and the connection is no longer useable

How do I detect no. 3? Is there are certain range of error codes, should
I just look at certain PSQLExceptions as being critial (e.g. all I/O
related errors)?

arkin

> 
> arkin
> 
> --
> ____________________________________________________________
> Assaf Arkin                               arkin@exoffice.com
> CTO                                  http://www.exoffice.com
> Exoffice, The ExoLab Company             tel: (650) 259-9796
> 
> ************
> 
> ************

-- 
____________________________________________________________
Assaf Arkin                               arkin@exoffice.com
CTO                                  http://www.exoffice.com
Exoffice, The ExoLab Company             tel: (650) 259-9796



view thread (13+ messages)  latest in thread

Message-ID: <384EB44E.DCDEF1E9@exoffice.com>
Permalink:  ../384EB44E.DCDEF1E9@exoffice.com/
Also on:    postgresql.org/message-id/384EB44E.DCDEF1E9@exoffice.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: arkin@exoffice.com, petermount@it.maidstone.gov.uk, pgsql-interfaces@hub.org
  Subject: Re: [INTERFACES] Transaction support in 6.5.3/JDBC
  In-Reply-To: <384EB44E.DCDEF1E9@exoffice.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox