容器管理的事务和Java持久性API

时间:2012-10-02 08:10:10

标签: java-ee jpa transactions

我对JPA中的容器管理事务有一些疑问。例如,我有一个带有托管bean的JSF页面,它调用了一个会话bean的方法:

@ManagedBean
@RequestScoped
public class TestController {
    @EJB
    private TestBean bean;

    public String action() {
        bean.check();
        return null;
    }
}

@Stateful
@LocalBean
public class TestBean {
    @PersistenceContext
    private EntityManager em;

    public Object check() {
        return em.createQuery("SELECT u from User u WHERE u.id = 1").getSingleResult();
    }
}

我是否理解正确,如果在同一事务中调用check()方法,则EntityManagers将具有相同的持久性上下文,并且该方法将一遍又一遍地返回相同的Object

如果控制器的action()方法有多个请求,EntityManagers每个请求会有不同的持久化上下文吗? 它取决于会话bean的类型:有状态还是无状态?

如果我将控制器的范围更改为@SessionScoped并从同一会话创建多个请求,该怎么办?

通常,是否有任何规则定义容器何时创建新事务?它取决于容器类型(我正在使用Glassfish)吗?

0 个答案:

没有答案