Class FileIdempotentRepositoryReadLockStrategy

java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.component.file.strategy.FileIdempotentRepositoryReadLockStrategy
All Implemented Interfaces:
AutoCloseable, org.apache.camel.CamelContextAware, GenericFileExclusiveReadLockStrategy<File>, org.apache.camel.Service, org.apache.camel.ShutdownableService, org.apache.camel.spi.HasCamelContext, org.apache.camel.StatefulService, org.apache.camel.SuspendableService

public class FileIdempotentRepositoryReadLockStrategy extends org.apache.camel.support.service.ServiceSupport implements GenericFileExclusiveReadLockStrategy<File>, org.apache.camel.CamelContextAware
A file read lock that uses an IdempotentRepository as the lock strategy. This allows to plugin and use existing idempotent repositories that for example supports clustering. The other read lock strategies that are using marker files or file locks, are not guaranteed to work in clustered setup with various platform and file systems.
  • Constructor Details

    • FileIdempotentRepositoryReadLockStrategy

      public FileIdempotentRepositoryReadLockStrategy()
  • Method Details

    • prepareOnStartup

      public void prepareOnStartup(GenericFileOperations<File> operations, GenericFileEndpoint<File> endpoint) throws Exception
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Allows custom logic to be run on startup preparing the strategy, such as removing old lock files etc.
      Specified by:
      prepareOnStartup in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      operations - generic file operations
      endpoint - the endpoint
      Throws:
      Exception - can be thrown in case of errors
    • acquireExclusiveReadLock

      public boolean acquireExclusiveReadLock(GenericFileOperations<File> operations, GenericFile<File> file, org.apache.camel.Exchange exchange) throws Exception
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Acquires exclusive read lock to the file.
      Specified by:
      acquireExclusiveReadLock in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      operations - generic file operations
      file - the file
      exchange - the exchange
      Returns:
      true if read lock was acquired. If false Camel will skip the file and try it on the next poll
      Throws:
      Exception - can be thrown in case of errors
    • releaseExclusiveReadLockOnAbort

      public void releaseExclusiveReadLockOnAbort(GenericFileOperations<File> operations, GenericFile<File> file, org.apache.camel.Exchange exchange) throws Exception
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Releases the exclusive read lock granted by the acquireExclusiveReadLock method due an abort operation (acquireExclusiveReadLock returned false).
      Specified by:
      releaseExclusiveReadLockOnAbort in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      operations - generic file operations
      file - the file
      exchange - the exchange
      Throws:
      Exception - can be thrown in case of errors
    • releaseExclusiveReadLockOnRollback

      public void releaseExclusiveReadLockOnRollback(GenericFileOperations<File> operations, GenericFile<File> file, org.apache.camel.Exchange exchange) throws Exception
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Releases the exclusive read lock granted by the acquireExclusiveReadLock method due a rollback operation (Exchange processing failed)
      Specified by:
      releaseExclusiveReadLockOnRollback in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      operations - generic file operations
      file - the file
      exchange - the exchange
      Throws:
      Exception - can be thrown in case of errors
    • releaseExclusiveReadLockOnCommit

      public void releaseExclusiveReadLockOnCommit(GenericFileOperations<File> operations, GenericFile<File> file, org.apache.camel.Exchange exchange) throws Exception
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Releases the exclusive read lock granted by the acquireExclusiveReadLock method due a commit operation (Exchange processing succeeded)
      Specified by:
      releaseExclusiveReadLockOnCommit in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      operations - generic file operations
      file - the file
      exchange - the exchange
      Throws:
      Exception - can be thrown in case of errors
    • setTimeout

      public void setTimeout(long timeout)
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Sets an optional timeout period.

      If the readlock could not be granted within the time period then the wait is stopped and the acquireExclusiveReadLock method returns false.

      Specified by:
      setTimeout in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      timeout - period in millis
    • setCheckInterval

      public void setCheckInterval(long checkInterval)
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Sets the check interval period.

      The check interval is used for sleeping between attempts to acquire read lock. Setting a high value allows to cater for slow writes in case the producer of the file is slow.

      The default period is 1000 millis.

      Specified by:
      setCheckInterval in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      checkInterval - interval in millis
    • setReadLockLoggingLevel

      public void setReadLockLoggingLevel(org.apache.camel.LoggingLevel readLockLoggingLevel)
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Sets logging level used when a read lock could not be acquired.

      Logging level used when a read lock could not be acquired.

      The default logging level is WARN

      Specified by:
      setReadLockLoggingLevel in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      readLockLoggingLevel - LoggingLevel
    • setMarkerFiler

      public void setMarkerFiler(boolean markerFile)
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Sets whether marker file should be used or not.
      Specified by:
      setMarkerFiler in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      markerFile - true to use marker files.
    • setDeleteOrphanLockFiles

      public void setDeleteOrphanLockFiles(boolean deleteOrphanLockFiles)
      Description copied from interface: GenericFileExclusiveReadLockStrategy
      Sets whether orphan marker files should be deleted upon startup
      Specified by:
      setDeleteOrphanLockFiles in interface GenericFileExclusiveReadLockStrategy<File>
      Parameters:
      deleteOrphanLockFiles - true to delete files, false to skip this check
    • getCamelContext

      public org.apache.camel.CamelContext getCamelContext()
      Specified by:
      getCamelContext in interface org.apache.camel.spi.HasCamelContext
    • setCamelContext

      public void setCamelContext(org.apache.camel.CamelContext camelContext)
      Specified by:
      setCamelContext in interface org.apache.camel.CamelContextAware
    • getIdempotentRepository

      public org.apache.camel.spi.IdempotentRepository getIdempotentRepository()
      The idempotent repository to use as the store for the read locks.
    • setIdempotentRepository

      public void setIdempotentRepository(org.apache.camel.spi.IdempotentRepository idempotentRepository)
      The idempotent repository to use as the store for the read locks.
    • isRemoveOnRollback

      public boolean isRemoveOnRollback()
      Whether to remove the file from the idempotent repository when doing a rollback.

      By default this is true.

    • setRemoveOnRollback

      public void setRemoveOnRollback(boolean removeOnRollback)
      Whether to remove the file from the idempotent repository when doing a rollback.

      By default this is true.

    • isRemoveOnCommit

      public boolean isRemoveOnCommit()
      Whether to remove the file from the idempotent repository when doing a commit.

      By default this is false.

    • setRemoveOnCommit

      public void setRemoveOnCommit(boolean removeOnCommit)
      Whether to remove the file from the idempotent repository when doing a commit.

      By default this is false.

    • getReadLockIdempotentReleaseDelay

      public int getReadLockIdempotentReleaseDelay()
    • setReadLockIdempotentReleaseDelay

      public void setReadLockIdempotentReleaseDelay(int readLockIdempotentReleaseDelay)
      Whether to delay the release task for a period of millis.
    • isReadLockIdempotentReleaseAsync

      public boolean isReadLockIdempotentReleaseAsync()
    • setReadLockIdempotentReleaseAsync

      public void setReadLockIdempotentReleaseAsync(boolean readLockIdempotentReleaseAsync)
      Whether the delayed release task should be synchronous or asynchronous.
    • getReadLockIdempotentReleaseAsyncPoolSize

      public int getReadLockIdempotentReleaseAsyncPoolSize()
    • setReadLockIdempotentReleaseAsyncPoolSize

      public void setReadLockIdempotentReleaseAsyncPoolSize(int readLockIdempotentReleaseAsyncPoolSize)
      The number of threads in the scheduled thread pool when using asynchronous release tasks.
    • getReadLockIdempotentReleaseExecutorService

      public ScheduledExecutorService getReadLockIdempotentReleaseExecutorService()
    • setReadLockIdempotentReleaseExecutorService

      public void setReadLockIdempotentReleaseExecutorService(ScheduledExecutorService readLockIdempotentReleaseExecutorService)
      To use a custom and shared thread pool for asynchronous release tasks.
    • asKey

      protected String asKey(GenericFile<File> file)
    • 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