写了一个db4o的连接池,有2种方法一种是 定义一个静态的私有变量,把连接池的集合放进去,然后用一个静态的public 的get方法 。
另一种办法就是放到 ServletContext 里面,这种办法唯一比较麻烦的地方就是需要在使用链接的地方先得到 ServletContext的实例,然后再得到 链接池的实例,但是在逻辑处理类里未必会继承 servlet 类,这样就需要额外写一个类继承,在用的地方再实例化那个类(写静态的也成,我把这个类直接变成了数据连接池管理类).请问哪一种方法比较好,,在线等。。谢谢
另一种办法就是放到 ServletContext 里面,这种办法唯一比较麻烦的地方就是需要在使用链接的地方先得到 ServletContext的实例,然后再得到 链接池的实例,但是在逻辑处理类里未必会继承 servlet 类,这样就需要额外写一个类继承,在用的地方再实例化那个类(写静态的也成,我把这个类直接变成了数据连接池管理类).请问哪一种方法比较好,,在线等。。谢谢
因为可以利用ServletContextListener来监听容器的lifecycle,static variable就不行。
return sc;
} public static void setSc(ServletContext sc) {
ServletContextFactory.sc = sc;
}
}
import java.util.concurrent.ConcurrentLinkedQueue;import javax.servlet.ServletContext;import com.db4o.ObjectContainer;public class DbManagerImp implements DbManager {
/**
* 当池中的链接数目小于10时,一次增加10个链接.
*/
// public int addcon_nnum = 10; /**
* 数据库所有链接最大链接数60
*/
//public int maxconn = 60;
/**
* 数据库连接池中最小连接数
*/
//
// public void createConn(ServletContext sc) {
// // TODO Auto-generated method stub
//
// }// public void destroy(ServletContext sc) {
// // TODO Auto-generated method stub
//
// }
private static ServletContext sc;
public static void setSc(ServletContext sc) {
DbManagerImp.sc = sc;
}
public void releaseConnection(ObjectContainer db) {
// TODO Auto-generated method stub
ConcurrentLinkedQueue<ObjectContainer> connQueue = (ConcurrentLinkedQueue<ObjectContainer>)sc.getAttribute("conn_pool");
connQueue.offer(db);
}
public ObjectContainer getConnection() {
ConcurrentLinkedQueue<ObjectContainer> connQueue = (ConcurrentLinkedQueue<ObjectContainer>)sc.getAttribute("conn_pool");
ObjectContainer db = connQueue.poll();
return db;
}}