Class AbstractPersistingIntIDFactory

java.lang.Object
com.helger.commons.id.factory.AbstractPersistingIntIDFactory
All Implemented Interfaces:
IBaseIDFactory, IIntIDFactory
Direct Known Subclasses:
FileIntIDFactory

@ThreadSafe public abstract class AbstractPersistingIntIDFactory extends Object implements IIntIDFactory
This implementation of IIntIDFactory reads IDs from a device. It does it by reserving a range of n IDs so that not each ID reservation requires IO. If only 1 ID is effectively used, the other n-1 IDs are lost and will never be assigned to any object again.
Author:
Philip Helger
  • Field Details

  • Constructor Details

    • AbstractPersistingIntIDFactory

      protected AbstractPersistingIntIDFactory(@Nonnegative int nReserveCount)
      Constructor.
      Parameters:
      nReserveCount - The number of IDs to reserve per persistence layer access. Must be > 0.
  • Method Details

    • getReserveCount

      @Nonnegative public final int getReserveCount()
      Returns:
      The number of IDs to reserve, as provided in the constructor. Always > 0.
    • readAndUpdateIDCounter

      @IsLocked(WRITE) protected abstract int readAndUpdateIDCounter(@Nonnegative int nReserveCount)
      Read the current ID from the device. In case the method is called for a non-initialized device, 0 should be returned.
      The update should write the read value plus the passed reserve count back to the device. This method should perform an atomic read and update to avoid that ID can be reused.
      Pseudo code:
       protected int readAndUpdateIDCounter (int nReserveCount)
       {
         final int nRead = FileIO.read (file);
         FileIO.write (file, nRead + nReserveCount);
         return nRead;
       }
       
      Parameters:
      nReserveCount - the number that should be added to the read value. Always > 0.
      Returns:
      0 if this method is called for a non-initialized device, the value read from the device otherwise or CGlobal.ILLEGAL_UINT in case of an error.
    • getNewID

      public final int getNewID()
      Description copied from interface: IIntIDFactory
      Create a new unique integer ID.
      Specified by:
      getNewID in interface IIntIDFactory
      Returns:
      The newly created ID.
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object