我正在执行需要一段时间的操作,因此我使用自定义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干扰?
答案 0 :(得分:1)
应为spring bean配置Spring托管事务。您无法管理在没有上下文的情况下创建的Bean上的事务。
因此,您必须将Spring配置为使用Bean的托管实例或将其从事务通知中排除。