类的调用问题,对付大量代码中数据库连接未及时释放的代码维护问题

背景:

文件
jsp >1000 内嵌大量java代码
class>200
经过n多人的n次修改,问题很多
主要是数据库未及时释放的为主要

思路:

所有的jsp 和 class 共享一个数据库连接池
想通过修改DBconnionmanager类的
两个方法
getConnection();
纪录连接文件名

freeConnection();
得到文件名比较得到未释放连接的文件名

要求不修改jsp文件

现在主要是不知道如何得到文件名
得到编译过的servlet名字好像也行

jsp 调用方法:



DBConnectionManager connMgr = null;
Statement sqlStmt = null;
ResultSet sqlRst2 =null;
Connection conn = null;
try{
connMgr = DBConnectionManager.getInstance();
conn=connMgr.getConnection("voice");

sqlStmt2 = conn.createStatement();
sqlStmt2.executeUpdate(strSql);
}

finally{

connMgr.freeConnection(
"voice",conn);
if (!conn.isClosed())conn.close();
conn = null;


}

DBConnectionManager.java



/**
* 管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接
* 池的访问.客户程序可以调用getInstance()方法访问本类的唯一实例.
*/

public class DBConnectionManager
{
static private DBConnectionManager instance;
// 唯一实例

/**
* 返回唯一实例.如果是第一次调用此方法,则创建实例
*
* @return DBConnectionManager 唯一实例
*/

static synchronized public DBConnectionManager getInstance()
{
if (instance == null)
{
instance = new DBConnectionManager();
}
clients++;
return instance;
}



/**
* 将连接对象返回给由名字指定的连接池
*
* @param name 在属性文件中定义的连接池名字
* @param con 连接对象
*/

public void freeConnection(String name, Connection con)
{
if (con == null)
{
System.out.println(
"connection is null");
}
try
{
con.setAutoCommit(true);
ConnectionPool pool = (ConnectionPool) pools.get(name);
String connName =
"Unknown"; //连接名未知
if (pool != null)
{
//if(isDebug) System.out.println("连接池释放连接:Unknown" + " -");
con.close();
}
}
catch (Exception e)
{
}
}



public Connection getConnection(String name)
{
ConnectionPool pool = (ConnectionPool) pools.get(name);
// String connName = "Unknown";
try
{
if (pool != null)
{
//System.err.println('1');
return pool.getConnection();

}
//System.err.println('2');
return null;
}
catch (Exception e)
{
e.printStackTrace();
//System.err.println('3');
return null;
}
}

}

请高手至招 thanks!

呵呵 都那么多问题le

还不推倒重来啊?

结构也弄得更合理些

前后分割
业务数据表示分割

基本就行了

相应的问题就迎刃而解

不行啊 现在还有
十几个版本正在使用中阿
我们暂时还没有哪么多人
来开发下一个版本
再想想其他办法吧!!