EJB将所有异常包装到EJBException中

时间:2015-01-13 13:09:34

标签: java jboss ejb

假设我有一个 @Stateless bean:

@Local
public interface A {
    public void check() throws MyException {
}

@Stateless
public class AImpl implements A {
    public void check() throws MyException {
        ...
        try {
            data = getDataFromService();
        } catch (RException e) {   
            throw new MyException(e);
        }
    }
}

例外:

public class MyException extends Exception{}
public class RException extends RuntimeException{}

当我使用 @EJB 注释并执行 check()方法将此bean注入其他类时,我得到 EJBException < / strong>以 MyException 为原因......

public class B {
    @EJB private A a;
    public void start() {
        try {
            a.check();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }
}

如何让它抛出适当的异常?

任何想法如何让它正常工作?

有没有办法让它在不拦截 EJBException 抛出的情况下工作,并重新抛出其异常原因?

1 个答案:

答案 0 :(得分:6)

我认为您的MyException扩展了RuntimeException,因此它是未经检查的例外。在这种情况下,您可以使用@ApplicationException注释来注释您的例外。因此,您的异常将是应用程序异常而不是系统异常。抛出系统异常时,它将打包在EJBException中,但应用程序异常会直接抛出到客户端。