2012-06-12 67 views
0

我有一個無狀態的會話bean和一個引發異常的方法(它從Exception中擴展)。如何捕獲會話bean的一個方法的異常

@Stateless 
@LocalBean 
public class MyBean { 
    ... 
    public void myMethod() throws MyException { 
     ... 
    } 
} 

但我無法捕捉到例外。

try { 
    myBean.myMethod 
} catch (MyException e) { 
    ... 
} 

這裏是堆棧: WARNING: StandardWrapperValve[MyServlet]: PWC1406: Servlet.service() for servlet MyServlet threw exception java.lang.IllegalAccessError: example/MyException at $Proxy327.myMethod(Unknown Source) at example.EJB31_Generated_MyBean_Intf_Bean_.myMethod(Unknown Source) at example.MyServlet.processRequest(MyServlet.java:36) at example.MyServlet.doGet(MyServlet.java:71) ...

我認爲,這是因爲在調用Bean方法經過代理。我怎樣才能捕捉到異常?或者應該避免在會話bean中拋出異常的方法? - 我希望不是。

+0

你是什麼意思與「我無法趕上例外」?從Bean方法拋出MyException時會發生什麼? –

+0

當你沒有發現異常時也是如此。我添加了堆棧的問題。 – ziri

回答

1

的堆棧跟蹤顯示它實際上是被拋出IllegalAccessError ...查看它的API文檔:http://docs.oracle.com/javase/6/docs/api/java/lang/IllegalAccessError.html

您將無法通過添加catch (Exception e) {...}趕上這個......因爲這是一個錯誤,這是不是一個異常的子類。如果你真的想抓住它,你將不得不添加catch (Throwable t) {...},我非常反感。而是找出引發錯誤的原因。我認爲我們需要看到更多的代碼......

由於API說「通常,這個錯誤被編譯器捕獲;只有在運行時纔會發生此錯誤,如果類的定義發生了不兼容的更改」 ...你是否重新部署服務器和客戶端以確保使用相同的接口定義?

+0

我忘了公開例外。我必須爲這個指責向JaveEE道歉。 – ziri