EJB3的異常處理問題

kindywu發表於2006-05-18
這個問題是我在Jboss的SEAM的message例子裡面遇到的.
情況這樣:
程式由JSF呼叫SessionBean呼叫EntityManager去刪除一個實體物件。
而同時我是先從資料庫中刪除了這條記錄,並且期待捕獲到一個併發錯誤。
SessionBean程式碼片斷如下:
try {
//刪除一個ejb3的實體類message
em.remove(message);
message = null;
} catch (Exception e) {//這個捕獲沒有任何意義.
e.printStackTrace();//事實上資料庫裡面已經沒有這條記錄了,我已經在外部把它刪除掉,但是一般資料庫執行刪除語句沒有返回錯誤.所以沒有進入.
return null;
}

System.out.println("pass");//正常執行

但是最後,Jboss的EJB3服務是由AOP實現的,SessionBean的函式支援事務,函式執行完,在他提交的時候由hibernate的Commit函式去檢測,發現了併發錯誤。這時候程式碼無法進行任何處理。error return 0 expert is 1,希望返回1,但是實際上沒有刪除任何行.

我想問一下彭老師,這是EJB3的介面定義有問題,因為它沒有返回異常,還是AOP的實現上存在缺陷呢?如何捕獲這類異常,如果他是由AOP實現的.

相關文章