简化jdbc编程JNDI

   JNDI访问数据库,我们要记住的是:通过JNDI查找数据源,然后通过数据源可以从连接池获取空闲的数据库连接,获得连接后就跟普通jdbc操作无疑了。而数据源是由web容器(Tomcat)提供的(当然数据源有不同的实现),不能直接在程序中NEW一个数据源对象,而需要JNDI(Java Naming and Directory Interface)技术来获得.

  

  javax.nameing.Context提供了查找JNDI资源的接口,例如通过以下代码获得名称为jdbc/books的数据源引用: 

Context ctx = new InitialContext();   
DataSource ds 
= (DataSource)ctx.lookup("java:comp/env/jdbc/books");

      得到数据源对象后,通过DataSource的getConnection()方法来获得数据库的连接对象Connection。  

Connection con = ds.getConnection();

  当程序结束数据库的访问后,应当调用Connection.close()方法,及时将Connection返还给连接池,使Connection恢复空闲状态。
 
PS:Tomcat把DataSource作为一种可配置的JNDI资源来处理。生成DataSource对象的工厂为org.apache.commons.dbcp.BasicDataSourceFactory.
 
数据源与连接池的关系:

  在数据源(datasource)中事先建立了多个数据库连接,这些连接保存在连接池(connection pool)中。访问数据库时,只需要从连接池中获取空闲状态的连接,当程序访问数据库结束时,再将连接放回连接池。

上面提到数据源是由WEB容器提供的,那么这个容器是怎么样识别我们要连接那个数据库以及相关的访问参数(用户名,密码...)呢!这就需要我们进行JNDI的配置来告诉WEB容器(context.xml和web.xml).
1.配置context.xml文件:

  在context.xml文件中加入Resource标签,该标签属性如下:

  <Context>
     <Resource name="jdbc/books"

          auth="Container"

          type="javax.sql.DataSource"          

          maxActive="100" //最大连接数

          maxIdle="30"//最小连接数

              maxWait="10000" //最大空闲时间,单位是毫秒

          username="sa"

          password="sa"

          driverClassName="com.mysql.jdbc.Driver" 

          url="jdbc:mysql://localhost:3306/sample_db"/>
  </Context>

2.配置web.xml文件:

  在web.xml中加入resource-ref标签。

  <web-app>
     <resource-ref>
          <description>booksConnection</description>
          <res-ref-name>jdbc/books</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
     </resource-ref>
  </web-app>

 这样就完成了JNDI的使用,这里就总结一下JNDI的使用步骤:

  1.配置context.xml文件。

  2.配置web.xml文件。

  3.编写代码,使用lookup()方法获得数据源对象,然后通过getConnection()获得连接。

  4.跟JDBC一样编写相关代码。

 

原文地址:https://www.cnblogs.com/Fskjb/p/1594303.html