OpenJPA でc3p0をコネクション・プーリングとして利用する方法
Java EEサーバーのコネクションプールが使えない、という場合に使えるかも。
Apache commons-dbcp 用の設定はあったけどcommons-dbcp はログが何もでないので嫌だったので、c3p0を試してみたが、調べても設定がみつからなかったので試行錯誤してみた。結果、以下の設定でできた。
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="jpaPU" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <class>entity.Entity</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <!-- postgres の場合 : 以下は、プールしない場合の設定 <property name="openjpa.ConnectionDriverName" value="org.postgresql.Driver" /> <property name="openjpa.ConnectionURL" value="jdbc:postgresql://servername:5432/db" /> <property name="openjpa.ConnectionUserName" value="user" /> <property name="openjpa.ConnectionPassword" value="pass" /> --> <property name="openjpa.jdbc.DBDictionary" value="postgres"/> <property name="openjpa.ConnectionDriverName" value="com.mchange.v2.c3p0.ComboPooledDataSource" /> <property name="openjpa.ConnectionProperties" value="driverClass=org.postgresql.Driver, jdbcUrl=jdbc:postgresql://servername:5432/db, user=user, password=pass, acquireIncrement=5, initialPoolSize=5, minPoolSize=5, maxPoolSize=5, maxStatements=500, maxStatementsPerConnection=100, checkoutTimeout=3000 "/> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=false)" /> <property name="openjpa.Log" value="DefaultLevel=INFO,SQL=TRACE" /> <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72"/> <property name="openjpa.LockManager" value="pessimistic" /> <property name="openjpa.MaxFetchDepth" value="3" /> <property name="openjpa.LockTimeout" value="30000" /> </properties> </persistence-unit> </persistence>
でも、レアケースだよなぁ・・・これ。
あと、OpenJPAは日本語の情報少なすぎ。人気無いのかなぁ・・・