如何实现共享连接池?

sdxiaoj 2002-02-27 02:11:23
在一个小型应用中,往往多个SERVLET或JAVA BEAN与同一个数据库通信,在这种情况下,不可能每个SERVLET或JAVA BEAN 都有自己的连接池,这就需要共享连接池,通过一些资料了解到可以通过两种方法实现共享连接池:使用SERLET上下文或单个类,但是对此不是很理解,不知哪位高人是否能够详细解释一下,或提供一些资料、代码。
非常感谢!
...全文
93 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdxiaoj 2002-02-28
  • 打赏
  • 举报
回复
谢谢答复!
还是有一些问题不解。从有关资料中介绍了一种使用单个类(singleton class)来封装所需的特性(加假设已经建立了一个connectionPool类)。单个类仅仅是一种只能有单个实例被创建、通过使用私有构造建立起来的强加类。实例通过静态方法检索,检查对象是否已得到分配,如果是这样就返回,如果不是就分配并返回一个新的对象。资料提供了单个类大纲,比如为:BookPool,这样每个使用它的SERVLET都只需要通过调用BookPool.getInstance()就可以获得连接池。大纲如下:

public class BookPool extends ConnectionPool() {
private BookPool pool=null;

private BoolPool( ... ) {
super(...); // Call parent constructor
...
}

public static synchronized BookPool getInstance() {
if(pool == null) {
pool = new BookP00l(...);
}
return(pool);
}

}


问题是:此单个类在何时,何地建立?
weilinwu 2002-02-27
  • 打赏
  • 举报
回复
public class ConnectionPool {
private static Stack pool = null;

public ConnectionPool() {
Class.forName(dbDriver);
Connection conn = null;
for (int i=0; i<initCapacity; i++){
if (user == null || password == null)
conn = DriverManager.getConnection(dbUrl);
else
conn = DriverManager.getConnection(dbUrl, user, password);
pool.push(conn);
} // end for
}
public Connection getConnection() {
Connection conn = null;
synchronized(pool){
if (pool.empty()){
try{ pool.wait(connWaitTime);} //Wait for the connection
catch(InterruptedException e){
System.out.println(e);
Log.log(e);
}
} //end if(pool.empty())

if (pool.empty()){
throw Exception();
}
else
conn = (Connection)pool.pop();
} //end synchronized(pool)

return conn;
}

public void returnConnection(Connection conn) {
if (conn != null){
synchronized(pool){
if (pool != null && pool.size() < maxCapacity && !isExist(conn)){
pool.push(conn);
pool.notify();
}
}
}
}

public void emptyPool(){
Connection conn = null;
synchronized(pool){
while(pool != null && !pool.empty()){
conn = (Connection)pool.pop();
try{
conn.close();
conn = null;
}
catch(SQLException e){

}
}
} //end synchronized(pool)
}
}

由于工作原因,我不能写得太清楚,请自己稍加修改后再使用,我只是提供给你一个思路……

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧