2012-03-14 6 views
1

古いJava EEプロジェクトがあります。データベース接続の不良により、どこかで正しく閉じられなかったり、catch/finallyブロックでクリーンアップされませんでした。軽量なJava EEフレームワークを理解するのに助けが必要

データベース接続プールを100接続に制限しました。場合によっては、接続が開いたままになり、100の接続がすべて使用されるため、アプリケーションがハングアップすることがあります。私はこのプロジェクトを再構築しようとしていますが、私がそこに着くときにこの悪いコードを処理することは明らかです。conn.close()を書くことなくこのオープンされたdb接続を自動的に閉じる軽量のJava EEフレームワークがあるのでしょうか? session.close()。

多分、Djangoのようなもので、毎回のリクエスト/再配置サイクルの終わりにすべてのdb接続が閉じられるようなものかもしれません。

私はp6spyやIronTrack SQLのようなツールを使って閉じることができない文を探すことができると知っていますが、このプロジェクトでは何も使われていないため、フレームワークにもっと興味があります。フレームワークを使ったプロジェクト

答えて

1

Java 7のtry-with-resourceが役に立ちます。 あなたが同様の質問をすることができます。ここJava 7 Automatic Resource Management JDBC (try-with-resources statement)を見

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html

してください。

接続リークの検出を確認します。私は確信しています、あなたはこれのためのいくつかのツールを見つけるでしょう。

0

私はあなたがいくつかの異なるフレームワークを辿るべきだと思っています。あなたがそれらを検索し、あなたの現在および将来のニーズに最も適したものを選ぶなら、デモが利用できるはずです。私は個人的にPrimefaces/Hibernate(あなたがJSFにいる場合)が好きです。

0

Java EEの軽量アプローチは、DB作業を行うEJBと呼ばれる単純なPOJOベースのBeanを使用することです。

多くの場合またはすべての場合、DB接続は、サーバーによってカバーされた状態で完全に処理されるものです。例えば

(今のクエリを想定し、ネイティブSQLです):

@Stateless 
public class MyBean { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public void doDBWork() { 
     entityManager.createNativeQuery("update foo set a = 1").executeUpdate(); 
    } 
} 

この例では、トランザクションが自動的に起動し、そのメソッドを離れるとき、それが終了しdoDBWorkを呼び出すとき。接続の間のどこかに接続プールから取得され、接続プールに戻されます。このコードは、例外または同時アクセスにもかかわらず、自動的に完全に安全です。

関連する問題