随笔 - 117  文章 - 72  trackbacks - 0

声明:原创作品(标有[原]字样)转载时请注明出处,谢谢。

常用链接

常用设置
常用软件
常用命令
 

订阅

订阅

留言簿(7)

随笔分类(130)

随笔档案(123)

搜索

  •  

积分与排名

  • 积分 - 154337
  • 排名 - 389

最新评论

[标题]:[转]Tomcat配置JNDI数据源
[时间]:2009-6-12
[摘要]:在Tomcat中配置JNDI数据源
[关键字]:MySQL,JDBC,Driver,Tomcat,JNDI,DataSource
[环境]:Tomcat6,mysql-connector-java-5.1.7-bin.jar
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys

[正文]:
1、将MySQL JDBC驱动(mysql-connector-java-5.1.7-bin.jar)放到%TOMCAT_HOME%"lib目录下。注意,不要放到webapps/myjdbc的WEB-INF目录中,否则可能出现"SQL Exception:Cannot load JDBC driver class 'com.mysql.jdbc.Driver' "。

2、在Tomcat的webapps目录创建一个工程目录,例如myjdbc。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/mysql_ds_db"
            auth="Container"
            type="javax.sql.DataSource"
            maxActive="100"
            maxIdle="30"
            maxWait="10000"
            username="root"
            password="root"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/db"/>
</Context>

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

3、在myjdbc目录下创建WEB-INF目录,创建web.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/mysql_ds_db</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

</web-app>

说明:
    <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>

4、测试
JSP测试:
<%@page contentType="text/html;charset=GBK" %>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
2009-6-9
测试Tomcat JNDI 数据源:<br/>
<%
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/mysql_ds_db");
   //取出连接
   conn = ds.getConnection();
    out.println("connection pool connected !!");
  } catch (NamingException e) {
    out.println("Naming Exception:" + e.getMessage());
  } catch (SQLException e) {
   out.println("SQL Exception:" + e.getMessage());
  }finally{
   if(conn != null)
       conn.close();//注意不是关闭,是放回连接池.
  }
%>

或写个JSP用标签库测试一下:
<%@page contentType="text/html;charset=GBK" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<sql:setDataSource
    dataSource="jdbc/mysql_ds_db"
    var="ds" />

<sql:query var="query" dataSource="${ds}" >
    select * from bookauthor
</sql:query>

<c:forEach var="row" items="${query.rows}">
    authorId:<c:out value="${row.authorId}" /><br/>
    authorName:<c:out value="${row.authorName}" /> <br/>
    <br/>
</c:forEach>


[参考资料]:
[1] Tomcat配置JNDI数据源: http://www.blogjava.net/supercrsky/archive/2009/05/01/174931.html
[2] Tomcat 6.0 设置 JNDI 数据源 : http://www.blogjava.net/Michael-Q/archive/2008/03/26/188867.html

posted on 2009-06-12 12:43 天堂露珠 阅读(426) 评论(0)  编辑  收藏 所属分类: Java

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


网站导航: