背景:
文件
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!