我在SLSB
部署了一个远程OC4J
。
此会话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 :(得分:0)
如果异常来自容器管理的事务代码,那么我建议使用bean管理的事务。有了它,您可以在对UserTransaction.commit的调用中将异常处理放在bean中。或者,您可以编写一个拦截器来开始事务,调用InvocationContext.proceed(),然后提交事务并根据需要处理异常。这基本上就是容器为你做的事情,但你可以随意处理提交异常,并且可以在其他bean /方法上重用逻辑。