2011-12-08 9 views
5

私は、Java EE 7'sコアインターフェイスがAutoCloseableまで拡張されているかどうか疑問に思っています。 (コア・インタフェースことで、私は主にEntityManagerを意味し、潜在的に、自動的に閉じることができ、他のインタフェースやクラスが存在する場合likesが、しかし、私は確かに知りません。)Java EE 7のコアインタフェース(EntityManager、...)はAutoClosableを拡張できますか?

を、私は、彼らがべき、ここだと思います私の前提の基礎。

Java 6's ConnectionもしかしJava 7's ConnectionAutoCloseable(ちょうどjava.sqlパッケージ内のいくつかの他のインターフェースのような)に延び、Closeable延びていません。

EntityManagerのようなインタフェースは、それは私たちがも、Java 7's try-with-resources statementを与えを役立つような方法でAutoCloseableを延長することはできますか?またはEntityManagerを自動的に閉じることは、あまりにも複雑ですか?

JSR-342の一部と考え、この特定の機能ですか?

+1

私はそれがここにJPA仕様のメーリングリストで聞いて良い質問だと思う:http://java.net/projects/jpa-spec/lists –

+0

それは一度サーブレットリストに思い付きました。問題は、JPA、JSFなどがJava EEの外部で下位互換性がありたいということです。 –

+2

JPAのコンテナ管理バージョンを使用している場合、実際にトランザクションは「自動マジック」という言葉で開始および終了され、そのことについては心配する必要はありません。質問がJPAのアプリケーション管理バージョンに関連している場合は、質問を編集する必要があります。 – jmoreira

答えて

3

独自のJPAオブジェクトを管理している場合は、トライして、リソースがEntityManagersへとより少ない程度のEntityManagerFactoryに関して持っている素晴らしい事です。

インターフェイスのAutoCloseableバージョンを実装するjava.lang.reflect.ProxyにEntityManagerFactoryをラップするユーティリティを作成することを選択しました。次に、呼び出しハンドラはcreateEntityManager()への呼び出しを傍受し、AutoCloseableも実装している基底のEntityManagerインスタンスのプロキシバージョンを返すことができます。

は、私はそれがコンテナ管理のJPAオブジェクトの世界で働いてはるかに簡単だと思うが、あなたは、単純なWebアプリケーションで立ち往生ランニングをしている場合、これはあなたのために働くことがあります。

+0

massfordsは、彼が実際にこのようなプロキシを作成する方法を示す偉大な記事を書いたことを忘れていました。http://massfords.com/Proxy-for-AutoCloseable/で見つけることができます。感謝の印! – wpodgorski

関連する問題