EJB容器吞下异常

时间:2014-03-20 11:01:20

标签: java eclipse jsf ejb-3.0 glassfish-3

我最近开始将EJB用于我正在开发的应用程序,但是,我遇到了异常处理的问题。简而言之,我的业务层正在抛出自定义异常,但它们永远不会陷入Web层。

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

  • IDE:Eclipse Kepler
  • Java版本:1.7
  • 应用程序服务器:Glassfish 3.1.2
  • JSF 2.1

我的代码:

远程接口:

@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容器。

顺便说一句,异常也出现在我的服务器日志中(这证明它们实际上已被抛出)

从我的代码中可以看出,我还使用拦截器来处理日志记录和参数验证。我不认为他们会导致这些问题,但我可能错了......

我似乎错过了什么或做错了什么,但我不知道是什么,所以如果有人可以帮我解决这个问题,那就太棒了!

0 个答案:

没有答案