2011-02-02 8 views
0

私は通常、このようなJava SEメソッドをレイアウトします。私はこのような単純な読み取りの例外をキャッチしようとする必要がありますか?私は任意の挿入物のキャッチを使用して見ることができますが、これは私が必要が表示されません。ちょうど提案を求める。EnityManagerのクエリの例外をキャッチする必要がありますか?

public List<PkgLineStateHistory> findAllStateHistory() { 

    EntityManager em = getEntityManager(); 
    List<PkgLineStateHistory> list = null; 
    try { 
     return em.createNamedQuery("PkgLineStateHistory.findAll").getResultList();   
    } finally { 
     em.close(); 
    } 
} 

答えて

1

Java SEアプリケーションの場合(あなたの場合)、EntityManagerFactoryを自分で管理している可能性があるので、EMを閉じる​​ことをお勧めします。

管理対象環境では、EMを提供するJava EEコンテナ内のように、コンテナが管理しているため、EMを閉じる​​必要はありません。些細なことだが、必ずしも明白ではない;-)

1

は、あなたが他のあなたのトランザクションは、文句を言わないロールバックし、トランザクション境界の外まで例外バブルを聞かせする必要があります(あなたはあなたがする必要があるよりも、より多くの仕事がある、明示的にトランザクションを処理する場合を除きます)。

また、私はfinally節が実際に例外をキャッチしているとは思っていません。

FWIW、ほとんどのWebアプリケーション私は、例外をすべて吹き飛ばすのを見てきましたし、適切な応答を呼び起こすいくつかの一般的なエラー処理メカニズムを持っています。あなたがそれらで何かをするつもりならば、例外をキャッチしてください。

+2

この例では、例外*が伝播されています。彼の主張は、tryブロックに自分のステートメントをラップして、最終的には "close"にするのか? – jpkrohling

関連する問題