【发布时间】:2013-04-26 15:38:58
【问题描述】:
在 ejb 3.0 jboss 6 环境中,我有一个名为 DBInterface 的 bean,它被注入到许多 dao 类中以执行 sql 查询。 DBInterface bean 将数据源作为字段变量注入。 DBInterface bean 中的所有方法都从注入的数据源获取数据库连接,并在处理完数据库调用后关闭连接。在运行应用程序时,经过一段时间后,我得到 sql 异常说无法创建数据库连接。我正在关闭 finally 块中每个方法调用的连接。我在哪里犯错误?我在 jboss 中使用 ejb 3.0。 问候 V
public class DBInterface {
@Resource(mappedName = "java:ora.ds", type = DataSource.class)
private static DataSource dataSource;
protected Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printstacktrace();
}
}
public void method1() {
Connection connection = null;
try {
connection = getConnection();
...............
db codes
.................
} catch (SQLException e) {
logger.error(e);
throw new DBException("sql exception ", e);
} finally {
try {
closeResources(rs, statement, connection);
} catch (SQLException e) {
logger.error(e);
throw new DBException("sql exception ", e);
}
}
}
public void closeResources(ResultSet rs, Statement st, Connection con)
throws SQLException {
if (rs != null) {
rs.close();
}
if (st != null) {
st.close();
}
if (con != null) {
con.close();
}
}
}
【问题讨论】:
-
不要将数据源注入静态字段...
-
还要确保在单独的 try-catch 块中关闭资源
-
是的,你是对的,我不再使用静态数据源了。抱歉,我在这里粘贴了旧的测试代码。单独的 try-catch 块是什么意思?我在这段代码中没有看到其他错误吗?
-
我将其作为答案发布,因为我无法在此处发布代码
标签: java jdbc ejb-3.0 cdi jboss6.x