Struts 2 execAndWait + Spring事务管理集成

时间:2018-02-21 11:36:31

标签: java spring struts2

我正在执行需要一段时间的操作,因此我使用自定义Struts' ExecuteAndWaitInterceptor。我启动了一个自定义BackgroundProcess,它在调用之前打开一个事务,并在调用之后关闭它。

我呼叫的操作使用的服务具有以下Spring的交易建议:

<tx:method name="search" propagation="REQUIRED" />

但是,当我执行此操作时,出现以下错误:

Could not open Hibernate Session for transaction; nested exception 
  is org.hibernate.TransactionException: nested transactions not supported

我猜这是因为Spring无法看到BackgroundProcess中打开的事务并尝试打开一个新事务。因此,会发生此错误。

如何配置我的BackgroundProcess以便它打开Spring看到的事务?

或者,当BackgroundProcess正在运行时,如何阻止Spring干扰?

1 个答案:

答案 0 :(得分:1)

应为spring bean配置Spring托管事务。您无法管理在没有上下文的情况下创建的Bean上的事务。

因此,您必须将Spring配置为使用Bean的托管实例或将其从事务通知中排除。