У меня есть этот случай.
Первая цепочка:
<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);
}
CenSymentocliente
полезная нагрузка, как описано ниже, имеет Список пособия
полезной нагрузки первой цепочки, так что с расщеплением я разбиваю в списке и повторно использую код первой цепочки.
public interface CensimentoCliente extends Serializable {
Collection<? extends InserimentoCanale> getCanali();
void setCanali(Collection<? extends InserimentoCanale> canali);
...
}
Но поскольку каждый активатор получает свое определение транзакции (поскольку первый может жить Без второго) У меня есть применение случая, когда транзакции разделены.
Цель состоит в том, чтобы получить DB, модифицируют две цепи, были частью той же транзакции.
Любая помощь?
Massimo