Jakarta ee 如何捕获会话bean方法的异常

Jakarta ee 如何捕获会话bean方法的异常,jakarta-ee,ejb,Jakarta Ee,Ejb,我有一个无状态会话bean,它有一个抛出异常(从异常扩展而来)的方法 但我没能抓住例外 try { myBean.myMethod } catch (MyException e) { ... } 下面是堆栈: 警告:Servlet MyServlet的StandardWrapperValve[MyServlet]:PWC1406:Servlet.service()引发异常 java.lang.IllegalAccessError:example/MyException 位于$

我有一个无状态会话bean,它有一个抛出异常(从异常扩展而来)的方法

但我没能抓住例外

try {
    myBean.myMethod
} catch (MyException e) {
    ...
}
下面是堆栈:

警告:Servlet MyServlet的StandardWrapperValve[MyServlet]:PWC1406:Servlet.service()引发异常
java.lang.IllegalAccessError:example/MyException
位于$Proxy327.myMethod(未知来源)
例如,EJB31\u生成的\u MyBean\u Intf\uBean\u.myMethod(未知源)
例如.MyServlet.processRequest(MyServlet.java:36)
例如,MyServlet.doGet(MyServlet.java:71)
...


我认为,这是因为调用bean方法需要通过代理。如何捕获异常?或者应该避免在会话bean中引发异常的方法我希望不是。

正如stacktrace显示的,它实际上是一个IllegalAccessError,被抛出。。。见其API文档:

通过添加
catch(异常e){…}
。。。因为这是一个错误,它不是Exception的子类。如果你真的想抓住它,你必须添加一个
catch(Throwable t){…}
,我非常不鼓励这样做。而是找出抛出错误的原因。我想我们需要看更多你的代码


正如API所说,“通常情况下,编译器会捕获此错误;只有在类的定义发生不兼容的更改时,才会发生此错误”。。。您是否在服务器和客户端上重新部署以确保使用相同的接口定义?

您说的“我无法捕获异常”是什么意思?当从bean方法抛出MyException时会发生什么?当您未捕获异常时也是如此。我在问题中添加了堆栈。我忘了将异常公开。我必须为这项指控向贾维道歉。
try {
    myBean.myMethod
} catch (MyException e) {
    ...
}