У меня есть код, в котором управление транзакциями выполняется вручную, Но код вызывает методы других EJB одного и того же приложения, где транзакция не контролируется вручную, например, существуют методы, использующие сеанс Hibernate, который управляемый Контейнером.Ручная транзакция
Как предотвратить мою транзакцию, управляемую вручную, после загрузки коммита, когда есть метод запроса, используя, например, 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
Умм ... в этом случае я считаю, что единственной приемлемой причиной является то, что DAO начинает новую транзакцию. – Leonardo
Спасибо Леонардо – EdeGerSil