4

コンテナ管理のトランザクションを使用するインターフェイスを備えた@StatelessEJBがあります。つまり、メソッドが呼び出された後、システム例外がスローされない場合、トランザクションはコンテナによって自動的にコミットされます。@WebService

一意の制約がある列に同じ値を持つ2つのオブジェクトを試行するEntityManager.persist(...)と、コンテナーはPersistenceExceptionコードの外部でコミット時にクライアントにをスローします。この例外をキャッチして、自分のアプリケーション例外を再スローできるようにするにはどうすればよいですか?

コミット時に例外をキャッチするには、メソッドでトランザクションを手動でコミットする必要がありますか?(そしてそれEntityManager.flush()を行う正しい方法はありますか?)もしそうなら、コンテナー管理トランザクションを持つことのポイントは何ですか?

4

1 に答える 1

4

残念ながら、コンテナー管理のトランザクションの失敗から例外をキャッチすることはできません。あなたが述べたように、最善の選択肢は、Bean 管理のトランザクションを使用することです。または、EM EJB を同じインターフェースを実装するプロキシ Bean でラップすることもできます。コンテナー管理のトランザクションは、コードが特定のコミット エラーに応答する必要がない場合に適しています。

于 2010-10-27T04:31:44.723 に答える