需要帮助找出轻量级 Java EE 框架
Posted
技术标签:
【中文标题】需要帮助找出轻量级 Java EE 框架【英文标题】:Need help figuring out a lightweight Java EE framework 【发布时间】:2012-03-14 09:47:24 【问题描述】:我们有一个古老的大型 Java EE 项目,在某些地方由于编码错误,数据库连接没有正确关闭/或没有在 catch/finally 块中清理。
我们已将数据库连接池限制为 100 个连接。有时会发生连接保持打开状态并且使用了所有 100 个连接,因此应用程序被挂起。我正在尝试重组这个项目,很明显当我到达那里时我会处理这个糟糕的代码,我想知道是否有任何轻量级 Java EE 框架可以自动关闭这个打开的数据库连接而无需编写 conn.close() 或会话关闭()。
可能类似于 Django,其中每个数据库连接在每个请求/回复周期结束时都关闭。
我知道我可以使用 p6spy 和 IronTrack SQL 等工具来查找无法关闭的语句,但我对框架更感兴趣,因为这个项目不使用任何框架,我正在尝试集成这个项目有一个框架。
【问题讨论】:
【参考方案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)你可以类似的问题。
检查是否检测到连接泄漏。我敢肯定,您会找到一些工具。
【讨论】:
【参考方案2】:我认为您应该了解几个不同的框架,如果您搜索它们并选择最适合您当前和近期需求的一个,则应该可以获得演示。我个人喜欢 Primefaces/Hibernate(如果你在 JSF 中)。
【讨论】:
【参考方案3】:Java EE 中的轻量级方法是使用简单的基于 POJO 的 bean,称为 EJB 来完成 DB 工作。
有了它们,在许多或所有情况下,数据库连接都是由服务器在幕后为您完全处理的事情。
例如(假设您现在的查询是原生 SQL):
@Stateless
public class MyBean
@PersistenceContext
private EntityManager entityManager;
public void doDBWork()
entityManager.createNativeQuery("update foo set a = 1").executeUpdate();
在此示例中,当您调用 doDBWork
时,事务会自动启动,并在您离开该方法时结束。从连接池中检索连接并返回给它。面对异常或并发访问,代码自动完全安全。
【讨论】:
以上是关于需要帮助找出轻量级 Java EE 框架的主要内容,如果未能解决你的问题,请参考以下文章