package com.revolsys.transaction; import org.springframework.transaction.support.TransactionSynchronizationAdapter; import org.springframework.transaction.support.TransactionSynchronizationManager; import com.revolsys.logging.Logs; import com.revolsys.parallel.channel.Channel; import com.revolsys.parallel.channel.ClosedException; public class SendToChannelAfterCommit<T> extends TransactionSynchronizationAdapter { public static <V> void send(final Channel<V> channel, final V value) { if (TransactionSynchronizationManager.isSynchronizationActive()) { final SendToChannelAfterCommit<V> synchronization = new SendToChannelAfterCommit<>(channel, value); TransactionSynchronizationManager.registerSynchronization(synchronization); } else { channel.write(value); } } private final Channel<T> channel; private final T object; public SendToChannelAfterCommit(final Channel<T> channel, final T object) { this.channel = channel; this.object = object; } @Override public void afterCommit() { try { this.channel.write(this.object); } catch (final ClosedException e) { Logs.error(this, "Channel closed " + this.channel, e); } } }