【问题标题】:EJB Remote Exception handlingEJB 远程异常处理
【发布时间】:2012-02-07 16:57:53
【问题描述】:

我有一个远程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 打印!

这是怎么回事??

【问题讨论】:

  • 错误的异常堆栈跟踪是什么?您确定异常是从您的方法中引发的,而不是从 EJB 容器中容器管理的事务代码中引发的吗?
  • 是的,你是对的,它可能是从 EJB 容器中的容器管理事务代码中抛出的,那么如何解决这个问题?

标签: exception ejb rmi oc4j


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多