私はトランザクション制御が手動で行われるコードを持っています しかし、このコードは、トランザクションが手動で制御されない同じアプリケーションの他のEJBのメソッドを呼び出します。たとえば、Hibernate Sessionを使用するメソッドコンテナによって管理されます。手動管理トランザクション
たとえば、Session.createCriteriaを使用してクエリメソッドがある場合、手動で管理されたトランザクションがコミットをダウンロードしないようにする方法。
これが発生すると、プロセスは実際にプロセスが完了する前にコミットをアンロードします。
例
private void exe() throws Exception {
@EJB Businessbusiness;
this.beginTransaction();
business.processar(); // Exemplo
this.commit();
}
@Stateless
public class Business() {
@EJB
private DAO dao;
private void processar() throws Exception {
// executando processo 1
this.save();
// executando processo 2
this.update();
// Saving and updating has not yet been committed. So far it is correct.
Teste = dao.buscarTeste(1L);
// Here, after performing the search, my transaction downloads the commit to the bank without completing the whole process.
}
}
@Stateless
public class DAO() {
public Teste buscarTeste(Long codigo) {
Criteria cri = getSession().createCriteria(Teste.class);
cri.add(Restrictions.eq("codigo", codigo));
return (Teste) cri.uniqueResult();
}
}
これは会社自身のフレームワークのデフォルトですが、getSessionはアクセスできない場所にカプセル化されています。あなたの反応をありがとう、レオナルド、私は本当にこの動作を理解していません。 – EdeGerSil
Uhm ...この場合、唯一の受け入れ可能な理由は、DAOがまったく新しい取引を開始しているということです。 – Leonardo
ありがとうございましたLeonardo – EdeGerSil