我们有一个古老而又大的Java EE项目,在某些地方,由于编码错误,数据库连接未正确关闭/或未在catch / finally块中清理。
我们将数据库连接池限制为100个连接。有时会发生连接保持打开并且使用了所有100个连接,因此应用程序被挂起。我正在尝试对这个项目进行重组,显然当我到达那里时我会处理这个错误的代码,我想知道是否有任何轻量级的Java EE框架可以自动关闭这个打开的数据库连接,而无需编写conn.close()或session.close()。
也许像Django这样的每个数据库连接在每个请求/重新发布周期结束时关闭。
我知道我可以使用像p6spy和IronTrack SQL这样的工具来查找无法关闭的语句,但我对框架更感兴趣,因为这个项目没有使用任何我正在尝试集成这个项目用框架。
答案 0 :(得分:1)
Java 7中的try-with-resource可能有所帮助。 看看
http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html
此处Java 7 Automatic Resource Management JDBC (try-with-resources statement)您可以提出类似问题。
检查是否检测到连接泄漏。我相信,你会找到一些工具。
答案 1 :(得分:0)
我认为你应该经历几个不同的框架,如果你搜索它们并选择最适合你当前和不久的需求的演示应该是可用的。我个人喜欢Primefaces / Hibernate(如果你在JSF中)。
答案 2 :(得分:0)
Java EE中的轻量级方法是使用简单的基于POJO的bean(称为EJB)来完成数据库工作。
有了它们,在许多或所有情况下,数据库连接都是由服务器在幕后完全处理的事情。
例如(假设您现在的查询是本机SQL):
@Stateless
public class MyBean {
@PersistenceContext
private EntityManager entityManager;
public void doDBWork() {
entityManager.createNativeQuery("update foo set a = 1").executeUpdate();
}
}
在此示例中,当您调用doDBWork
时,事务会自动启动,并在您离开该方法时结束。介于两者之间的某个连接从连接池中检索并返回给它。面对异常或并发访问时,代码自动完全安全。