/ / c3p0 pooling não está funcionando (com hibernate e uma fonte de dados, no tomcat) - java, hibernate, tomcat, c3p0, pooling

c3p0 pooling não está funcionando (com hibernate e uma fonte de dados, no tomcat) - java, hibernate, tomcat, c3p0, pooling

Temos um aplicativo da web java em execução no tomcat 6, que está chamando um jar por persistência. Este jar está localizado na pasta lib do tomcat e usa uma origem de dados do tomcat:

<Resource name="jdbc/mydatasource"
auth="Container"
type="javax.sql.DataSource"
username="USER"
password="PASSWORD"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://HOST:5432/DATABASE"/>

O jar é o binário de um projeto java, que usa o hibernate 3.5.6-Final para ORM. A configuração do hibernate é a seguinte:

    <property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.connection.datasource">java:jdbc/mydatasource</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

No início, não incluímos o pacote hibernate-c3p0 no aplicativo, portanto as configurações de c3p0 não foram usadas. E todo o aplicativo funciona bem assim.

Adicionamos o pacote hibernate-c3p0, para permitir um melhor gerenciamento de pool. Então este pacote agora está embutido no jar para persistência.

Mas agora temos esse erro (aparece depois de cada inicialização, quando a aplicação weba tenta recuperar dados do frasco de persistência):

[Task-Thread-for-com.mchange.v2.async.ThreadPerTaskAsynchronousRunner @ eafa5f] 13 : 46: 22 WARN - BasicResourcePool $ AcquireTask: () com.mchange.v2.resourcepool.Basi cResourcePool $ AcquireTask @ b321c1 - Tentativa de aquisição falhou !!! Limpando o pendi ng adquire. Ao tentar adquirir um novo recurso necessário, não conseguimos ter sucesso mais do que o número máximo de tentativas de aquisição permitidas (30). Último acquisi exceção de tentativa de tentativa: java.lang.NullPointerException em sun.jdbc.odbc.JdbcOdbcDriver.getProtocol (JdbcOdbcDriver.java:507) em sun.jdbc.odbc.JdbcOdbcDriver.knownURL (JdbcOdbcDriver.java:476) em sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL (JdbcOdbcDriver.java:307) em java.sql.DriverManager.getDriver (DriverManager.java:253) em com.mchange.v2.c3p0.DriverManagerDataSource.driver (DriverManagerDataS ource.java:224) em com.mchange.v2.c3p0.DriverManagerDataSource.getConnection (DriverManag erDataSource.java:120) em com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnecti em (WrapperConnectionPoolDataSource.java:143) em com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnecti em (WrapperConnectionPoolDataSource.java:132) em com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnectionRe sourcePoolManager.acquireResource (C3P0PooledConnectionPool.java:137) em com.mchange.v2.resourcepool.BasicResourcePool.doAcquire (BasicResource Pool.java: 1014) em com.mchange.v2.resourcepool.BasicResourcePool.access $ 800 (BasicResourc ePool.java:32) em com.mchange.v2.resourcepool.BasicResourcePool $ AcquireTask.run (BasicRe sourcePool.java:1810) em com.mchange.v2.async.ThreadPerTaskAsynchronousRunner $ TaskThread.run (T hreadPerTaskAsynchronousRunner.java:255)

Isso parece errado porque o driver Ojdbc parece ser usado em vez do driver postgresql definido na fonte de dados.

Você sabe o que pode fazer com que esse erro apareça e como resolvê-lo?

Eu tentei coisas diferentes na configuração de hibernação, que encontrei no stackoverflow e fóruns diferentes, que não resolvem o problema:

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="driverClass">org.postgresql.Driver</property>
<property name="hibernate.c3p0.driverClass">org.postgresql.Driver</property>

Preciso precisar que só temos sob nosso controle o jar usado para persistência e a instalação do tomcat. Não podemos modificar o aplicativo da web que está chamando o jar.

Respostas:

1 para resposta № 1

Talvez seu aplicativo não esteja indo para um Tomcatfonte de dados configurada em tudo, está apenas trabalhando através do modo de hibernação? Você já tentou pular o Resource XML (que não é certo para um DataSource c3p0) e apenas configurar o hibernate para c3p0?

<!-- add these -->
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://HOST:5432/DATABASE</property>
<property name="hibernate.connection.username">USER</property>
<property name="hibernate.connection.password">PASSWORD</property>

<!-- same as before -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

<!-- REMOVE THIS! -->
<!-- <property name="hibernate.connection.datasource">java:jdbc/mydatasource</property> -->