1

我有一个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打印了消息!

这是怎么回事??

4

1 回答 1

0

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

于 2012-02-08T15:01:24.190 回答