Весенняя интеграция: Сложность с транзакцией между 2 активаторами

У меня есть этот случай.

Первая цепочка:

<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

7
задан dma_k 18 October 2011 в 00:46
поделиться