commons-pool-1.3.jar を使用して、eXistとの接続をプールしてみました。
ExistCollectionFactory.java
import org.apache.commons.pool.BasePoolableObjectFactory;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
public class ExistCollectionFactory extends BasePoolableObjectFactory{
private static String driver = "org.exist.xmldb.DatabaseImpl";
private static String url = "xmldb:exist://localhost:8080/exist/xmlrpc/db/";
private static String user = "admin";
private static String pass = "";
public static void setProperty(String driver, String url, String user, String pass){
ExistCollectionFactory.driver = driver;
ExistCollectionFactory.url = url;
ExistCollectionFactory.user = user;
ExistCollectionFactory.pass = pass;
}
public ExistCollectionFactory(){
}
/**
* @return 生成したオブジェクト。
*/
public Object makeObject() throws Exception {
Collection col = null;
Class c = Class.forName(driver);
Database database = (Database) c.newInstance();
DatabaseManager.registerDatabase(database);
col = DatabaseManager.getCollection(url,user,pass);
return col;
}
}
Pooler.java
import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.PoolableObjectFactory;
import org.apache.commons.pool.impl.SoftReferenceObjectPool;
import org.xmldb.api.base.Collection;
public class Pooler {
ObjectPool pool = null;
public Pooler(){
try {
// オブジェクトプールの管理クラスのインスタンスを生成します。
PoolableObjectFactory factory = new ExistCollectionFactory();
// オブジェクトプールのインスタンスを生成します。
pool = new SoftReferenceObjectPool(factory);
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
public Collection getObject(){
try {
return (Collection)pool.borrowObject();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void returnObject(Object obj){
try {
pool.returnObject(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
使い方
ExistCollectionFactory.setProperty("org.exist.xmldb.DatabaseImpl",
"xmldb:exist://dugong:8080/exist/xmlrpc/db/test",
"admin",
"");
Pooler pooler = new Pooler();
try{
Collection col = pooler.getObject();
XMLResource res = (XMLResource)col.getResource("test.xml");
} catch(Exception e){
}
■参考URL
Commonsでオブジェクトプーリングを実現
http://www.atmarkit.co.jp/fjava/rensai2/jakarta05/jakarta05.html