我正在使用POJO(实际上是一个POGO)实现一个自定义Transformer,它基本上是一个文本转换服务。
我想让它“了解”它所属的事务,并且在事务结束时,如果整个事务成功则调用方法,如果事务回滚则调用另一个方法。
任何提示?
谢谢!
答案 0 :(得分:2)
您需要的是TransactionSynchronization
。但是我不确定你是否应该担心这么低的级别,而且仅仅try...catch
TX的内容就足够了。
即使它是POJO(或POGO?),您也可以将其配置为<transformer>
(@Transformer
)。 Spring Integration中的这种组件具有<request-handler-advice-chain>
(adviceChain
)选项,可以在Advice
方法调用周围插入任何handleRequestMessage
实现。
为了您的目的,您可以这样做:
<transformer>
<request-handler-advice-chain>
<beans:bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
<beans:property name="onSuccessExpression" value=""/>
<beans:property name="onFailureExpression" value=""/>
</beans:bean>
<tx:advice>
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
</request-handler-advice-chain>
</transformer>
TX语义将被ExpressionEvaluatingRequestHandlerAdvice
包裹,在TX结果上调用所需的操作,这基于我们的情况,基于TX rallback上Exception
的事实。
有关<request-handler-advice-chain>
的更多信息,请参阅Reference Manual。