
org.infinispan.persistence.spi.TransactionalCacheWriter Maven / Gradle / Ivy
package org.infinispan.persistence.spi;
import javax.transaction.Transaction;
import org.infinispan.persistence.support.BatchModification;
/**
* Defines the functionality of a transactional store. This interface allows the implementing store to participate in the
* 2PC protocol of a cache's transaction. This enables the cache transaction to be rolledback if an exception occurs whilst
* writing key changes to the underlying store, or for the writes to the underlying store to be rolledback if the exception
* occurs in-memory.
*
* As this writer is part of the 2PC, all writes to the underlying store should only be executed by the originator of a
* transaction in normal operation. In the event that the originator crashes between the prepare and commit/rollback phase
* it is expected that the underlying store's transaction will eventually timeout and rollback. In the event that the originator
* crashes and transaction recovery is enabled, then forcing commit will result in the replaying of said Tx's (prepare/commit) to
* the underlying store.
*
* @author Ryan Emerson
* @since 9.0
*/
public interface TransactionalCacheWriter extends AdvancedCacheWriter {
/**
* Write modifications to the store in the prepare phase, as this is the only way we know the FINAL values of the entries.
* This is required to handle scenarios where an objects value is changed after the put command has been executed, but
* before the commit is called on the Tx.
*
* @param transaction the current transactional context.
* @param batchModification an object containing the write/remove operations required for this transaction.
* @throws PersistenceException if an error occurs when communicating/performing writes on the underlying store.
*/
void prepareWithModifications(Transaction transaction, BatchModification batchModification) throws PersistenceException;
/**
* Commit the provided transaction's changes to the underlying store.
*
* @param transaction the current transactional context.
*/
void commit(Transaction transaction);
/**
* Rollback the provided transaction's changes to the underlying store.
*
* @param transaction the current transactional context.
*/
void rollback(Transaction transaction);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy