最近项目中用到了JNDI,花了半天时间做了JNDI小实验,主要也是参照网上的方法,总结如下:
一、关于tomcat的配置:
context.xml 中加入以下配置:
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdel="30" maxWait="10000" username="xxx" password="xxx" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.0.171:1521:testdb"/>
具体每个参数什么意思,不清楚的可以在网上查,这样数据源就配好了
二、关于web project的配置:
新建web project 在web.xml中增加以下配置:
<resource-ref>
<description>MS SQL Server</description>
<res-ref-name>jdbc/test</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
三、测试:
由于与web 服务器打交道,不方便通过application直接做测试,可以通过jsp页面实现测试
新建test.jsp,代码如下:
<%
Connection conn=null;
try {
// 初始化查找命名空间
Context ctx = new InitialContext();
// InitialContext ctx = new InitialContext();亦可
// 找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟你的DataSource名
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/test");
// 取得连接
conn = ds.getConnection();
PreparedStatement ps=conn.prepareStatement("select id from table_name");
ResultSet rs=ps.executeQuery();
while(rs.next()){
%>
<%=rs.getInt(1) %>
<%
}
System.out.println("connection pool connected !!");
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 注意不是关闭,是放回连接池.
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
%>
以上都OK了,就可以部署,访问test.jsp 页面,
如果后台打印 connection pool connected !! 前台显示表中对应表字段值,恭喜你 成功了!!
有两点需要注意:
1.由于配置数据源时用到了驱动,所以tomcat lib 中需要加入数据库驱动包。
2.对于tomcat 服务器在取得数据源时 java:comp/env/要加此前缀, jboss、weblogic webspere 不需要加此前缀,大 家可以自己做实验验证。