Java EJB容器吞咽异常

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

我最近开始在我正在开发的应用程序中使用EJB,但在异常处理方面遇到了问题。简言之,我的businesslayer正在抛出定制的异常,但它们从未在web层中被捕获

首先,这是我正在使用的软件:

  • 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,我只是为了更清楚地把它重命名了。它扩展了类异常,所以它是一个检查异常。在拦截器中异常处理是什么样子的?我在拦截器中不做异常处理。。。仅参数验证和日志记录