【发布时间】:2011-11-13 19:31:08
【问题描述】:
我有这个用例。
第一链:
<int:chain input-channel="inserimentoCanaleActivate" output-channel="inserimentoCanalePreRouting">
<int:service-activator ref="inserimentoCanaleActivator" method="activate" />
</int:chain>
这是相关代码:
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public EventMessage<ModificaOperativitaRapporto> activate(EventMessage<InserimentoCanale> eventMessage) {
...
// some Database changes
dao.save(myObject);
}
一切都很好。
那我还有一条链:
<int:chain id="onlineCensimentoClienteChain" input-channel="ONLINE_CENSIMENTO_CLIENTE" output-channel="inserimentoCanaleActivate">
<int:service-activator ref="onlineCensimentoClienteActivator" method="activate" />
<int:splitter expression="payload.getPayload().getCanali()" />
</int:chain>
以及相关的激活器:
@Override
public EventMessage<CensimentoCliente> activate(EventMessage<CensimentoCliente> eventMessage) {
...
// some Database changes
dao.save(myObject);
}
下面描述的CensimentoCliente有效载荷有一个List的第一个链的有效载荷,因此我使用拆分器拆分列表并重用第一个链的代码。
public interface CensimentoCliente extends Serializable {
Collection<? extends InserimentoCanale> getCanali();
void setCanali(Collection<? extends InserimentoCanale> canali);
...
}
但是由于每个激活器都有他的事务定义(因为第一个激活器可以在没有第二个激活器的情况下存在)我有一个事务被分离的用例。
目标是让两条链的数据库修改成为同一事务的一部分。
有什么帮助吗?
亲切的问候 马西莫
【问题讨论】:
-
您找到解决方案了吗?
标签: spring transactions spring-integration