<%@ page contentType="text/html; charset=gb2312"%> JSP中tomcat的SQL Server2000数据库连接池的配置
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
JSP中tomcat的SQL Server2000数据库连接池的配置
     发布者: 发布时间:2006-10-15
JSP中tomcat的SQL Server2000数据库连接池的配置
环境:
1. 数据库:Microsoft SQL Server 2000
2. 数据库驱动程序:net.sourceforge.jtds.jdbc.Driver
JNDI(Java Naming and Directory Interface)概述:
Tomcat4(5)提供了一个与Java Enterprise Edition应用服务相兼容的JNDI--InitialContext实现实例。它的初始数据设置在$CATALINA_HOME/conf/server.xml文件里,并可能在网页应用环境描述(/WEB-INF/web.xml)里被下列元素引用:
1) <env-entry>--环境入口,设置应用程序如何操作。
2) <resource-ref>--资源参数,一般是数据库驱动程序、JavaMail Session、自定义类工厂等。
3) <resource-env-ref>--在Servlet 2.4里用来简化设置不需认证信息的资源资源如环境参数、resource-ref变量。
InitialContext在网页应用程序初始化时被设置,用来支持网页应用程序组件。所有的入口和资源都放在JNDI命名空间里的java:comp/env段里。点击下列网址以获取更多信息:
1) Java命名和目录接口(Java Naming and Directory Interface)
2) J2EE平台说明(J2EE Platform Specification)
设置JNDI资源
设置JNDI资源要在$CATALINA_HOME/conf/server.xml文件里使用下列标志符:
1) <Environment>--设置域个可变的JNDI InitialContext入口的名字和值(同上面说的<env-entry>等价)。
2) <Resource>--设置应用程序可用的资源的名字和类型(同上面说的<resource-ref>等价)。
3) <ResourceParams>--设置Java资源类工厂的名称或将用的JavaBean属性。
4) <ResourceLink>--给全局JNDI环境(JNDI Context)添加一个链接。
上述这些标志符必须放在<Context>和</Context>之间(针对专门的网页应用程序)或<DefaultContext>和</DefaultContext>之间。
此外,设在网页应用环境描述(Web Application Descriptor)(/WEB-INF/web.xml)里的名字和值也在初始环境(Initial Context)里被设置,当被<Environemt>元素值允许时将被重设初始值。
全局变量能在<Server>子元素的<GlobalNamingResources>里设置。
数据库连接池概述:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
配置Tomcat数据库连接池的前提:
1. 必须装有Java运行环境;
2. 必须有SQL Server2000数据库服务器(可以不在本地);
3. 必须有jtds.jar,并将它放在$CATALINA_HOME/common/lib目录下(只能是这里)。使用它是因为Microsoft公司的Java SQL Server驱动程序不支持二次查询,可到网上搜到。目前使用的是jtds-0.6.jar。
在$CATALINA_HOME/conf/server.xml里设置数据库连接池:
下面是配置的代码,必须放在<Host>和</Host>之间。
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<parameter>
  <name>maxActive</name>
  <!-- Maximum number of DB connections in pool.Set to 0 for no limit. -->
  <value>100</value>
</parameter>
<parameter>
  <name>maxIdle</name>
  <!-- Maximum number of idle DB connections to retain in pool.Set to 0 for no limit. -->
  <value>30</value>
</parameter>
<parameter>
  <name>maxWait</name>
  <!-- Maximum time to wait for a DB connection to become available in ms.An exception is thrown if this timeout is exceeded.Set to -1 to wait indefinitely. -->
  <value>10000</value>
</parameter>
<parameter>
  <name>removeAbandoned</name>
  <!-- Abandoned DB connections are removed and recycled -->
  <value>true</value>
</parameter>
<parameter>
  <name>removeAbandonedTimeout</name>
  <!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.  -->
  <value>60</value>
</parameter>
<parameter>
  <name>logAbandoned</name>
  <!-- Log a stack trace of the code which abandoned -->
  <value>false</value>
</parameter>
<parameter>
  <name>factory</name>
  <!-DBCP Basic Datasource Factory -->
  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
  <name>username</name>
  <!-- Database User Name -->
  <value>Iorishinier</value>
</parameter>
<parameter>
  <name>password</name>
  <!-- User Password -->
  <value>mypasswd</value>
</parameter>
<parameter>
  <name>driverClassName</name>
  <!-- Database Driver Class Name -->
  <value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<parameter>
  <name>url</name>
  <!-- Database Address -->
  <value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
</parameter>
</ResourceParams>
</Context>
下面是一些参数的说明:
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
其中:
1) path  指定路径,这里设定的是$CATALINA_HOME/webapps下的quality目录;
2) docBase 文件根目录。
3) reloader  当网页被更新时是否重新编译。
4) maxActive 连接池的最大数据库连接数。设为0表示无限制。
5) maxIdle  数据库连接的最大空闲时间。超过此空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
6) maxWait 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
7) removeAbandoned 回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。
8) removeAbandonedTimeout 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。
9) logAbandoned 将被遗弃的数据库连接的回收记入日志。
10) driverClassName JDBC驱动程序。
11) url   数据库连接字符串
在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里设置被引用的资源:
下面是配置代码,必须放在<web-app>和</web-app>里。
<!-- Database Config start -->
<resource-ref>
<description>connectDB test</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!-- Database Config end -->
下面是一下参数的必要说明:
1) description  对被引用的资源的描述。
2) res-ref-name  资源名称。见上面的<ResourceParams name="jdbc/connectDB">
3) res-type  资源类型。见上面的<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>
在JSP中使用资源:
这是在$CATALINA_HOME/webapps/quality下的某级子目录里的jsp网页文件部分代码:
<%@ page contentType="text/html;charset=GBK"%>
<%@ page errorPage="error.jsp"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<html>
<head>
</head>
<body>
  <%

   ………………
   ………………

   // 数据库操作
   Context ctx=null;
   Connection cnn=null;
   Statement stmt=null;
   ResultSet rs=null;
   try
   {
    ctx=new InitialContext();
    if(ctx==null)
     throw new Exception("没有匹配的环境");
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
    if(ds==null)
     throw new Exception("没有匹配数据库");
    
    cnn=ds.getConnection();
    stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rs=stmt.executeQuery("select * from table1");

    ………………
    ………………

   }
   finally
   {
    if(rs!=null)
     rs.close();
    if(stmt!=null)
     stmt.close();
    if(cnn!=null)
     cnn.close();
    if(ctx!=null)
     ctx.close();
   }
    %>
</body>
</html>
代码说明:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
上面这句应用了刚才设的资源。
资源使用完要释放,尤其是Context资源,见try-catch-finally部分的finally代码段,这是一种好的习惯。资源释放时如果释放了上级资源,下级资源将先被释放。如:释放了ctx,那么资源释放顺序将是rs,stmt,cnn,ctx。换句话说,如果释放了ctx,那么rs,stmt和cnn都将不可用了。
这里的释放资源只是将数据库连接返回连接池中,并不是把资源真正释放掉,见数据库连接池概述。
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
Oracle 10i的安装过程
Jive源代码研究
一个一年工作经验的java工程师从工作初到今天的所有收藏的学习java的网站(有些很经典)
精确的浮点数运算(实际应用中经常用到)
编程心得:编写跨平台Java程序注意事项
java基础:字符串分割的两种方法
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(2504)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(3942)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(2126)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(9382)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(6025)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(327)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(6063)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(1531)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(4911)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(5879)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号