我有这个用例。
第一条链:
<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);
...
}
但是由于每个激活器都获得了他的事务定义(因为第一个激活器可以在没有第二个激活器的情况下存在)我有一个事务分离的用例。
目标是让两条链的数据库修改成为同一事务的一部分。
有什么帮助吗?
亲切的问候马西莫