首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Tomcat配备JNDI数据源

2012-09-02 
Tomcat配置JNDI数据源?转自:http://www.blogjava.net/supercrsky/articles/174931.htmlTomcat配置JNDI数据

Tomcat配置JNDI数据源

?

转自:http://www.blogjava.net/supercrsky/articles/174931.html

Tomcat配置JNDI数据源

经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定~
还是Tomcat官方的说明好,不过全是英文的,大概还看得懂.
百度上那么花花绿绿的太多了,一个也没成功!...
本例使用的数据库为Ms SQL Server 2000,对于其它数据库只是修改一下相应的参数即可,
服务器是Tomcat5.5, 与之间的版本配置连接池最简便
自己总结了一下,希望起到一个抛砖引玉的作用

总结:
第一步:

将驱动程序(jar包)放到tomcat安装目录下的common\lib文件夹下
第二步:

在Tomcat的webapps目录随便创建一个工程目录,例如myjdbc。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下:?

Tomcat配备JNDI数据源<?xml?version="1.0"?encoding="UTF-8"?>?
Tomcat配备JNDI数据源<Context>
Tomcat配备JNDI数据源?<Resource?name="jdbc/test"?
Tomcat配备JNDI数据源??auth="Container"?
Tomcat配备JNDI数据源??type="javax.sql.DataSource"
Tomcat配备JNDI数据源?????????maxActive="100"?
Tomcat配备JNDI数据源??maxIdle="30"?
Tomcat配备JNDI数据源??maxWait="10000"
Tomcat配备JNDI数据源?????????username="sa"?password=""?
Tomcat配备JNDI数据源??driverClassName="net.sourceforge.jtds.jdbc.Driver"
Tomcat配备JNDI数据源?????????url="jdbc:jtds:sqlserver://localhost/pubs"/>
Tomcat配备JNDI数据源?</Context>

?

附注如下:
Tomcat标准数据源资源工厂配置项如下:
* driverClassName - 所使用的JDBC驱动类全称。
* maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
* maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
* maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
* password - 传给JDBC驱动的数据库密码。
* url - 传给JDBC驱动的连接URL。
* user - 传给JDBC驱动的数据库用户名。
* validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。
* 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。


jdbc/test是数据源的名称(随意写,要和web.xml文件中 <res-ref-name>jdbc/test</res-ref-name> 一样即可),
其他的参数按照自己的实际情况进行修改,例如数据库的名称、账号、密码。

第三步:

在myjdbc目录下创建WEB-INF目录,创建web.xml文件,内容如下:?

Tomcat配备JNDI数据源<?xml?version="1.0"?encoding="UTF-8"?>?
Tomcat配备JNDI数据源<web-app?xmlns="http://java.sun.com/xml/ns/j2ee"?
Tomcat配备JNDI数据源xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?
Tomcat配备JNDI数据源xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee?http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"?
Tomcat配备JNDI数据源version="2.4">?
Tomcat配备JNDI数据源
Tomcat配备JNDI数据源????<resource-ref>?
Tomcat配备JNDI数据源????????<description>DB?Connection</description>?
Tomcat配备JNDI数据源????????<res-ref-name>jdbc/test</res-ref-name>?
Tomcat配备JNDI数据源????????<res-type>javax.sql.DataSource</res-type>?
Tomcat配备JNDI数据源????????<res-auth>Container</res-auth>?
Tomcat配备JNDI数据源????</resource-ref>?
Tomcat配备JNDI数据源</web-app>?
Tomcat配备JNDI数据源

?

说明:
<resource-ref>
<descrtiption>引用资源说明</descrtiption>
<res-ref-name>引用资源的JNDI名</res-ref-name>
<res-type>引用资源的类名</res-type>
<res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理-->
</resource-ref>
第四步:

写个jsp,试一下吧!

Tomcat配备JNDI数据源<%@?page?contentType="text/html;charset=utf-8"%>
Tomcat配备JNDI数据源<%@?page?import="java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection"?%>
Tomcat配备JNDI数据源<%
Tomcat配备JNDI数据源??try
Tomcat配备JNDI数据源??{
Tomcat配备JNDI数据源???//初始化查找命名空间
Tomcat配备JNDI数据源???Context?ctx?=?new?InitialContext();?
Tomcat配备JNDI数据源???//InitialContext?ctx?=?new?InitialContext();亦可?
Tomcat配备JNDI数据源???//找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟你的DataSource名
Tomcat配备JNDI数据源???DataSource?ds?=?(DataSource)ctx.lookup("java:comp/env/jdbc/test");
Tomcat配备JNDI数据源???//取出连接
Tomcat配备JNDI数据源???Connection?conn?=?ds.getConnection();
Tomcat配备JNDI数据源System.out.println("connection?pool?connected?!!");???
Tomcat配备JNDI数据源??}?catch?(NamingException?e)?{
Tomcat配备JNDI数据源???System.out.println(e.getMessage());
Tomcat配备JNDI数据源??}?catch?(SQLException?e)?{
Tomcat配备JNDI数据源???e.printStackTrace();
Tomcat配备JNDI数据源??}finally
Tomcat配备JNDI数据源??{
Tomcat配备JNDI数据源???//注意不是关闭,是放回连接池.
Tomcat配备JNDI数据源???conn.close();
Tomcat配备JNDI数据源??}
Tomcat配备JNDI数据源
Tomcat配备JNDI数据源}
Tomcat配备JNDI数据源%>
Tomcat配备JNDI数据源


或写个JSP用标签库测试一下:

Tomcat配备JNDI数据源<%@?page?language="java"?import="java.util.*"?pageEncoding="ISO-8859-1"%>
Tomcat配备JNDI数据源<%@?taglib?uri="http://java.sun.com/jsp/jstl/sql"?prefix="sql"?%>
Tomcat配备JNDI数据源<%@?taglib?uri="http://java.sun.com/jsp/jstl/core"?prefix="c"?%>
Tomcat配备JNDI数据源
Tomcat配备JNDI数据源<sql:query?var="rs"?dataSource="jdbc/test">
Tomcat配备JNDI数据源select?*?from?authors
Tomcat配备JNDI数据源</sql:query>
Tomcat配备JNDI数据源
Tomcat配备JNDI数据源<html>
Tomcat配备JNDI数据源??<head>
Tomcat配备JNDI数据源????<title>DB?Test</title>
Tomcat配备JNDI数据源??</head>
Tomcat配备JNDI数据源??<body>
Tomcat配备JNDI数据源<c:forEach?var="row"?items="${rs.rows}">
Tomcat配备JNDI数据源????${row.city}<br/>
Tomcat配备JNDI数据源</c:forEach>
Tomcat配备JNDI数据源??</body>
Tomcat配备JNDI数据源</html>
Tomcat配备JNDI数据源
Tomcat配备JNDI数据源

?

我成功了!Good Luck!
以下是配置JNDI的其他方法,个人不建议使用,因为修改服务器的
server.xml和web.xml,如果有一点错误,你的容器就会崩溃~

注:连接数据源的方法还有很多,在这里我简要说之:
比如说第二步还可以这么做:

在/tomcat/conf/Catalina/localhost(或其它主机名)/中添加以
虚拟目录名称(你的工程名)命名的XML文件来配置context.
比如我的主机下有个目录dbpool其地址为tomcat/webapps/test我可以这样来配置这个上下文:
在tomcat/conf/Catalina/localhost/目录下创建test.xml文件,内容和上面一样.

还可以:
在/tomcat/conf/server.xml中<host></host>标签之间添加
???
?

Tomcat配备JNDI数据源<Context?path="/test"?docBase="test"
Tomcat配备JNDI数据源????????debug="5"?reloadable="true"?crossContext="true">
Tomcat配备JNDI数据源??<Resource?name="jdbc/test"?auth="Container"?type="javax.sql.DataSource"
Tomcat配备JNDI数据源???????????????maxActive="100"?maxIdle="30"?maxWait="10000"
Tomcat配备JNDI数据源???????????????username="javauser"?password="javadude"?driverClassName="net.sourceforge.jtds.jdbc.Driver"
Tomcat配备JNDI数据源???????????????url="jdbc:jtds:sqlserver://localhost/pubs"/>
Tomcat配备JNDI数据源</Context>

?

其中path是你的工程路径(相对或绝对亦可),其中docBase="test"说明,此主机已经指向到webapps目录下了,回头
来看test这个上下文,它实际目录是位于webapps的目录下的,所以
在Context中我们可以将docBase直接设置为test了。如果它在webapps/dbpool/test下,则设置为dbpool/test就可以了。

附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API,
Java应用程式开发者透过使用 JNDI,在naming和 directory方面的应用上就有了共通的准则.

?

热点排行