我想回滚事务不是在 EJB 内部,而是在 JSF 托管 bean 内部。在 EJB 中我们可以使用SessionContext.setRollBackOnly()
,但我可以在托管 bean 中使用什么?
@Stateless
@Local(AccountLocal.class)
public class AccountBean implements AccountLocal {
public void test1() throws CustomException(){
...
}
public void test2() throws CustomException(){
...
throw new CustomException();
}
public void test3() throws CustomException(){
...
}
public void all() throws CustomException(){
test1();
test2();
test3();
}
}
在我的托管 bean 中:
@SessionScoped
public class LoginBean implements Serializable{
public void test(){
try{
accountBean.test1();
accountBean.test2();
accountBean.test3();
}catch(CustomException e){
// WHAT HERE TO ROLLBACK TRANSACTION ?
}
}
}
编辑:我如何确保如果其中一个或回滚,其他人也会回滚test1
?test2
test3
我测试了这段代码,accountBean.test1();
即使accountBean.test2();
回滚也得到了验证。
解决方案是否只能将这 3 种方法嵌套在一个 EJB 方法中?
@SessionScoped
public class LoginBean implements Serializable{
public void test(){
try{
accountBean.all();
}catch(CustomException e){
...
}
}
}