JNDI(名字与目录服务) 是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。
一、TOMCAT5.0下的JNDI配置方法
如果要部署的是个WEB应用程序,则将该应用程序放在 $TOMCAT_HOME/webapps目录下,配置的JNDI数据源和读取jndi的方法如下(注意:要把连接数据库的驱动放在tomcat_home/common/lib下面)
1、可以在TOMCAT_HOME/conf/Catalina/localhost下新建XXX.xml文件,XXX为所发布的WEB应用程序的名字,如我所发布的WEB应用程序是JndiTest,则.xml文件命名为JndiTest.xml,该文件内容为:
<?xml version='1.0' encoding='utf-8'?>
<Context debug="1" docBase="$Tomcat 5.0_Home/webapps/JndiTest(应用程序的存放的目录)" path="/JndiTest" reloadable="true" workDir="work/Catalina/localhost/JndiTest(应用程序编译后存放的位置)">
<Resource name="jdbc/test" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/test">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ObjectDataBaseName</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>username</name>
<value>DataBaseUserName</value>
</parameter>
<parameter>
<name>password</name>
<value>DataBasePassword</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
</ResourceParams>
</Context>
二、TOMCAT5.5/6.0下的JNDI配置方法
将如下格式的Resource描述插入JndiTest.xml的<Context></Context>中:
<Resource name="jdbc/test" <!-- JNDI名称 -->
auth="Container" <!-- 此处和web.xml中对应 -->
type="javax.sql.DataSource" <!-- 数据源类型 -->
password="1234" <!-- 数据库访问密码 -->
username="demo" <!-- 数据库访问用户名 -->
driverClassName="oracle.jdbc.OracleDriver" <!-- 数据库驱动类 -->
url="jdbc:oracle:thin:@127.0.0.1:1521:DEMO" <!-- 数据库访问url -->
maxActive="100" <!-- 最大活动数 -->
maxIdle="30"
maxWait="5000" <!-- 最大等待时间 -->
/>
三、测试、
Java连接jndi的方法
Context ctx = new InitialContext();
Connection conn=null;
ctx = new InitialContext();
DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/test");
conn = ds.getConnection();
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from T_Test";(数据库查询语句)
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {
out.println(rs.getString(1));
Syste.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
rs.close();
stmt.close();
conn.close();