[英]handling EJBException in client code
我一直在閱讀有關EJB異常處理的信息,到目前為止,這是我的理解:
假設需要Bean B(服務器)事務屬性:
當我使用caller trans運行它時。 屬性設置為REQUIRED我確實將EJBException包裝在EJBTransactionRolledBackException中。
當我使用caller trans運行它時。 屬性設置為NEVER,我在調用方中捕獲了原始EJBException,而不是包裝在RemoteException中
為什么在第二種情況下我沒有得到RemoteException?
這是我的調用方和服務器Bean的簡化視圖:
@Stateless
public class BeanA implements BeanAInterface{
@Override
public void callBeanB() {
BeanBInterface beanBInterface;
try{
beanBInterface = (BeanBInterface) new InitialContext().lookup(BeanBInterface.class.getName());
beanBInterface.getResponse();
} catch (Exception e){
log.error("Caught Exception: " + e);
}
}
}
@Stateless
public class BeanB implements BeanBInterface{
@Override
public void getResponse(){
throw EJBException("Catch me.");
}
}
編輯:
我在這里僅讀到EJBException被拋出給本地客戶端,而RemoteException被拋出給遠程客戶端。 在我的示例中,調用方Bean與服務器Bean在同一服務器實例中運行,但通過服務器Bean遠程接口進行連接。 我想我對遠程客戶端和本地客戶端的定義也不清楚,但是似乎我沒有得到RemoteException,因為我的客戶端不是遠程的。
確保該容器確實在使用遠程接口,而不是本地接口。
也許您認為您正在呼叫遠程設備,因為您正在指的是遠程設備,但實際上容器對於您將本地呼叫視為“優化”。
我記得我陷入了類似的困境,直到一段時間之后,我才意識到當兩個EJB都在同一VM中時,Jboss將遠程調用視為本地調用。 在我使用遠程接口的情況下,容器未使用按值傳遞(序列化對象),而是傳遞了引用。
因此,我的建議是:確保您處於“遠程方案”中。 嘗試使用兩個jbosses i來使用兩個不同的應用程序服務器,看看是否發生了變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.