对于像tomcat weblogic jboss等web服务器,他们都有像连接池的配置,而应用程序本身也可以用连接池的配置,比如ssh项目中使用c3p0,通过配置文件来设置连接池的参数。这些与web服务器里面连接池配置是什么关系,一直很凝惑。求指点迷津!

解决方案 »

  1.   

    对于像tomcat weblogic jboss等web服务器,他们都有像连接池的配置 ?
    楼主指的是不是JDNI?
      

  2.   

    在应用服务器中使用的称为 JNDI 数据源。JNDI 数据源必须实现 javax.sql.DataSource 接口。JNDI 也就是将实现了 javax.sql.DataSource 的对象加载的 JNDI 路径上去了,这样就可以通过 JNDI 获取 DataSource 对象了。根据 JDBC 的规范推荐,所有的 JDBC 连接池需要实现 javax.sql.DataSource 接口。而 c3p0 作为连接池其核心类 ComboPooledDataSource 也是一个 DataSource 的实现。在非 J2EE 环境中,自行创建 DataSource 的实现对象就可以使用连接池了。而在 J2EE 环境中,由于其带有 JNDI 管理功能,所以由 J2EE 容器负责创建对象并且绑定到 JNDI 树上供应用程序使用。另外,JNDI 绑定的 DataSource 可以给不同的应用使用,而非 J2EE 环境中 new 出来的只能在当前工程中使用。
      

  3.   

    如果 J2EE 容器自定义 DataSource 实现类的话,也可以将 c3p0 的 DataSource 实现绑定到 JNDI 上去作为全局的数据源使用。
      

  4.   


    是不是可以这么理解:本质上他们的效果是一样的,而JNDI则可以提供给所有的应用程序使用。如果既设置了JNDI的连接池,又有自己应用程序的连接池配置,那以那个为准呢?