2012-02-07 86 views
1

我有一个远程SLSB部署在OC4JEJB远程异常处理

本会话Bean使用TopLink,在某些情况下抛出oracle.toplink.essentials.exceptions.QueryException异常。

我处理这个例外是这样的:

public void slsbMethod() 
{ 
    try 
    { 
     // oracle.toplink.essentials.exceptions.QueryException throws here 
    }catch(Exception ex) 
    { 
     // do nothing 
    } 
} 

而且我从客户端访问该SLSB这样:

try 
{ 
    fooBarService.slsbMethod() 
}catch(Exception ex) 
{ 
    System.out.println("Exception calling the EJB server"); 
} 

但是我处理的EJB这个例外,还是我得到消息Exception calling the EJB server印!

这是怎么发生的?

+0

什么是错误的异常堆栈跟踪?您确定异常是从您的方法中抛出,而不是从EJB容器中的容器管理的事务代码中抛出吗? – 2012-02-07 23:27:42

+0

是的你是对的,它可能从EJB容器中的容器管理的事务代码中抛出,那么如何解决这个问题呢? – 2012-02-08 11:04:00

回答

0

如果异常来自容器管理的事务代码,那么我会建议使用bean管理的事务。通过这一点,您可以在UserTransaction.commit调用周围的bean中进行异常处理。或者,您可以编写一个拦截器来开始事务,调用InvocationContext.proceed(),然后提交事务并根据需要处理异常。这基本上是容器为你做的,但你可以随意处理提交异常,并且可以在其他bean /方法上重用逻辑。