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