tudo bom pessoal
tenho uma aplicação rodando no JBoss 4.2.3 e notei que apenas setando os valores como min_size, max_statements ou max_size do C3P0 (c3p0-0.9.1.2.jar) não foram suficientes para ligá-lo (ele realmente é automaticamente ligado como diz a documentação do Hibernate?)
só quando eu ajustei a propriedade hibernate.connection.provider_class com o valor org.hibernate.connection.C3P0ConnectionProvider é que ví o C3P0 ser inicializado no log do JBoss
18:05:07,766 INFO [ConnectionProviderFactory] Initializing connection provider: org.hibernate.connection.C3P0ConnectionProvider
18:05:07,775 INFO [C3P0ConnectionProvider] C3P0 using driver: null at URL: null
18:05:07,776 INFO [C3P0ConnectionProvider] Connection properties: {}
18:05:07,776 INFO [C3P0ConnectionProvider] autocommit mode: false
18:05:07,776 WARN [C3P0ConnectionProvider] No JDBC Driver class was specified by property hibernate.connection.driver_class
18:05:07,845 INFO [MLog] MLog clients using log4j logging.
18:05:08,309 INFO [C3P0Registry] Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
18:05:08,544 INFO [AbstractPoolBackedDataSource] Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@817dc511 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@bdd4060f [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1b60m8m88awxucurvdz4k|130b993, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@bcdc5afd [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1b60m8m88awxucurvdz4k|12b644f, jdbcUrl -> null, properties -> {} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1b60m8m88awxucurvdz4k|675ac5, numHelperThreads -> 3 ]
18:05:37,672 WARN [BasicResourcePool] com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@bdbaa2 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
at java.sql.DriverManager.getDriver(Unknown Source)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:223)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:119)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
18:05:37,683 WARN [BasicResourcePool] com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@2b34e5 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
mas o C3P0 nunca consegue montar o pool de conexão por que meus dados de conexão estão nos datasources do JBoss, e não nas propriedades de configuração do AnnotationConfiguration do Hibernate (onde ficam as configurações do C3P0)… como eu tenho muitos datasources, preciso deles pra saber em qual banco o usuário vai conectar via JNDI, por isso não posso colocar essas configurações hard coded nas propriedades do AnnotationConfiguration do Hibernate (nessa hora me veio a pergunta: “Se eu posso configurar os SessionFactory no Hibernate direto via código, pra que usar os datasources na pasta deploy do JBoss?”)
eu já ajustei a propriedade hibernate.connection.datasource com o respectivo datasource no JBoss mas mesmo assim, o C3P0 só liga se eu colocar os valores de conexão (URL JDBC, usuário, senha e etc) direto no AnnotationConfiguration
alguem conhece alguma solução pra isso? enfim, para que o C3P0 funcione perfeitamente com o Hibernate…
dia inteiro no Google 
valew