私はこのユースケースを持っています。
最初のチェーン:
<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);
...
}
しかし、すべてのアクティベーターがトランザクション定義を取得するため (最初のアクティベーターは 2 番目のアクティベーターなしで存続できるため)、トランザクションが分離されているユースケースがあります。
目標は、2 つのチェーンのデータベース変更を同じトランザクションの一部にすることです。
何か助けはありますか?
よろしくマッシモ