package org.molgenis.data.elasticsearch.transaction; import org.molgenis.data.elasticsearch.index.job.IndexService; import org.molgenis.data.index.IndexActionRegisterService; import org.molgenis.data.transaction.DefaultMolgenisTransactionListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static java.util.Objects.requireNonNull; public class IndexTransactionListener extends DefaultMolgenisTransactionListener { private static final Logger LOG = LoggerFactory.getLogger(IndexTransactionListener.class); private IndexService rebuildIndexService; private IndexActionRegisterService indexActionRegisterService; public IndexTransactionListener(IndexService rebuildIndexService, IndexActionRegisterService indexActionRegisterService) { this.rebuildIndexService = requireNonNull(rebuildIndexService); this.indexActionRegisterService = requireNonNull(indexActionRegisterService); } @Override public void commitTransaction(String transactionId) { try { indexActionRegisterService.storeIndexActions(transactionId); } catch (Exception ex) { LOG.error("Error storing index actions for transaction id {}", transactionId, ex); } } @Override public void rollbackTransaction(String transactionId) { try { indexActionRegisterService.forgetIndexActions(transactionId); } catch (Exception ex) { LOG.error("Error forgetting actions for transaction id {}", transactionId, ex); } } @Override public void doCleanupAfterCompletion(String transactionId) { try { if (indexActionRegisterService.forgetIndexActions(transactionId)) { rebuildIndexService.rebuildIndex(transactionId); } } catch (Exception ex) { LOG.error("Error during cleanupAfterCompletion", ex); } } }