我最近开始将EJB用于我正在开发的应用程序,但是,我遇到了异常处理的问题。简而言之,我的业务层正在抛出自定义异常,但它们永远不会陷入Web层。
首先,这是我正在使用的软件:
我的代码:
远程接口:
@Remote
public interface IUserService {
public UserRequest createAccount(<some string parameters>) throws ApplicationException;
}
无状态会话bean:
@Stateless
public class UserServiceImpl implements IUserService {
@Override
@Interceptors({ LoggingInterceptor.class, CheckParametersInterceptor.class })
public UserRequest createAccount(<some string parameters>) throws ApplicationException {
throw new ApplicationException("Exception thrown");
return null;
}
}
JSF托管bean:
public class CreateAccountBean {
@EJB
IUserService userService;
public CreateAccountBean() {
}
public String confirmCreate() {
try {
userService.createAccount(<some string values>);
} catch (ApplicationException e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMsgDetail()));
}
return "create_succeeded";
}
}
当我调用managedbean&#34; CreateAccountBean&#34; businesslayer(在UserServiceImpl中)抛出异常,但是,当我通过我的代码调试时,我从未到达调用方法的catch子句。在尝试删除@EJB注释并将其替换为对构造函数的调用之前,我一直无法找到解决方案。此时,异常实际上是由托管bean在Web层中捕获的,但这并没有解决我的问题,因为我此时不再使用EJB了,而是因为发生这种情况我假设它是吞噬异常的EJB容器。
顺便说一句,异常也出现在我的服务器日志中(这证明它们实际上已被抛出)
从我的代码中可以看出,我还使用拦截器来处理日志记录和参数验证。我不认为他们会导致这些问题,但我可能错了......
我似乎错过了什么或做错了什么,但我不知道是什么,所以如果有人可以帮我解决这个问题,那就太棒了!