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つのメソッドを1つのEJBメソッド内にネストすることだけでしょうか?
@SessionScoped
public class LoginBean implements Serializable{
public void test(){
try{
accountBean.all();
}catch(CustomException e){
...
}
}
}