作为最终用户,您永远不必
ConnectionPoolDataSource直接使用Direct。它旨在用作物理连接的工厂(
PooledConnection)。那
PooledConnection被保留在连接池中。当执行a时
DataSource.getConnection,数据源将从
PooledConnection池中检出a
,并
PooledConnection.getConnection()以最终用户的身份向您返回获得的逻辑连接,并在
Connection关闭该逻辑时将物理连接返回到池中。
所以构造是
User -- uses --> DataSource (with connectionpooling) -- uses --> ConnectionPoolDataSource
要么
ConnectionPoolDataSource --> creates PooledConnection --> DataSource --> returns Connection --> User
a的使用
DataSource独立于是否
DataSource提供连接缓冲的事实(它对您应该透明)。
换句话说,您的代码应更改为:
protected static Connection getConnection() throws NamingException, SQLException { InitialContext cxt = new InitialContext(); String jndiName = "java:/comp/env/jdbc/MyDBHrd"; DataSource dataSource = (DataSource) cxt.lookup(jndiName); Connection conn = dataSource.getConnection(); return conn;}


