Jsf 托管bean上的事务
下午好,在我的时区 我正在开发一个使用JavaEE6的WEB应用程序,更确切地说是使用JPA、JSF和EJB。在JSF页面中,我调用一个方法将数据保存到数据库中Jsf 托管bean上的事务,jsf,jpa,ejb,managed-bean,jta,Jsf,Jpa,Ejb,Managed Bean,Jta,下午好,在我的时区 我正在开发一个使用JavaEE6的WEB应用程序,更确切地说是使用JPA、JSF和EJB。在JSF页面中,我调用一个方法将数据保存到数据库中 @ManagedProperty(value = "#{jndi['ejb/objectEAO']}") private ObjectEAO objectEAO; public void save(){ ... for(Type1 type : list){ if(..){
@ManagedProperty(value = "#{jndi['ejb/objectEAO']}")
private ObjectEAO objectEAO;
public void save(){
...
for(Type1 type : list){
if(..){
....
objectEAO.save(type);
}
}
}
我的问题是:
默认情况下,save方法是事务性的吗?如果第三次插入由于某种原因失败,是否回滚所有进程?
objectEAO是一个EJB
提前谢谢。
EJBbean中的
save()
方法是事务性的(假设CMT是容器管理的事务),而不是JSF管理的bean中的方法。因此,如果一次插入失败,它将只回滚该操作,而不会影响以前的插入。确定吗?如果调用ObjectEAO.save()时有一个事务处于活动状态,我会预料到这些更改和登记在该事务中,如果没有,那么它们都会合并到一个事务中,在ObjectEAO.save()返回时提交?@hugh事务在JSF托管bean中不太可能已经处于活动状态(除非使用视图中的开放会话模式)。这意味着托管bean只是在循环中调用EJB服务的客户端,如果使用CMT(EJB的默认行为),则容器在服务调用之前启动事务,并在最后关闭它。没有机制将所有调用连接到一个事务中。