数据库基础-关于数据库连接池的问题(二)

2014-11-23 22:27:41 · 作者: · 浏览: 1
rans方法,
该方法主要处理流程如下(伪码描述):
public void beginTrans( ) {
… conn = getIdleConnectionFromPoll( );
userId = getUserId( );
registerTrans(userId, conn);
…}
在我们的实现中,用户标识是通过使用者所在的线程来标识的。后面的所有对于数据库的访问都是通过查找该注
册表,使用已经分配的连接来完成的。当事务结束时,从注册表中删除相应表项。对于嵌套的事务如何处理呢?
我们采用的方法仍为引用记数,不过这里的引用记数是指的"嵌套层次",具体的细节,不再赘述。

4.3、封装从上面的论述可以看出,普通的数据库方法和事务方法对于连接的使用(分配、释放)是不同的,
为了便于使用,对外提供一致的操作接口,我们对连接进行了封装:即普通连接和事务连接。在此,我们利用
了Java中的强大的面向对象特性:多态。普通连接和事务连接均实现了一个DbConnection接口,对于接口中定义
的方法,分别根据自己的特点作了不同的实现,这样在对于连接的处理上就非常的一致了。4.4、并发问题为了是
我们的连接管理服务有更大的通用性,就必须要考虑到多线程环境,即并发问题。在一个多线程的环境下,我们
必须要保证连接管理自身数据的一致性和连接内部数据是一致性,还好Java提供对这方面的很好的支持
(synchronized关键字),这样我们就很容易使连接管理成为线程安全的。5、结论本文给出了一个基本的连接管
理框架,在其中使用了一些广泛使用的设计模式(资源池,引用记数等),使得高效、安全的复用数据库连接成
为可能。当然,还有一些问题没有考虑到,比如:没有实现对不同种类的数据库的联合管理;没有提供定时检测
机制,查询连接的状态等。另外在连接管理的使用包装上比起一些商用的系统还显粗糙,但是底层的基理是一致
的,所以通过本文相信对于这些商用的产品中的相关功能会有更好的理解。