EJB数据源和连接池_第1页
EJB数据源和连接池_第2页
EJB数据源和连接池_第3页
EJB数据源和连接池_第4页
EJB数据源和连接池_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、连接池和数据源知识点连接池和数据源的基本概念配置Tomcat数据源配置struts数据源一.概述:在实际项目的开发中,特别是web应用程序中,如 Jsp,Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据方请求必须建立连接,存取数据,关闭连接等步骤, 而数据库连接是一种非常昂贵的资源,频繁的建立连接,关闭连接必定是数据库性能降低,再者,JDBC直接连接数据库的方式还存在数据库连接泄漏问题。使用数据库连接池技术是解决上述问题的最常用的方法,在许多应用服务器(如websphere, weblogic jBoss)中都提供了这种技术二.连接池实现的原理就是在应用启动时建立一定数量的

2、数据库连接,并将这些数据库连接作为对象存储在一个容器对象中。而程序中所有的数据库请求访问都可以共享这些连接,这样,通过复用这些已经建立的数据库连接,不必在每次访问数据库时都重新建立连接,极大的节省了系统资源和时间。另外,为了回收并重新使用那些没有及时关闭的数据库连接,连接池都提供了一种超时回收机制。也就是当数据库的连接在指定的时间内没有活动,连接池就把这些连接重新放到可以使用的队列。新的连接请求到来时便可以再次使用这些连接。这种超时回收连接的机制可以克服数据库链接泄漏的问题。三.几个常见的开源的数据库连接池1. DBCP连接池它是一个依赖于 Jakata commons-pool对象池机制的数

3、据库连接池,DBCP可以直接在应用程序中使用。1.1.官方下载网址:/com mon s/dbcp/1.2. 将下载後的文件解压获得三个jar文件com mon s-dbcp-1.2.1.jar, com mon s-pool-1.3.jar, com mon s-collect ion s-3.2.jar1.3. 将上述三个.jar文件保存到项目的 WEB-INFlib下,即加入到 CLASSPATH中。1.4. 使用方法1.4.1.直接在程序中使用首先要创建BasicDataSource,然后通过它来获得数据库连接对象Conn ectionPr

4、operties p=new Properties。;1.4.2.通过tomcat使用DBCP数据源需要修改tomcat的server.xml文件或者配置位于tomcat文件夹下confCatelinalocal文件夹下的项目名称.xml文件Class.forName( xool.ProxoolDriver ”);/加载驱动程序Conn ecti on conn=DriverMa nager.getC onn ecti on( proxool.)三.在Tomcat上配置连接池与配置数据源基本相同。唯一需要的就是在server.xml文件中的#签之间添

5、加几个与连接池相关的参数设置。配置连接池时需要添加的配置代码段:! 回收被遗弃的 (一般是忘了释放的 )数据库链接到连接池中 removeAbandonedtrue !数据库链接超过 60 秒不用将视为被遗弃而回收到连接池中removeAbandonedTimeout 60 !将被遗弃的数据库链接的回收记入日至logAbandonedtrueTomcat 中的数据源数据源是 JDBC2.0 种引入的一个概念。并且在 javax.sql 包中定义了接口 DataSource 来 描述这个概念。在数据库的 JDBC 驱动程序中有该接口的实现类。例如 : mysqlconnector-java-3.

6、1.10-ben.jar 中的 com.mysql.jdbc.jdbc2.optional.MysqlDataSource 类就实 现了 DataSource 接口。在程序中使用数据源有两种方式:一种是 在程序中直接创建类的对象 ,该对象实现了 JDBC驱动程序中的DataSource接口 .并使用该对象获得数据库连接;另一种方法是使用JNDI 注册数据源,然后在程序中查询 JNDI 服务中的数据源 ,这样用户就只需要提供一个逻辑名 称,而不是数据库登录的具体细节。一 配置数据源要使用第二种形式的 JNDI 数据源,必须首先进行配置数据源的 JNDI 命名服务。由于Tomcat提供了一个称为

7、DBCP (Database Conn ection Pool)的数据源实现,所以可以在 server.xml 文件中进行数据源的配置即可。1 安装 DBCPDBCP依赖于以下几个 apache jakarta项目的几个公用包:Commons-dbcp1.1.jarCommons-collections.jarCommons-pool-1.1.jar首先查看这三个文件是否存在于 TOMCAcommonlib 位置 .如果不存在,则可以到 http://site/downloads/downloads_commons.html 下载 . 当前的最新版本为 :

8、Commons-dbcp1.2.1.zip,Commons-collections-3.1.zip,Commons-pool-1.2.zip. 将 其 解 压 缩 , 并 将 其 中 的 .jar 文 件 复 制 到 TOMCAT_HOMEcommonlib 下.2. 安装相应的后台数据库的 JDBC 驱动器到 commonlib 下 .如 OracleJDBC 驱动 class12.jar,Sqlserver2000JDBC 驱动 msbase.jar, mssqlserver.jar, msutil.jar3. 配置 TOMCAT_HOMEconf.server.xml 文件 .配置 JN

9、DI 数据源需要在 TOMCA T_HOMEconfserver.xml 文件的Context和/Context标签之间添加资源声明:3.1. Tomcat 5.5. 的配置在 server.xml 文件的最后部分的 标签之前加入标记 即可3.1.1. 以下配置连接 oracle 数据库3.1.2. 以下配置连接 Sqlserver 数据库3.1.3. 以下配置连接 mysql 数据库说明 :对于大型应用,如果需要跨数据库操作,则可以在一个 标记中配置多个(Resource 子标记3.1.4 web 应用程序中数据源的使用方法:. 设计提供连接对象 Connection 的类pa

10、ckage db;import java.sql.* ;import javax.sql.DataSource;import javax.naming.Context;import javax.naming.InitialContext;/2008.1.25./ 注意:获得的 Connection 对象不能在普通的 java 类中 ( 如在 main 函数中 ) 直接调用/ 因为,数据源由 web 服务器管理!final public class Database private static DataSource ds =null ; / 静态成员static / 初始化静态成员/*tryC

11、ontext initCtx=new InitialContext();Context envCtx=(Context)initCtx.lookup(java:comp/env);ds=(DataSource)envCtx.lookup(jdbc/oracle/ora9);catch(Exception e2)e2.printStackTrace();*/initialize ();public Database()/初始化数据源publicstaticvoid iriitialize()try Con text ini tCtx=new In itialC on text();Con tex

12、t en vCtx=(C on text)i nitCtx .Io okup(java:comp/e nv );jdbc/oracle/ora9数据源名ds =(DataSource)e nvCtx .lo okup(jdbc/oracle/ora9);catch (Excepti on e)e.pri ntStackTrace();/从连接池中获得一个连接public staticConn ecti on getC onn ecti on()Conn ecti on conn=n ull ;try conn= ds .getConnection();catch (Excepti on e1)

13、e1.pri ntStackTrace();retur nconn;3.142.在业务逻辑方法处理类中使用池中的连接package db;import java.sql.*;import java.util.*;/业务逻辑层public class Busin essLayer /这个方法是在jsp页面或servlet中调用的业务逻辑方法(专业用法)。publicCollection getNewPost(String sql)Collecti on vPostBea n postList=new ArrayListvPostBea n();/Database db= new Database

14、();Conn ecti on conn=n ull ;Stateme nt st=n ull;ResultSet rs=null;conn=db. getConnection st=conn.createStatement(); rs=st.executeQuery(sql); String province,city,tele,post; while (rs.next()province=rs.getString( city=rs.getString( tele=rs.getString( post=rs.getString( String t=province+ PostBean pb=

15、 new();province );city );tele );post );t +city+ t +tele+ t PostBean(province,city,tele,post);+post;postList.add(pb);System. out .println(t);catch (Exception e1)e1.printStackTrace();finally try if (st!= null ) st.close();if (rs!= null ) rs.close();if (conn!= null ) conn.close();catch (Exception e2)e2

16、.printStackTrace();return postList; . 在 web 页面中调用业务逻辑方法 核心代码:遍历集合postList ,显示数据。3.2. Tomcat5.5以下版本配置以下配置连接oracle数据库!-fact mon s.dbcp.BasicDataSourceFactorydriverClassName/nameoracle.jdbc.driver.OracleDriverurl/namejdbc:oracle:th in: Iocalhost:1521:ora9user name/namesystempas

17、sword lcm7373maxAct ive20maxldle/name10maxWait/name 10000 以下配置连接sqlserver数据库vResource n ame=jdbc/jspdev auth=C ontain er type=javax.sql.DataSource/ fact mon s.dbcp.BasicDataSourceFactorydriverClassName/namecom.microsoft.jdbc.sqlserver.SQLServerDriverurl/namejdbc:microsoft:sqlserver

18、:/:1433;DatabaseName=jspdevuser name/nameb npassword/nameb nmaxActive/name20maxldle/name10maxWait/name-14.配置web.xml文件(数据源在 web.xml中的配置,对于 Tomcat高版本不是必需的) 要在web应用中使用上面配置的JNDI数据源,还需要在相应的 web应用配置文件web.xml中添加资源引用的配置.例如: vdescriptionJSP中的高级数据库应用实例DataSourcejdbc/oracle/ora9 /res-ref-name/ 与 serve

19、r.xml 中名称一致 javax.sql.DataSourceC ontain er.使用配置的数据源1. 获得数据源核心代码如下:方法一:Con text ctx=new In itialC on text();DataSource ds=( DataSource )ctx .lo okup(“ javajxcbmKp/eclierora9”)方法二:/ 1、创建命名服务环境Con text ctx = new In itialC on text();if (ctx = nu II)throw new Exceptio n(No Con text);/ 2、从JNDI中查询数据源对象Con

20、 text en vCtx =(C on text)ctx .lo okup(java:comp/e nv );ds = (DataSource)envCtx.lookup( jdbc/oracle/ora9 );2. 获得数据库连接对象Conn ecti on conn=ds.getC onnection();3. 说明:为了在应用程序中更好的使用连接池技术获得数据源,进而获得一个连接对象.通常采用如下的代码来获得连接对象.3.1.方法一:import javax.sql.DataSource;import javax.naming.*;import java.sql.*;public cl

21、ass SqlTestDS private static DataSource ds = null; static init(); private static void init() try / 1、创建命名服务环境 Context ctx = new InitialContext(); if (ctx = null)throw new Exception(No Context);/ 2、从 JNDI 中查询数据源对象Context envCtx =(Context)ctx.lookup(java:comp/env); ds = (DataSource)envCtx.lookup(jdbcc

22、/oracle/ora9); catch (Exception e) e.printStackTrace();/ 将构造函数定义为 private 权限是为了保证全局只有一个 SqlTestDS 实例 / 也就是实现了单例模式 private SqlTestDS() public static Connection getConnection() throws SQLException if (ds = null) throw new SQLException( 数据源对象为空! ); else / 3、从数据源中获取数据库连接 return ds.getConnection();3.2. 方

23、法二 :import javax.sql.DataSource;import javax .n ami ng.*;import java.sql.*;public class DatabaseC onn 获得连接对象public staticsynchroni zed Conn ecti on getC onnection() throws Excepti on try / 1、创建命名服务环境Con text ctx = new In itialC on text();Con text en vCtx =(C on text)ctx .lo okup(java:comp/e nv); ds

24、= (DataSource)e nvCtx .lo okup(jdbc/oracle/ora9); return ds.getC onnection(); catch (SQLException e) throw e; catch (Nam in gExcepti on e) throw e;有了这个类,便可以在需要的地方(java代码 或Jsp中)调用这个静态方法获得一个连接 对象了 .当执行完数据库操作之后,可以执行conn.close()方法,以便让连接池管理器回收这个 连接(但不关闭到数据库的物理连接 )Struts的JDBC数据源配置在struts中,一般是通过JDBC数据源来连接数

25、据库。JDBC数据源的配置通常放在 struts 的配置文件中,这样方便配置的修改。JDBC数据源可以在 struts配置文件的data-source元素中定义。用data-source元素可以在数据源元素中定义多个数据源。data-source 元素及其属性的作用:兀素属性描述type实现JDBC扩展API接口的类的名字autoCommit用这个数据源创建的连接,默认的自动提交模式。driverClassName用于实现JDBC驱动程序接口的类urlJDBC Url 的值。user name访问数据库的用户名。password访问数据库的口令。autoCommit是否自动提交true自动提交

26、false手动提交key被action类用来查找这个数据源的(标识)名字descripti on对这个数据源的描述logi nTimeout超时值。maxCo unt连接到这个数据源的最大连接数。minCount需要创建的最少连接数。readO nly创建的连接的只读状态。说明:当配置了多个数据源时的属性key才是必需的。data-sourcetypeset-propertyproperty =driverClassName/”value =com.microsoft.jdbc.sqlserver.SQLServerDriver以下为可选配置!set-propertyset-propertys

27、et-propertyset-propertyproperty= description ” value= ” Sqlserver2000 DataSource property= maxActive value= 10/property= maxWait value= 5000”property= defaultAutoCommit value= false/例2:下面是struts配置文件中定义的一个oracle92数据源的例子。set-property592DataSource/配置完毕后,务必将相应的 jar 包复制到 commonlib 下,否则出错!二获得数据源在 Action 类或其派生类中,通过下列两个方法之一获取javax.sql.DataSource getDataSource(HttepServletRequest request)javax.sql.DataSource getDataSource(HttepServletRequest request.String keyName )keyNam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论