Tenho um código onde o controle de transação é feita manualmente,
porém o código chama métodos de outros EJB’s da mesma aplicação onde a transação não é controlada manualmente.
Como evitar que minha transação gerenciada manualmente não descarregue os commit quando existir um método que a transação não está sendo gerenciada manualmente.
Quando isso ocorre, minha transação descarrega os commit antes que meu processo realmente esteja concluído.
Exemplo
@TransactionManagement(TransactionManagementType.BEAN)
public class Init() {
@EJB Business business;
private void exe() throws Exception {
try{
this.beginTransaction();
business.processar(); // Exemplo
this.commit();
}catch(Exception e){
rollback();
}
}
}
@Stateless
public class Business() {
@EJB
private DAO dao;
private void processar() throws Exception {
// executando processo 1
this.save();
// executando processo 2
this.update();
// Quando eu executo esse método buscarTeste(), a aplicação descarrega no banco os commit dos processos anterior
Teste = dao.buscarTeste(1L);
}
}
@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();
}
}