2016-11-21 6 views
0

У меня есть код, в котором управление транзакциями выполняется вручную, Но код вызывает методы других 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(); 
    } 
} 

ответ

0

Я не уверен, что я на самом деле получил свою точку зрения.

Но при условии, что вы не получаете никаких ошибок, когда вы вызываете метод Business.processar(), он наследует транзакцию. Которая остается «ожидающей» до тех пор, пока клиент exe не совершит.

Итак, я бы изучил, что делает ваш getSession() в середине, я вполне уверен, что он начнет новую транзакцию, которая будет извлекать незафиксированные данные.

Кстати, есть ли причина использования спящего режима вместо JPA с гибернацией в качестве конкретной реализации?

+0

Это по умолчанию каркас самой компании, в нее инкапсулируется getSession, где я не могу получить доступ. Спасибо за ваш ответ, Леонардо, я тоже не понимаю этого поведения. – EdeGerSil

+0

Умм ... в этом случае я считаю, что единственной приемлемой причиной является то, что DAO начинает новую транзакцию. – Leonardo

+0

Спасибо Леонардо – EdeGerSil

Смежные вопросы