假设我有一个 @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 抛出的情况下工作,并重新抛出其异常原因?
答案 0 :(得分:6)
我认为您的MyException
扩展了RuntimeException
,因此它是未经检查的例外。在这种情况下,您可以使用@ApplicationException
注释来注释您的例外。因此,您的异常将是应用程序异常而不是系统异常。抛出系统异常时,它将打包在EJBException中,但应用程序异常会直接抛出到客户端。