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
>
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? |