Class FileIdempotentRepository

  • All Implemented Interfaces:
    AutoCloseable, org.apache.camel.Service, org.apache.camel.ShutdownableService, org.apache.camel.spi.IdempotentRepository, org.apache.camel.StatefulService, org.apache.camel.SuspendableService

    @ManagedResource(description="File based idempotent repository")
    public class FileIdempotentRepository
    extends org.apache.camel.support.service.ServiceSupport
    implements org.apache.camel.spi.IdempotentRepository
    A file based implementation of IdempotentRepository.

    This implementation provides a 1st-level in-memory LRUCache for fast check of the most frequently used keys. When add(String) or contains(String) methods are being used then in case of 1st-level cache miss, the underlying file is scanned which may cost additional performance. So try to find the right balance of the size of the 1st-level cache, the default size is 1000. The file store has a maximum capacity of 32mb by default (you can turn this off and have unlimited size). If the file store grows bigger than the maximum capacity, then the getDropOldestFileStore() (is default 1000) number of entries from the file store is dropped to reduce the file store and make room for newer entries.

    • Field Summary

      • Fields inherited from class org.apache.camel.support.service.BaseService

        BUILT, FAILED, INITIALIZED, INITIALIZING, lock, NEW, SHUTDOWN, SHUTTING_DOWN, STARTED, STARTING, status, STOPPED, STOPPING, SUSPENDED, SUSPENDING
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean add​(String key)  
      protected void appendToStore​(String key)
      Appends the given key to the file store
      protected void cleanup()
      Cleanup the 1st-level cache.
      void clear()  
      protected void clearStore()
      Clears the file-store (danger this deletes all entries)
      boolean confirm​(String key)  
      boolean contains​(String key)  
      protected boolean containsStore​(String key)
      Checks the file store if the key exists
      protected void doStart()  
      protected void doStop()  
      static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File fileStore)
      Creates a new file based repository using a LRUCache as 1st level cache with a default of 1000 entries in the cache.
      static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File fileStore, int cacheSize)
      Creates a new file based repository using a LRUCache as 1st level cache.
      static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File fileStore, int cacheSize, long maxFileStoreSize)
      Creates a new file based repository using a LRUCache as 1st level cache.
      static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File store, Map<String,​Object> cache)
      Creates a new file based repository using the given Map as 1st level cache.
      Map<String,​Object> getCache()  
      int getCacheSize()  
      long getDropOldestFileStore()  
      String getFilePath()  
      File getFileStore()  
      long getMaxFileStoreSize()  
      protected void loadStore()
      Loads the given file store into the 1st level cache
      boolean remove​(String key)  
      protected void removeFromStore​(String key)  
      void reset()
      Reset and clears the 1st-level cache to force it to reload from file
      void setCache​(Map<String,​Object> cache)  
      void setCacheSize​(int size)
      Sets the 1st-level cache size.
      void setDropOldestFileStore​(long dropOldestFileStore)
      Sets the number of oldest entries to drop from the file store when the maximum capacity is hit to reduce disk space to allow room for new entries.
      void setFileStore​(File fileStore)  
      void setMaxFileStoreSize​(long maxFileStoreSize)
      Sets the maximum file size for the file store in bytes.
      protected void trunkStore()
      Trunks the file store when the max store size is hit by dropping the most oldest entries.
      • Methods inherited from class org.apache.camel.support.service.BaseService

        build, doBuild, doFail, doInit, doLifecycleChange, doResume, doShutdown, doSuspend, fail, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, shutdown, start, stop, suspend
      • Methods inherited from interface org.apache.camel.spi.IdempotentRepository

        add, confirm, contains, remove
      • Methods inherited from interface org.apache.camel.Service

        build, close, init, start, stop
      • Methods inherited from interface org.apache.camel.ShutdownableService

        shutdown
      • Methods inherited from interface org.apache.camel.StatefulService

        getStatus, isRunAllowed, isStarted, isStarting, isStopped, isStopping, isSuspending
      • Methods inherited from interface org.apache.camel.SuspendableService

        isSuspended, resume, suspend
    • Constructor Detail

      • FileIdempotentRepository

        public FileIdempotentRepository()
      • FileIdempotentRepository

        public FileIdempotentRepository​(File fileStore,
                                        Map<String,​Object> set)
    • Method Detail

      • fileIdempotentRepository

        public static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File fileStore)
        Creates a new file based repository using a LRUCache as 1st level cache with a default of 1000 entries in the cache.
        Parameters:
        fileStore - the file store
      • fileIdempotentRepository

        public static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File fileStore,
                                                                                         int cacheSize)
        Creates a new file based repository using a LRUCache as 1st level cache.
        Parameters:
        fileStore - the file store
        cacheSize - the cache size
      • fileIdempotentRepository

        public static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File fileStore,
                                                                                         int cacheSize,
                                                                                         long maxFileStoreSize)
        Creates a new file based repository using a LRUCache as 1st level cache.
        Parameters:
        fileStore - the file store
        cacheSize - the cache size
        maxFileStoreSize - the max size in bytes for the filestore file
      • fileIdempotentRepository

        public static org.apache.camel.spi.IdempotentRepository fileIdempotentRepository​(File store,
                                                                                         Map<String,​Object> cache)
        Creates a new file based repository using the given Map as 1st level cache.

        Care should be taken to use a suitable underlying Map to avoid this class being a memory leak.

        Parameters:
        store - the file store
        cache - the cache to use as 1st level cache
      • add

        @ManagedOperation(description="Adds the key to the store")
        public boolean add​(String key)
        Specified by:
        add in interface org.apache.camel.spi.IdempotentRepository
      • contains

        @ManagedOperation(description="Does the store contain the given key")
        public boolean contains​(String key)
        Specified by:
        contains in interface org.apache.camel.spi.IdempotentRepository
      • remove

        @ManagedOperation(description="Remove the key from the store")
        public boolean remove​(String key)
        Specified by:
        remove in interface org.apache.camel.spi.IdempotentRepository
      • confirm

        public boolean confirm​(String key)
        Specified by:
        confirm in interface org.apache.camel.spi.IdempotentRepository
      • clear

        @ManagedOperation(description="Clear the store (danger this removes all entries)")
        public void clear()
        Specified by:
        clear in interface org.apache.camel.spi.IdempotentRepository
      • getFileStore

        public File getFileStore()
      • setFileStore

        public void setFileStore​(File fileStore)
      • getFilePath

        @ManagedAttribute(description="The file path for the store")
        public String getFilePath()
      • getMaxFileStoreSize

        @ManagedAttribute(description="The maximum file size for the file store in bytes")
        public long getMaxFileStoreSize()
      • setMaxFileStoreSize

        @ManagedAttribute(description="The maximum file size for the file store in bytes")
        public void setMaxFileStoreSize​(long maxFileStoreSize)
        Sets the maximum file size for the file store in bytes. You can set the value to 0 or negative to turn this off, and have unlimited file store size.

        The default is 32mb.

      • getDropOldestFileStore

        public long getDropOldestFileStore()
      • setDropOldestFileStore

        @ManagedAttribute(description="Number of oldest elements to drop from file store if maximum file size reached")
        public void setDropOldestFileStore​(long dropOldestFileStore)
        Sets the number of oldest entries to drop from the file store when the maximum capacity is hit to reduce disk space to allow room for new entries.

        The default is 1000.

      • setCacheSize

        public void setCacheSize​(int size)
        Sets the 1st-level cache size. Setting cache size is only possible when using the default LRUCache cache implementation.
      • getCacheSize

        @ManagedAttribute(description="The current 1st-level cache size")
        public int getCacheSize()
      • reset

        @ManagedOperation(description="Reset and reloads the file store")
        public void reset()
                   throws IOException
        Reset and clears the 1st-level cache to force it to reload from file
        Throws:
        IOException
      • containsStore

        protected boolean containsStore​(String key)
        Checks the file store if the key exists
        Parameters:
        key - the key
        Returns:
        true if exists in the file, false otherwise
      • appendToStore

        protected void appendToStore​(String key)
        Appends the given key to the file store
        Parameters:
        key - the key
      • removeFromStore

        protected void removeFromStore​(String key)
      • clearStore

        protected void clearStore()
        Clears the file-store (danger this deletes all entries)
      • trunkStore

        protected void trunkStore()
        Trunks the file store when the max store size is hit by dropping the most oldest entries.
      • cleanup

        protected void cleanup()
        Cleanup the 1st-level cache.
      • loadStore

        protected void loadStore()
                          throws IOException
        Loads the given file store into the 1st level cache
        Throws:
        IOException
      • doStart

        protected void doStart()
                        throws Exception
        Overrides:
        doStart in class org.apache.camel.support.service.BaseService
        Throws:
        Exception
      • doStop

        protected void doStop()
                       throws Exception
        Overrides:
        doStop in class org.apache.camel.support.service.BaseService
        Throws:
        Exception