【问题标题】:Catching exception from DAO to the first class calling method,从DAO捕获异常到第一类调用方法,
【发布时间】:2023-11-08 03:57:02
【问题描述】:

我的应用架构是这样的:

主类 -> ServiceBean -> Manager -> DAO。

我在我的 DAO 中抛出了一个异常:

catch (HibernateException he) {
        throw new RemuRuntimeLoggableException(he, RuntimeLoggableException.HIBERNATE_UNKNOWN);
    }

然后在 Manager 中我捕获到如下异常:

catch (RuntimeLoggableException e) {
                            log.info(e.getMessage());
                            e.printStackTrace();
                            throw new RuntimeLoggableException(e, RuntimeLoggableException.HIBERNATE_UNKNOWN);

在我的 ServiceBean 中,我有这个:

catch (RuntimeLoggableException e) {
        log.info(e.getMessage());
        e.printStackTrace();
        throw new RemoteException();

在我的主课中,我发现了这样的异常:

catch (RemoteException e) {
        log.info(prefixeLog + " Error");
        log.info(e.getMessage());

我还有一个接口Service.java。 ServiceBean实现了这个接口,这里涉及的方法在接口Service.java中声明如下:

 public void calculate( boolean flag )
  throws java.rmi.RemoteException;

我遇到的问题是来自 ServiceBean 的异常 RemoteException 未在主类中捕获。而且我不能修改接口Service.java,因为它是由XDoclet 自动生成的。请问您知道怎么做吗?

在我的 Service.java 中,方法是这样声明的:

  public void calculate( boolean flag )
  throws java.rmi.RemoteException;

在我的班级中,它声明如下:

 public static void main(String[] args) throws RuntimeLoggableException {
 try {
        log.info("Start" + prefixeLog);
        serviceBean.calculate(true);
        log.info("End" + prefixeLog);
    } catch (RemoteException e) {
        log.info(prefixeLog + " Error");
        log.info(e.getMessage());
    }
    finally {
        InitFramework.stopFramework(FrameworkFacade.BATCH);
        System.exit(retour);
    }
}

在我的 serviceBean 中:

 public void calculate(boolean flagExclurePlansPerimes) throws RemoteException {

【问题讨论】:

  • RemoteException 是否有可能在多个库上有多个实现?尝试主要拥有:catch (java.rmi.RemoteException ex) { ... }
  • @AvihooMamka:您的解决方案也不起作用。主班和其他班在不同的项目上。我在我的问题中添加了更多解释。请检查一下好吗?
  • 如果这仍然是一个问题,您能否添加您收到的日志消息?

标签: java exception rmi


【解决方案1】:

您正在记录RemoteException 的消息,但您被抛出了一个RemoteException,它是在没有消息的情况下构造的。

【讨论】:

  • 我已经修改了我的代码以抛出带有消息的 RemoteException ,但这仍然不起作用。主类和其他类在两个不同的项目中。
相关资源