当前位置: 代码迷 >> 综合 >> Tomcat 6.0,Resin 3.1.6 配置JNDI数据库连接池
  详细解决方案

Tomcat 6.0,Resin 3.1.6 配置JNDI数据库连接池

热度:72   发布时间:2023-12-08 01:32:46.0

2.1.1 Tomcat数据库连接池配置---连接SQL Server2000

(1)打开tomcat 6.0/conf/server.xml,在</Host>前加:

<Context docBase="test" path="/test" reloadable="true" debug=”5” reloadable="true" crossContext="true">
<Resource name="jdbc/sqlserver" auth="Container" type="javax.sql.DataSource"   maxActive="100"

maxIdle="30" maxWait="10000" username="sa" password="1234" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
               url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test" />
</Context>

(2)在webapps/项目名/WEB-INF中的web.xml中之前增加以下配置:

<resource-ref>
        <description>SQL Server Datasource</description>
        <res-ref-name>jdbc/sqlserver</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
</resource-ref>

(3)把以下几个.jar文件复制到tomcat安装目录下的lib文件夹中:

commons-collections-3.1.jar、 commons-dbcp-1.2.1.jar、 commons-pool-1.2.jar、msutil.jar、 msbase.jar、mssqlserver.jar

后面三个是JDBC 数据库驱动,前面三个应该是数据库连接池的包

(4)关键一步:确认sqlserver2000可以远程连接,这除了开放1433端口外还要,升级数据库到sp3或者sp4,否则连接会发出SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket错误。

(5)测试:

编写数据库连接类:

Package com.test;

import java.sql.Connection;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.sql.DataSource;

public class DBConn {

     public static Connection getConnection() {

         try {

            Context initContext = new InitialContext();

            if (initContext == null)

                throw new Exception("No Context");

            DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/sqlserver");

            if (ds != null) {

                Connection conn = ds.getConnection();

                if (conn != null) {

                    return conn;

                }

            }

        } catch (Exception e) {

 

            e.printStackTrace();

        }

        return null;

    }

}

测试的级jsp页面:

<%@   page contentType="text/html;charset=utf-8"%>

<%@   page import="java.sql.*"%>

<%@   page import="javax.sql.*"%>

<%@   page import="javax.naming.*"%>

<%@   page import="com.test.DBConn"%>

<HTML>

    <HEAD>

       <TITLE>JSP测试页面</TITLE>

    </HEAD>

    <BODY>

       <%

           Connection conn = DBConn.getConnection();

           Statement st = conn.createStatement();

           String sql = "select top 2 * from source";

           ResultSet rs = st.executeQuery(sql);

           while (rs.next()) {

       %>

       第一个字段内容为:<%=rs.getString(1)%>

       第二个字段内容为:<%=rs.getString(2)%>

       <br>

       <%

           }

       %>

       <%

           out.print("使用jdbc驱动操作数据库操作成功");

       %>

       <%

           rs.close();

           st.close();

           conn.close();

       %>

    </BODY>

</HTML>

在Myeclipse中使用数据库连接池,采用外部的tomcat

新建context.xml文件,在META-INF中新建

其内容为:

<Context path="/test" docBase="test" debug="5" reloadable="true"

    crossContext="true">

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <Resource name="jdbc/test" auth="Container"

       type="javax.sql.DataSource"

       driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"

       url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=tomato"

       username="sa"

       password="funcheer!@#$qwer"

       maxIdle="30"

       maxWait="10000"

       maxActive="100" />

</Context>

在WEB-INF的web.xml中添加如下内容:

<resource-ref>

       <res-ref-name>jdbc/tomato</res-ref-name>

       <res-type>javax.sql.DataSource</res-type>

       <res-auth>Container</res-auth>

    </resource-ref>

最后测试和上面的一样。

2.1.2 resin(resin 3.1.6)数据库连接池配置---sqlserver

在resion/conf/resin.conf文件中,配置一个数所库连接池

<database>

       <jndi-name>jdbc/sqlserver</jndi-name>

       <driver type="com.microsoft.jdbc.sqlserver.SQLServerDriver">

       <url>jdbc:microsoft:sqlserver://localhost:1433;databasename=test</url>

       <user>sa</user>

       <password>1234</password>

              </driver>

       <prepared-statement-cache-size>8</prepared-statement-cache-size>

       <max-connections>20</max-connections>

       <max-idle-time>30s</max-idle-time>

       </database>

将相应的驱动程序放到resin/lib/目录下,应该就是上面提到的驱动程序。

测试网页test.jsp
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
    DataSource ds = null;
    try{
    InitialContext ctx=new InitialContext();
    ds=(DataSource)ctx.lookup("java:comp/env/jdbc/sqlserver");
    Connection conn = ds.getConnection();
    Statement stmt = conn.createStatement();
    String strSql = " select * from test";
    ResultSet rs = stmt.executeQuery(strSql);
    while(rs.next()){
       out.println(rs.getString(1)+"<br>");                
      }
       rs.close();
    stmt.close();
    conn.close();
    }
    catch(Exception ex){
     ex.printStackTrace();
     out.print(ex.getMessage());
    }
%>

  相关解决方案