Ok, I gave up on using DBCP. Since my underlying database is Oracle, I
decided to try their "Universal Connection Pool"
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#04_05
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#04_02
You can find the ucp.jar in $ORACLE_HOME/ucp/lib/ucp.jar or download from:
http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
Here are the persistence.xml settings that worked in standalone (no
container) mode:
<property name="openjpa.jdbc.DBDictionary"
value="oracle(batchLimit=200)"/>
<property name="openjpa.ConnectionDriverName"
value="oracle.ucp.jdbc.PoolDataSourceImpl"/>
<property name="openjpa.ConnectionProperties"
value="connectionFactoryClassName=oracle.jdbc.pool.OracleDataSource,
user=scott, password=tiger,
URL=jdbc:oracle:thin:@localhost:1521:orcl, maxPoolSize=25"/>
I have not yet tried in managed mode yet.
Regards,
Chris
P.S. I'd still like to know how to get DBCP to work in a standalone app...
On 9/16/2013 11:45 AM, Chris wrote:
When I run my app in a container (JBoss6), the DBCP seems to
automagically - just work. However, I also need to enable connection
pooling for unit testing, i.e. not container-managed. In this case,
and when there are a lot of records, all the connections are used up.
I tried both documented ways to explicitly configure DBCP:
http://openjpa.apache.org/faq.html#pooling
http://openjpa.apache.org/builds/2.2.2/apache-openjpa/docs/manual.html#ref_guide_dbsetup_thirdparty
Neither of these works, though. I verified that in standalone mode
the DBCP code *is* being called, i.e. it calls
org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(), but
unlike when deployed in JBoss, the connections seem to "leak", i.e.
they're never closed / returned to the pool.
Any ideas?
Thanks,
Chris