EntityMangerには、@PersistenceContext
注釈が挿入されています。これは私の "DAO/Repository"クラスのメソッドであり、アノテーションは付けられていません。このクラスは、データベースとの間でデータを取得する必要があるEJBに注入されます。EntityManager.persist()の後の処理
これまでは、以下のpersistメソッドの終了後にpersistencecontextがフラッシュされ、データがデータベースに格納されていたと思っていましたが、私のアプリで何が起きているのか疑い始めました。私はGlassfishでデータソースと接続プールを作っていますので、コンテナ管理のトランザクションを使用していますが、トランザクションの注釈は使用していません。
誰かが私のためにいくつかの光を投げることができますか?
public void persist(QuestionFeedback questionFeedback) {
questionFeedback.setCreated(new Date());
entityManager.persist(questionFeedback);
}
Glassfishの3を使用するには、JavaのEE6 compatiblity
これは、ビジネスメソッドがトランザクション(私のコードで上記のpersistメソッドを呼び出すメソッド)を開き、閉じた後、トランザクションがコミットされるということですか?それとも私はあなたを誤解していますか? – LuckyLuke
はい、persistメソッドを呼び出すメソッドのクライアントにトランザクションコンテキストがない場合。そして、あなたのケースでは、コンテナは、メソッドの開始と終了でトランザクションの開始とコミットに注意を払わなければなりません。クライアントが既存のトランザクションを持っていれば、あなたのメソッドはそれに結合し、クライアントのどこかでコミットが行われます。トランザクションの属性が定義されていないこれらのメソッド呼び出しのレイヤ数は関係ありませんが、ロジックは同じです。トランザクションは最初のトランザクションで開始され、コミットされます。 –