Tomcat 【中配置连接池和数据源】

四、Tomcat 中配置连接池和数据源

 

1DataSource接口介绍

 

(1)DataSource 概述

JDBC1.0原来是用DriverManager类来产生一个对数据源的连接。JDBC2.0用一种替代的方法,使用DataSource的实现,代码变的更小巧精致,也更容易控制。

一个DataSource对象代表了一个真正的数据源。根据DataSource的实现方法,数据源既可以是从关系数据库,也电子表格,还可以是一个表格形式的文件。当一个DataSource对象注册到名字服务中(JNDI),应用程序就可以通过名字服务获得DataSource对象,并用它来产生一个与DataSource代表的数据源之间的连接。

javax.sql包中的DataSource接口,可以采用三种实现形式:简单的实现(只提供Connection对象)、连接池形式的实现和分布式事务形式的实现。

javax.sql包中的ConnectionPoolDataSource提供对连接池实现的接口。

(2)使用DataSource的优点

l  DataSource与DriverManager的不同

关于数据源的信息和如何来定位数据源,例如数据库服务器的名字,在哪台机器上,端口号等等,都包含在DataSource对象的属性里面去了。这样,对应用程序的设计来说是更方便了,因为并不需要硬性的把驱动的名字写死到程序里面去。通常驱动名字中都包含了驱动提供商的名字,而在DriverManager类中通常是这么做的。

l  可移植性

如果数据源要移植到另一个数据库驱动中,代码也很容易做修改。所需要做的修改只是更改DataSource的相关的属性。而使用DataSource对象的代码不需要做任何改动。

(3)配置DataSource

主要包括设定DataSource的属性,然后将它注册到JNDI名字服务中去。在注册DataSource对象的的过程中,系统管理员需要把DataSource对象和一个逻辑名字关联起来。名字可以是任意的,通常取成能代表数据源并且容易记住的名字。

在下面的例子中,名字起为:WebMisDB,按照惯例,逻辑名字通常都在jdbc的子上下文中。这样,逻辑名字的全名就是:jdbc/WebMisDB。

(4)产生一个与数据源的连接

一旦配置好了数据源对象,应用程序设计者就可以用它来产生一个与数据源的连接。下面的代码片段示例了如何用JNDI上下文获得一个数据源对象,然后如何用数据源对象产生一个与数据源的连接。开始的两行用的是JNDI API,第三行用的才是JDBC的API:
  Context ctx = new InitialContext(); 

DataSource ds = (DataSource)ctx.lookup("jdbc/WebMisDB");

Connection con = ds.getConnection("myPassword", "myUserName");
  在一个基本的DataSource实现中,DataSource.getConnection方法返回的Connection对象和用DriverManager.getConnection方法返回的Connection对象是一样的。因为DataSource提供的方便性,我们推荐使用DataSource对象来得到一个Connection对象。

(5)DataSource的应用场合

对于普通的应用程序设计者,是否使用DataSource对象只是一个选择问题。但是,对于那些需要用的连接池或者分布式的事务的应用程序设计者来说,就必须使用DataSource对象来获得Connection。需要注意的是对Tomcat而言,在JNDI的名称前面应该加上"java:comp/env/" ?其他的服务器不需要加?

(6)数据源(DataSource)的作用

它相当于客户端程序和连接池的中介,想要获得连接池中的连接对象,必须建立一个与该连接池相应的数据源,然后通过该数据源获得连接。

2、JNDI(JAVA NAMING AND DIRECTORY INTERFACE---Java 命名和目录接口

(1)JNDI简介

分布式计算环境通常使用命名和目录服务来获取共享的组件和资源。命名和目录服务将名称与位置、服务、信息和资源关联起来。它是一个为JAVA应用程序提供命名服务的应用程序编程接口(API)。

命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。就可以找到该对象,获得其引用,从而运用它提供的服务。

命名服务提供名称—对象的映射。目录服务提供有关对象的信息,并提供定位这些对象所需的搜索工具。

Java 命名和目录接口或 JNDI 提供了一个用于访问不同的命名和目录服务的公共接口(JAVA API)。运用一个命名服务来查找与一个特定名字相关的一个对象,JDBC可以用JNDI来访问一个关系数据库。

(2)获得JNDI的初始环境

在JNDI中,在目录结构中的每一个结点称为Context 每一个JNDI名字都是相对于Context 的。这里没有绝对名字的概念存在。对一个应用来说,它可以通过使用InitialContext 类来得到其第一个Context:

Context  ctx = newInitialContext ();

应用可以通过这个初始化Context经由这个目录树来定位它所需要的资源或对象。InitialContext在网页应用程序初始化时被设置,用来支持网页应用程序组件。所有的入口和资源都放在JNDI命名空间里的java:comp/env段里。

(3)查找已绑定的对象

用ctx..lookup(String name); 根据name找对象

例:

import javax.naming.*;

public class TestJNDI

{    

public static void main(String[] args)

{

        try

{

       Context ctx=new InitialContext();

       Object object=ctx.lookup(“JNDIName”);       //根据JNDI名查找绑定的对象

       String str=(String) object;                                 //强制转换

        }

catch(NamingException e)

{   e.printStackTrace();

        }

catch(ClassCastException e)

{   e.printStackTrace();

        }

   }

}

 

3数据库连接池技术

 

(1)传统的Web数据库编程模式

 

l  在主程序(如Servlet、Beans)中建立数据库连接。

l  进行SQL操作,取出数据。

l  断开数据库连接。

使用这种模式开发,存在很多问题。

首先,我们要为每一次WEB请求(例如察看某一篇文章的内容)建立一次数据库连接,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值