Re: It is safe remenber current Isolation level in AbstractJdbc2Connection?

From: Maciek Sakrejda <msakrejda(at)truviso(dot)com>
To: Ader Javier <javierader(at)gmail(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: It is safe remenber current Isolation level in AbstractJdbc2Connection?
Date: 2010-04-11 04:06:10
Message-ID: h2w895e58dd1004102106g11ace8e6m421697d150c75ebc@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

The one problem I see is that an explicit "SET TRANSACTION
SERIALIZABLE" through a plain query will foil your scheme, but given
that ReadOnly is already handled that way, this may be a moot point...
---
Maciek Sakrejda | Software Engineer | Truviso

1065 E. Hillsdale Blvd., Suite 230
Foster City, CA 94404
(650) 242-3500 Main
(650) 242-3501 F
www.truviso.com

On Sat, Apr 10, 2010 at 8:41 PM, Ader Javier <javierader(at)gmail(dot)com> wrote:
> Hi and sorry by my English. I have a software that checks the Isolation
>  level before create "every" PreparedStatement over a Connection (there
> is a pool of connections from we pick one). Some like this:
>  if( connection.getTransactionIsolation() !=
> Connection.TRANSACTION_READ_COMMITTED ) {
>                    connection.setTransactionIsolation(
> Connection.TRANSACTION_READ_COMMITTED );
>                }
>
> ....
> PreparedStatement stmt = connection.createPreparedStatement(....)
> return stmt;
>
> My problem is that AbstractJdbc2Connection.getTransactionIsolation()
> access the server ever and don't remember the last level used, so It's
> safe change getTransactionIsolation() and setTransactionIsolation(level)
> for avoid unnecessary access? That's my idea
> public abstract class AbstractJdbc2Connection implements BaseConnection
> {
> ....
> //cached Isolation level
> private Integer level = null;
> ....
> public int getTransactionIsolation() throws SQLException
> {
> checkClosed();
> //new : avoid access if there is one previous
> if (this.level != null) return this.level.intValue();
>
> ....
> ....
>
> level = level.toUpperCase(Locale.US);
> // mod: caching before return return
> if (level.indexOf("READ COMMITTED") != -1)
>  this.level = new Integer(Connection.TRANSACTION_READ_COMMITTED);
> if (level.indexOf("READ UNCOMMITTED") != -1)
>  this.level= new Integer(Connection.TRANSACTION_READ_UNCOMMITTED);
> if (level.indexOf("REPEATABLE READ") != -1)
>  this.level = new Integer(Connection.TRANSACTION_REPEATABLE_READ)
> if (level.indexOf("SERIALIZABLE") != -1)
>  this.level = new Integer(Connection.TRANSACTION_SERIALIZABLE);
>
> if (this.level != null)
>  return this.level.valueInt();
>
> this.level = new Integer(Connection.TRANSACTION_READ_COMMITTED); // Best
> guess
> return this.level.valueInt();
> }
>
> public void setTransactionIsolation(int level) throws SQLException
> {
> ...
>
> //new: caching before return
> this.level = new Integer(level);
> }
>
> By the way, property "read only" is managed in this way (see
> AbstractJdbc2Connection.getReadOnly() and
> AbstractJdbc2Connection.setReadOnly(boolean).
>
> Thanks!
> Ader Javier
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Rafael Felix 2010-04-12 11:45:49 Re: Migration to Hibernate 3.5 final
Previous Message Ader Javier 2010-04-11 03:41:07 It is safe remenber current Isolation level in AbstractJdbc2Connection?