写了一个db4o的连接池,有2种方法一种是 定义一个静态的私有变量,把连接池的集合放进去,然后用一个静态的public 的get方法 。
 
 另一种办法就是放到 ServletContext 里面,这种办法唯一比较麻烦的地方就是需要在使用链接的地方先得到 ServletContext的实例,然后再得到 链接池的实例,但是在逻辑处理类里未必会继承 servlet 类,这样就需要额外写一个类继承,在用的地方再实例化那个类(写静态的也成,我把这个类直接变成了数据连接池管理类).请问哪一种方法比较好,,在线等。。谢谢

解决方案 »

  1.   

    放ServletContext比较好。
    因为可以利用ServletContextListener来监听容器的lifecycle,static variable就不行。
      

  2.   

    sorry,static variable也能利用ServletContextListener来监听容器。
      

  3.   

    我感觉如果静态变量比较方便一些!当然,你也可以建立一个这样的类,来随时用import javax.servlet.ServletContext;public class ServletContextFactory { private static ServletContext sc; public static ServletContext getSc() {
    return sc;
    } public static void setSc(ServletContext sc) {
    ServletContextFactory.sc = sc;
    }
    }
      

  4.   

    恩,和4楼有同感,似乎静态变量比较方便,刚开始的时候是用 ServletContextListener 来启动数据库和连接池的,现在想试试用静态变量方法了。。
      

  5.   

    建立连接池使用的 ServletContextListener ,管理使用在另外一个类,数据库的管理部分我是这么写的。。
    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;
    }}