【发布时间】:2017-12-05 19:23:58
【问题描述】:
查看来自this 等高声誉用户的答案,似乎通过在每个连接请求上查询JNDI 命名服务来获取新的DataSource 对象是合适的。例如。使用如下代码(为了更简洁,改编自链接的答案):
public class ConnectionManager{
public static Connection getConnection() throws NamingException {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource dataSource = (DataSource)envContext.lookup("jdbc/test");
return dataSource.getConnection();
}
}
这真的是建议/惯用的方式吗?在我自己的一些“ConnectionManager”实用程序类中,我曾经将 DataSource 对象的引用保留为实例变量。除非 JBoss 管理员从管理控制台禁用并启用连接池,然后我的代码出现如下错误,否则没有任何问题出现:
java.sql.SQLException: javax.resource.ResourceException: IJ000451: The connection manager is shutdown
那么,在 JDBC 中保留 DataSource 对象的实例是一种反模式吗?
【问题讨论】:
标签: java jdbc database-connection datasource connection-pooling