1

我有一个应用程序,其中包含一个使用 Spring 和休眠的 web 服务,以便从数据库中检索数据。其他应用程序在其应用程序中调用此 Web 服务。

网络服务流程:

Webservice类方法(调用管理器类方法)-->管理器类方法--->调用DAO方法)

 Webservice class :

 public List getXXX(){
      managerClass.getXX();

  }

 manager Class:

 @Transactional(readOnly=true)

 Public List getXX(){
      DAOClass.getX();
  }

DAO 类(它使用休眠和逻辑来检索数据):

   public List getX(){
      Criteria query 
     =getSessionFactory().getCurrentSession()
   .createCriteria(dataObject.class);
    query.add(Restrictions.eq(dataObject.type, systemId));
    query.addOrder(Order.asc(dataObject.TYPE));
    query.addOrder(Order.asc(dataObject.code));

    return query.list();

    }

此 Web 服务方法(通过调用管理器和 DAO 类)从数据库中提供列表。除了有时,它一直运行良好。

我没有更新或插入任何数据,我只是获取数据

(流程是:Webservice --> manager Class--> DAO --> hibernate)

一个客户正在访问此方法以在其应用程序中获取列表。他一直在正确获取数据。但有时他会收到此异常:

javax.xml.ws.soap.SOAPFaultException:无法回滚休眠事务;嵌套异常是 org.hibernate.TransactionException:JDBC 回滚
在 org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1346)
处失败。 alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:1072)
在 org.apache.axis2.jaxws.marshaller.impl.alt.DocLitWrappedMethodMarshaller.demarshalFaultResponse(DocLitWrappedMethodMarshaller.java:593)
在 org.apache.axis2.jaxws.client.proxy。 JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:559)
在 org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:404)
在 org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:497)
在 org.apache .axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:208)

根据 Spring 默认行为,每当抛出异常时,它都会尝试回滚。这就是它正在尝试的,但不知何故无法回滚。由于它是使用注释的声明性事务,我如何跟踪此异常的确切原因?基于异常,我肯定知道 DAO 类方法正在抛出异常。但我无法跟踪确切原因(无论是连接关闭问题还是其他任何事情)。我只想在 DAO 类中使用异常处理以便知道确切的原因。我可以在 DAO 类方法中使用 try/catch 块来打印确切原因的堆栈跟踪吗?我只是想再次提醒一下,它一直工作正常,但有时因为这个异常而无法工作。

我希望我清楚地解释了我的问题。请通过提供解决方案来做必要的事情。

4

0 回答 0