Java EJB容器吞咽异常
我最近开始在我正在开发的应用程序中使用EJB,但在异常处理方面遇到了问题。简言之,我的businesslayer正在抛出定制的异常,但它们从未在web层中被捕获 首先,这是我正在使用的软件:Java EJB容器吞咽异常,java,eclipse,jsf,ejb-3.0,glassfish-3,Java,Eclipse,Jsf,Ejb 3.0,Glassfish 3,我最近开始在我正在开发的应用程序中使用EJB,但在异常处理方面遇到了问题。简言之,我的businesslayer正在抛出定制的异常,但它们从未在web层中被捕获 首先,这是我正在使用的软件: IDE:日食开普勒 Java版本:1.7 应用服务器:Glassfish 3.1.2 JSF2.1 我的代码: 远程接口: @Remote public interface IUserService { public UserRequest createAccount(<some string
- IDE:日食开普勒
- Java版本:1.7
- 应用服务器:Glassfish 3.1.2
- JSF2.1
@Remote
public interface IUserService {
public UserRequest createAccount(<some string parameters>) throws ApplicationException;
}
@Remote
公共接口服务{
public UserRequest createAccount()引发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;
}
}
@无状态
公共类UserServiceImpl实现IUserService{
@凌驾
@拦截器({LoggingInterceptor.class,CheckParametersInterceptor.class})
public UserRequest createAccount()引发ApplicationException{
抛出新的ApplicationException(“抛出异常”);
返回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";
}
}
公共类CreateAccountBean{
@EJB
IUserService用户服务;
公共CreateAccountBean(){
}
公共字符串confirmCreate(){
试一试{
userService.createAccount();
}捕获(ApplicationException e){
FacesContext.getCurrentInstance().addMessage(空,新的FacesMessage(FacesMessage.SEVERITY_错误,e.getMessage(),e.getMsgDetail());
}
返回“创建成功”;
}
}
当我调用managedbean“CreateAccountBean”时,businesslayer(在UserServiceImpl中)会抛出一个异常,然而,当我调试代码时,我从未到达调用方法的catch子句。我一直无法找到解决方案,直到我尝试删除@EJB注释并用调用构造函数来替换它们。在这一点上,异常实际上是由托管bean在web层捕获的,但这并不能解决我的问题,因为在这一点上我不再使用EJB了,但因为发生了这种情况,我假设是EJB容器吞下了异常
顺便说一句,异常也出现在我的服务器日志中(这是它们实际上被抛出的证据)
从我的代码中可以看到,我还使用拦截器来处理日志记录和参数验证。我不认为是他们造成的问题,但我可能是错的
似乎我错过了什么或做错了什么,但我不知道是什么,所以如果有人能在这方面帮助我,那就太好了 您的
应用程序异常是什么类型的异常?它是运行时异常吗?它是用javax.ejb.ApplicationException
注释的吗?它的名字实际上不是ApplicationException,我只是为了更清楚地把它重命名了。它扩展了类异常,所以它是一个检查异常。在拦截器中异常处理是什么样子的?我在拦截器中不做异常处理。。。仅参数验证和日志记录