Java EE 7的核心接口(EntityManager,...)可以扩展AutoClosable吗?

Koh*_*ert 6 java java-ee java-ee-7

我想知道Java EE 7的核心接口是否扩展AutoCloseable.(通过核心接口我的主要意思EntityManager和喜欢,但我不确定是否有其他接口或类可能会自动关闭.)

我认为他们应该而且这里是我假设的基础.

Java 6Connection甚至没有扩展Closeable,但Java 7的Connection扩展AutoCloseable(就像java.sql包中的其他几个接口一样).

Java 7的声明中,接口是否可以EntityManager扩展AutoCloseable以便为我们提供良好的服务?或者自动神奇地关闭太复杂了?try-with-resourcesEntityManager

这个特殊功能是否被认为是JSR-342的一部分?

小智 5

如果您正在管理自己的JPA对象,那么尝试使用资源对于EntityManagers以及较小程度上的EntityManagerFactory来说是一件好事.

我选择创建一个实用程序,它将一个EntityManagerFactory包装在java.lang.reflect.Proxy中,该实现了一个AutoCloseable版本的接口.然后,调用处理程序拦截对createEntityManager()的调用,以便它可以返回也实现AutoCloseable的底层EntityManager实例的代理版本.

我认为在容器管理的JPA对象的世界中工作要容易得多,但是如果你在一个简单的webapp中运行,那么这可能适合你.

  • massfords忘了提到他写了一篇很棒的文章,他展示了如何实际创建这样的代理,你可以在这里找到它:http://massfords.com/Proxy-for-AutoCloseable/.谢谢马克! (2认同)
  • @wpodgorski 非常感谢!:-) 但从那时起链接发生了变化:https://massfords.com/2016/06/06/proxyforautocloseable/ (2认同)