package com.revolsys.jdbc.io; import org.springframework.transaction.support.TransactionSynchronizationAdapter; import org.springframework.transaction.support.TransactionSynchronizationManager; public class JdbcWriterSynchronization extends TransactionSynchronizationAdapter { private boolean holderActive = true; private final Object key; private final JdbcWriterResourceHolder writerHolder; public JdbcWriterSynchronization(final AbstractJdbcRecordStore recordStore, final JdbcWriterResourceHolder writerHolder, final Object key) { this.writerHolder = writerHolder; this.key = key; } @Override public void afterCompletion(final int status) { if (this.holderActive) { TransactionSynchronizationManager.unbindResourceIfPossible(this.key); this.holderActive = false; this.writerHolder.close(); } this.writerHolder.reset(); } @Override public void beforeCompletion() { if (!this.writerHolder.isOpen()) { TransactionSynchronizationManager.unbindResource(this.key); this.holderActive = false; this.writerHolder.close(); } } @Override public int getOrder() { return 999; } @Override public void resume() { if (this.holderActive) { TransactionSynchronizationManager.bindResource(this.key, this.writerHolder); } } @Override public void suspend() { if (this.holderActive) { TransactionSynchronizationManager.unbindResource(this.key); if (!this.writerHolder.isOpen()) { this.writerHolder.close(); } } } }