JDNI---数据来源(Data Source)

Posted on 2006-06-28 09:48 多力宇扬 阅读(546) 评论(0)  编辑  收藏 所属分类: View tier
Tomcat下JNDI的配置

    JNDI全名为Java Naming and Directory Interface.JNDI主要提供应用程序所需要资源上命名与目录服务.在Java EE环境中,JNDI扮演了一个很重要的角色,
它提供了一个接口让用户在不知道资源所在位置的情形下,取得该资源服务.
    就好比网络磁盘驱动器的功能一样。如果有人事先将另一台机器上的磁盘驱动器接到用户的机器上,用户在使用的时候根本就分辨不出现在的驱动器是存在本端,
还是在另一端的机器上,用户只需取得资源来用,根本就不知道资源在什么地方。
    JNDI这个接口基本上是LDAP,LDAP全名为Lightweight Directory Access Protocol.
    
    要设定JNDI的JDBC数据源和DBCP连接池需要做以下的工作:(for example Oracle DataBase)

    一. 安装JDBC Driver
    将你DB的JDBC Driver部署到{Tomcat_Install]\common\lib目录下。
    二. 设定Tomcat下的server.xml
    修改{Tomcat_Install|\conf\server.xml文件中你的站台标签里的<Host></Host>之间的内容.如下:
    server.xml
     <Host>
        <Context path="/Develop" docBase="Develop" debug="0" reloadable="true"               crossContext="true">
        <Resource name="jdbc/dy" auth="Container" type="javax.sql.DataSource"/>
            <ResourceParams name="jdbc/dy">
               <parameter>
                  <name>factory</name>
                  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
               </parameter>
               <parameter>
                  <name>driverClassName</name>
                  <value>oracle.jdbc.driver.OracleDriver</value>
               </parameter>
               <parameter>
                  <name>url</name>
                  <value>jdbc:oracle:thin:@yang:1521:orcl</value>
               </parameter>               
               <parameter>
                  <name>username</name>
                  <value>scott</value>
               </parameter>
               <parameter>
                  <name>password</name>
                  <value>ss</value>
               </parameter>
               <parameter>
                  <name>maxActive</name>
                  <value>20</value>
               </parameter>
               <parameter>
                  <name>maxIdle</name>
                  <value>10</value>
               </parameter>
               <parameter>
                  <name>maxWait</name>
                  <value>-1</value>
               </parameter>                                                                 
            </ResourceParams>
        </Context>
      </Host>
  上述社定所表示的意思是在Develop站台中,定义一个JDBC数据来源,名称为jdbc/dy.
  通过以下的代码来设置的这个jdbc/dy的数据来源和DBCP连接池:
  <parameter>
     <name>factory</name>
     <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  </parameter>
  设定使用DBCP连接池,这是有Jakarta Project组织所制定的连接池程序,它一样是OpenSource的.
参数说明:
     <Context></Context>用于设置你的站台.
     <Context>标签中的path="/Develop"代表网站名称,即: http://IP_DomaninName/Develop; docBase="Develop"代表站台的目录位置,debug则是设定debug level
     ,0表示提供最少的信息,9表示提供最都多的信息;reloadable则表示Tomcat执行时,当class,web.xml被更新时,都会自动重新加载,不需要重新启动Tomcat;
     maxActive表示连接池的最大数据库连接数;设为0表示无限制;maxIdle表示设定连接池中最小能有几个Connection,若为0表示不限制;maxWait 最大建立连接等待时间。
    如果超过此时间将接到异常,设为-1表示无限制,单位为ms;driverClassName JDBC驱动程序;url表示数据库连接字符串.

 三. 设定应用站台中的web.xml
 eg:设定Develop的web.xml如下:
  <resource-ref>
     <description>JNDI JDBC DataSource of Develop</description>   //一个描述
     <res-ref-name>jdbc/dy</res-ref-name>                        //这里必须为你之前指定的<ResourceParams name="jdbc/dy">
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
  </resource-ref>

 四. 使用JDBC数据来源获得Connection对象
   Context initContext=new InitialContext();
   Context envContext=(Context)initContext.lookup("java:/comp/env");
   或者
   Context envContext=(Context)initContext.lookup("java:comp/env");
   DataSourceds conn=(DataSource)envContext.lookup("jdbc/dy");
   conn=ds.getConnection();

按照这四个步骤做下来后,那么你就可以写个Test Page来测试一下了.
Test Page1:
_________________________________________________________________________________________________________
testpool.jsp
<!--测试JNID数据源的配置-->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
  DataSource ds=null;
  try
  {
      Context initCtx=new InitialContext();
      Context envCtx=(Context)initCtx.lookup("java:comp/env");
      //从Context中loopup 数据源
      ds=(DataSource)envCtx.lookup("jdbc/dy");
      if(ds!=null)
      {
        out.println("已经获得DataSource!");
        out.println("<br>");
        Connection conn=ds.getConnection();
        Statement stmt=conn.createStatement();
        ResultSet rst=stmt.executeQuery("select * from emp");
        out.println("以下是从数据库里读出来的数据");
        out.println("<hr>");
        while(rst.next())
        {
          out.println("empName:"+rst.getString("ename"));
          out.println("<br>");
        }
      }
    else
        out.println("连接失败");
  }
  catch(Exception e)
  {
      out.println(e);
  }
%>
如果成功那么输出结果:
========================================
已经获得DataSource!
以下是从数据库里读出来的数据:
empName:SMITH
empName:ALLEN
empName:WARD
empName:JONES
empName:MARTIN
empName:BLAKE
empName:CLARK
empName:SCOTT
empName:KING
empName:TURNER
empName:ADAMS
empName:JAMES
empName:FORD
empName:MILLER
empName:feiyang
empName:yang
empName:feifei
empName:fei

只有注册用户登录后才能发表评论。


网站导航: