All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.terracotta.modules.ehcache.transaction.ClusteredTransactionID Maven / Gradle / Ivy

/*
 * All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved.
 */
package org.terracotta.modules.ehcache.transaction;

import net.sf.ehcache.transaction.TransactionID;
import net.sf.ehcache.transaction.TransactionIDSerializedForm;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author Ludovic Orban
 */
public class ClusteredTransactionID implements TransactionID, ClusteredID {

  private static final AtomicInteger idGenerator = new AtomicInteger();

  private final String               clusterUUID;
  private final String               ownerID;
  private final String               cacheManagerName;
  private final long                 creationTime;
  private final int                  id;

  public ClusteredTransactionID(String ownerId, String clusterUUID, String cacheManagerName) {
    this(ownerId, clusterUUID, cacheManagerName, System.currentTimeMillis(), idGenerator.getAndIncrement());
  }

  public ClusteredTransactionID(TransactionIDSerializedForm serializedForm) {
    this(serializedForm.getOwnerID(), serializedForm.getClusterUUID(), serializedForm.getCacheManagerName(),
            serializedForm.getCreationTime(), serializedForm.getId());
  }

  public ClusteredTransactionID(String ownerId, String clusterUUID, String cacheManagerName, long creationTime, int id) {
    this.clusterUUID = clusterUUID;
    this.ownerID = ownerId;
    this.cacheManagerName = cacheManagerName;
    this.creationTime = creationTime;
    this.id = id;
  }

  @Override
  public String getOwnerID() {
    return ownerID;
  }

  @Override
  public final boolean equals(Object obj) {
    if (obj instanceof ClusteredTransactionID) {
      ClusteredTransactionID otherId = (ClusteredTransactionID) obj;
      return id == otherId.id && clusterUUID.equals(otherId.clusterUUID) && creationTime == otherId.creationTime;
    }
    return false;
  }

  @Override
  public final int hashCode() {
    return (((id + (int) creationTime) * 31) ^ clusterUUID.hashCode());
  }

  @Override
  public String toString() {
    return id + ":" + ownerID + ":" + creationTime + "@" + clusterUUID;
  }

  private Object writeReplace() {
    return new TransactionIDSerializedForm(cacheManagerName, clusterUUID, ownerID, creationTime, id);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy