连接池的关键技术

1.事务处理:
前面讨论的是关于使用数据库连接进行普通的数据库访问,对于事务处理,情况就变得比较复杂。因为事务本身要求原则性的保证,此时就要求对于数据库的操作符 合“All-All-Nothing”原则,即要么全部完成,要么什么都不做。如果简单的采用上述的连接复用的策略,就会发生问题,因为没有办法控制属于 同一个事务的多个数据库 操作方法的动作,可能这些数据库操作是在多个连接上进行的,并且这些连接可能被其它非事务方法复用。Connection本身具有提供了对于事务的支持, 可以通过设置Connection的AutoCommit属性为false,显示的调用commit或rollback方法来实现。但是要安全的、高效的 进行连接的复用,就必须提供相应的事务支持机制。方法是:采用显示的事务支撑方法,每一个事务独占一个连接。这种方法可以大大降低对于事务处理的复杂性,并且又不会妨碍到连接的复用。

连接管理服务提供了显示的事务开始的、结束(commit或rollback)声明,以及一个事务的注册 表,用于登记事务发起者和事务使用的连接的对应关系,通过该表,使用事务的部分和连接管理部分就隔离开,因为该表是在运行时根据实际的调用情况动态生成 的。事务使用的的连接在事务运行中不能被复用。在现实中,用户表示是通过使用者所在的线程来标识的。后面所有对于数据库的访问都是通过查找该注册表,使用 几经分配的连接来完成的。当事务结束后,从注册表中删除相应表项。

2.并发:
为了使连接管理服务有更大的通用性,我们必须要考虑到多线程环境,即并发问题。在一个多线程的环境下,必须要保证连接管理自身数据的一致性和连接内部数据 的一致性,在这方面Java提供很好的支持(synchronized关键字),这样就很容易使连接管理成为线程安全的。

3.多数据库服务器:
在实际应用中,应用程序常常需要访问多个不同的数据库。如何通过同一个连接池访问不同的数据库,是应用程序需要解决的一个核心问题 。下面介绍一个解决的途径:

首先,定义一个数据库连接池参数的类,定义了数据库的JDBC驱动程序类名,连接的URL以及用户名口令等等一些信息,该类是用于初始化连接池的参数:
public class ConnectionParam implements Serializable{
//各初始化参数的定义
}

其次就是连接池的工厂类ConnectinFactory,通过该类将一个连接池对象与一个名称对应起来,使用者通过该名称就可以获取指定的连接池对对象,实现的主要代码如下:
public class ConnectionFactory{
static HashTable connectionPools=//用来保存数据源名和连接池对象的关系
public static DataSource lookup(String dataSourceName) throws NameNotFoundException{

//查找名字为dataSourceName的数据源

}
public static DataSource bind(String name,ConnectionParam param)throws Exception{

//将名字name与使用的param初始化的连接池对象绑定

}
public static viod unbind(String name)throws NameNotFoundException{

//将与名字name绑定的连接池对象删除
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值