제 질문은 여러 EJB 메소드가 호출되는 경우 JSF Bean에서 UserTransaction을 정의해야한다는 것입니다. 이 내 일반적인 시나리오입니다 :여러 EJB 메소드가 호출되는 경우 트랜잭션이 필요합니까?
//jsf bean...
@EJB ejb1;
...
public String process(businessobject) {
ejb1.op1(businessobject);
ejb1.op2(businessobject);
....
}
방법 (세척 및 분리 포함) 같은 복잡한 JPA 엔티티 빈 객체를 조작 모두 EJB를. ejb1.op2()가 호출되기 전에 ejb1.op1()이 호출 될 때 복제 된 곳에서 @oneToMany 관계 중 일부가 내 엔터티 빈을 형성한다는 것을 데이터베이스에서 인식했습니다. 두 ejbs가 새 트랜잭션을 시작한다는 것을 알고 있습니다. 그리고 나에게 지금까지는 아무 것도 괜찮아 보인다. 하지만이처럼 내 JSF 방법에 UserTransaction을 추가하면 JSF 코드는 제대로 작동 : 나는 모두 EJB가 하나 UserTransaction을로 호출을 캡슐화 할 필요가 있다고 기대하지 않았다
//jsf bean...
@Resource UserTransaction tx;
@EJB ejb1;
...
public String process(businessobject) {
try {
tx.begin();
ejb1.op1(businessobject);
ejb1.op2(businessobject);
finaly {
tx.commit();
}....
}
. 왜 이것이 필요한가?
감사 : 거래의이 좋은 읽을 수 있습니다 이유에 관해서는
. 그게 정확히 내가 의심 한 것입니다. 호출을 하나의 ejb 메소드/트랜잭션으로 모으겠습니다. 매우 드물게 발생했던 이상한 행동은 이제 사라졌습니다. 저는 항상 JSF 메소드가 새로운 트랜잭션 컨텍스트를 시작한다고 생각했습니다. – Ralph