【发布时间】:2015-01-11 12:34:59
【问题描述】:
我的问题是,如果调用多个 EJB 方法,是否需要在 JSF Bean 中定义 UserTransaction。 这是我的一般情况:
//jsf bean...
@EJB ejb1;
...
public String process(businessobject) {
ejb1.op1(businessobject);
ejb1.op2(businessobject);
....
}
两个 ejbs 方法都操作同一个复杂的 jpa 实体 bean 对象(包括刷新和分离)。我在数据库中认识到,当在 ejb1.op2() 之前调用 ejb1.op1() 时,一些 @oneToMany 关系形成了我的实体 bean,这些关系在重复。 我了解两个 ejb 都开始了新事务。对我来说,到目前为止一切都很好。 但是只有当我像这样将 UserTransaction 添加到我的 jsf 方法中时,JSF 代码才能正常工作:
//jsf bean...
@Resource UserTransaction tx;
@EJB ejb1;
...
public String process(businessobject) {
try {
tx.begin();
ejb1.op1(businessobject);
ejb1.op2(businessobject);
finaly {
tx.commit();
}....
}
我没想到有必要将两个 ejb 调用封装到一个用户事务中。为什么需要这样做?
【问题讨论】:
标签: jpa jsf-2 transactions ejb