Re: Patch so Pooled Connections are PGConnections

Поиск
Список
Период
Сортировка
От Barry Lind
Тема Re: Patch so Pooled Connections are PGConnections
Дата
Msg-id 3E23A4B4.1040802@xythos.com
обсуждение исходный текст
Ответ на Patch so Pooled Connections are PGConnections  (Aaron Mulder <ammulder@alumni.princeton.edu>)
Список pgsql-jdbc
Aaron,

Patch applied to head.  I had problems applying the patch to the 7.3
branch.  If you would like it applied to 7.3, could you submit a new
diff against that branch?

thanks,
--Barry


Aaron Mulder wrote:
>     Here's a patch that demonstrates the problem in the test class and
> fixes it in the pooled connection class.  This makes all pooled
> connections implement PGConnection (in addition to java.sql.Connection),
> so if you use the PostgreSQL connection pools you can still use the
> PGConnection API.  Still won't help if you use the native Tomcat pools,
> but you can always use the PostgreSQL pools in Tomcat.
>
> Aaron
>
> On Fri, 3 Jan 2003, Aaron Mulder wrote:
>
>>    When you use a DataSource, the connection returned is not an
>>org.postgresql.PGConnection, so the ClassCastException would be expected.
>>The connection is usually wrapped (though I'd have to look at the Tomcat
>>impl to be sure) because the behavior is supposed to be different for
>>pooled connections (in particular, close, and often setAutoCommit).
>>    Now that I look at it, we could easily enough make the PostgreSQL
>>pooled connections implement PGConnection, and then you could just use the
>>PostgreSQL DataSource instead of the Tomcat DataSource.
>>
>>Aaron
>>
>>On Fri, 3 Jan 2003, Joao Filipe Placido wrote:
>>
>>>Hello list,
>>>
>>>I configured successfully a PostgreSQL 7.2.3 connection pool with JNDI
>>>DataSource following the Tomcat docs (v 4.1.12).
>>>But when I try to use the returned connection with the LargeObjectAPI,
>>>tomcat gives me a ClassCastException (runtime), in the following line:
>>>
>>>LargeObjectManager lobj =
>>>((org.postgresql.PGConnection)db).getLargeObjectAPI();
>>>
>>>I tried using pgjdbc2.jar, in which case instead of
>>>org.postgresql.PGConnection, it only works with org.postgresql.Connection.
>>>With pg73jdbc3.jar, and using org.postgresql.PGConnection, the same
>>>Exception occurs.
>>>I also tried with a compiled JDBC jar from the 7.3 sources, with no luck.
>>>
>>>I don't understand why the connection works with non-LargeObject SQL and
>>>fails here. I have the same jars working with the LargeObjectAPI without the
>>>Tomcat DBCP.
>>>Any help is appreciated. Has anyone successfully configured a tomcat DBCP
>>>with PostgresSQL and used LOs with it?
>>>
>>>Thank you,
>>>
>>>João Filipe Plácido
>>>
>>>
>>
>>
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 3: if posting/reading through Usenet, please send an appropriate
>>subscribe-nomail command to majordomo@postgresql.org so that your
>>message can get through to the mailing list cleanly
>>
>>
>>
>>------------------------------------------------------------------------
>>
>>Index: PooledConnectionImpl.java
>>===================================================================
>>RCS file:
/projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc2/optional/PooledConnectionImpl.java,v
>>retrieving revision 1.5
>>diff -c -r1.5 PooledConnectionImpl.java
>>*** PooledConnectionImpl.java    2002/12/20 14:10:34    1.5
>>--- PooledConnectionImpl.java    2003/01/03 19:59:26
>>***************
>>*** 4,9 ****
>>--- 4,10 ----
>>  import java.sql.*;
>>  import java.util.*;
>>  import java.lang.reflect.*;
>>+ import org.postgresql.PGConnection;
>>
>>  /**
>>   * PostgreSQL implementation of the PooledConnection interface.  This shouldn't
>>***************
>>*** 114,120 ****
>>          con.setAutoCommit(autoCommit);
>>          ConnectionHandler handler = new ConnectionHandler(con);
>>          last = handler;
>>!         Connection con = (Connection)Proxy.newProxyInstance(getClass().getClassLoader(), new
Class[]{Connection.class},handler); 
>>          last.setProxy(con);
>>          return con;
>>      }
>>--- 115,121 ----
>>          con.setAutoCommit(autoCommit);
>>          ConnectionHandler handler = new ConnectionHandler(con);
>>          last = handler;
>>!         Connection con = (Connection)Proxy.newProxyInstance(getClass().getClassLoader(), new
Class[]{Connection.class,PGConnection.class}, handler); 
>>          last.setProxy(con);
>>          return con;
>>      }
>>***************
>>*** 213,219 ****
>>                                      throw e.getTargetException();
>>                                  }
>>              }
>>!             // All the rest is from the Connection interface
>>              if (method.getName().equals("isClosed"))
>>              {
>>                  return con == null ? Boolean.TRUE : Boolean.FALSE;
>>--- 214,220 ----
>>                                      throw e.getTargetException();
>>                                  }
>>              }
>>!             // All the rest is from the Connection or PGConnection interface
>>              if (method.getName().equals("isClosed"))
>>              {
>>                  return con == null ? Boolean.TRUE : Boolean.FALSE;
>>
>>
>>------------------------------------------------------------------------
>>
>>Index: BaseDataSourceTest.java
>>===================================================================
>>RCS file:
/projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/test/jdbc2/optional/BaseDataSourceTest.java,v
>>retrieving revision 1.4
>>diff -c -r1.4 BaseDataSourceTest.java
>>*** BaseDataSourceTest.java    2002/09/25 07:01:30    1.4
>>--- BaseDataSourceTest.java    2003/01/03 20:00:09
>>***************
>>*** 3,8 ****
>>--- 3,9 ----
>>  import junit.framework.TestCase;
>>  import org.postgresql.test.TestUtil;
>>  import org.postgresql.jdbc2.optional.BaseDataSource;
>>+ import org.postgresql.PGConnection;
>>
>>  import java.sql.*;
>>  import java.util.*;
>>***************
>>*** 178,183 ****
>>--- 179,202 ----
>>              fail(e.getMessage());
>>          }
>>      }
>>+
>>+     /**
>>+      * Test to make sure that PGConnection methods can be called on the
>>+      * pooled Connection.
>>+      */
>>+     public void testPGConnection()
>>+     {
>>+         try
>>+         {
>>+             con = getDataSourceConnection();
>>+             ((PGConnection)con).getEncoding().name();
>>+             con.close();
>>+         }
>>+         catch (Exception e)
>>+         {
>>+             fail("Unable to call PGConnection method on pooled connection due to "+e.getClass().getName()+"
("+e.getMessage()+")");
>>+         }
>>+     }
>>
>>      /**
>>       * Uses the mini-JNDI implementation for testing purposes
>>
>>
>>------------------------------------------------------------------------
>>
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 6: Have you searched our list archives?
>>
>>http://archives.postgresql.org



В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Barry Lind
Дата:
Сообщение: Re: JDBC MetaData getImportedKeys query
Следующее
От: "Sziklai Gabor"
Дата:
Сообщение: Re: Warning on transaction commit