操纵JAVA中的动态代理实现数据库衔接池[Java编程]
本文“操纵JAVA中的动态代理实现数据库衔接池[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
数据库衔接池在编写利用服务是常常需求用到的模块,太过频繁的衔接数据 库对服务性能来说是一个瓶颈,利用缓冲池技术可以来消除这个瓶颈.我们可以 在互联网上找到很多关于数据库衔接池的源程序,但是都发现这样一个共同的问 题:这些衔接池的实现办法都差别程度地增添了与利用者之间的耦合度.很多的 衔接池都要求用户通过其规定的办法获得数据库的衔接,这一点我们可以理解, 毕竟目前全部的利用服务器取数据库衔接的方法都是这种方法实现的.但是别的 一个共同的问题是,它们同时不答应利用者显式的调用Connection.close()办法 ,而需求用其规定的一个办法来关闭衔接.这种做法有两个缺陷:
第一:改变了用户利用习惯,增添了用户的利用难度.
首先我们来看看一个正常的数据库操作历程:
int executeSQL(String sql) throws SQLException
{
Connection conn = getConnection(); //通过某种方法获得数据库衔接
PreparedStatement ps = null;
int res = 0;
try{
ps = conn.prepareStatement(sql);
res = ps.executeUpdate();
}finally{
try{
ps.close();
}catch(Exception e){}
try{
conn.close();//
}catch(Exception e){}
}
return res;
}
利用者在用完数据库衔接后普通是直接调用衔接的办法close来释放数据库资 源,假如用我们前面提到的衔接池的实现办法,那语句conn.close()将被某些特 定的语句所替换.
第二:使衔接池无法对之中的全部衔接举行独占掌握.由于衔接池不答应用 户直接调用衔接的close办法,一旦利用者在利用的历程中由于习惯问题直接关 闭了数据库衔接,那么衔接池将无法正常保护全部衔接的状况,考虑衔接池和应 用由差别开辟人员实现时这种问题更简单呈现.
综合上面提到的两个问题,我们来谈论一下若何办理这两个要命的问题.
首先我们先设身处地的考虑一下用户是想怎么样来利用这个数据库衔接池的 .用户可以通过特定的办法来获得数据库的衔接,同时这个衔接的范例应当是标 准的java.sql.Connection.用户在获得到这个数据库衔接后可以对这个衔接进 行肆意的操作,包含关闭衔接等.
通过对用户利用的描写,怎样可以接纳Connection.close办法就成了我们这 篇文章的主题.
为了接纳数据库衔接的close办法,我们应当有一种近似于钩子的机制.比方 在Windows编程中我们可以操纵Hook API来实现对某个Windows API的接纳.在 JAVA中一样也有这样一个机制.JAVA供应了一个Proxy类和一个 InvocationHandler,这两个类都在java.lang.reflect包中.我们先来看看SUN 公司供应的文档是怎么描写这两个类的.
public interface InvocationHandler
InvocationHandler is the interface implemented by the invocation handler of a proxy instance.
Each proxy instance has an associated invocation handler.
When a method is invoked on a proxy instance,
the method invocation is encoded and dispatched to the invoke method of its invocation handler.
以上是“操纵JAVA中的动态代理实现数据库衔接池[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |