Class JdbcOrphanLockAwareIdempotentRepository
- java.lang.Object
-
- org.apache.camel.support.service.BaseService
-
- org.apache.camel.support.service.ServiceSupport
-
- org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository
-
- org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository
-
- org.apache.camel.processor.idempotent.jdbc.JdbcOrphanLockAwareIdempotentRepository
-
- 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
public class JdbcOrphanLockAwareIdempotentRepository extends JdbcMessageIdRepository implements org.apache.camel.ShutdownableService
Implementation ofAbstractJdbcMessageIdRepository
which handles orphan locks resulting from jvm crash. When an instance of the application acquires a lock on the idempotent repository, the lock attributes are added to a HashSet. While the lock is help by the instance, the instance keeps updating the createdAt column with the current timestamp indicating the instance holding the lock is active. A lock is granted to an instance if either the entry for the lock attributes do not exists in the CAMEL_MESSAGEPROCESSED table or if in case the instance holding the lock has crashed. This is determined if the timestamp on the createdAt column is more than the lockMaxAge.
-
-
Field Summary
-
Fields inherited from class org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository
DEFAULT_TABLENAME
-
Fields inherited from class org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository
dataSource, jdbcTemplate, log, processorName, transactionTemplate
-
-
Constructor Summary
Constructors Constructor Description JdbcOrphanLockAwareIdempotentRepository(DataSource dataSource, String processorName, org.apache.camel.CamelContext camelContext)
JdbcOrphanLockAwareIdempotentRepository(DataSource dataSource, org.springframework.transaction.support.TransactionTemplate transactionTemplate, String processorName, org.apache.camel.CamelContext camelContext)
JdbcOrphanLockAwareIdempotentRepository(org.apache.camel.CamelContext camelContext)
JdbcOrphanLockAwareIdempotentRepository(org.springframework.jdbc.core.JdbcTemplate jdbcTemplate, org.springframework.transaction.support.TransactionTemplate transactionTemplate, org.apache.camel.CamelContext camelContext)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected int
delete()
Operations that deletes all the rowsprotected int
delete(String key)
Operations that deletes the key if it existsprotected void
doInit()
protected void
doShutdown()
long
getLockKeepAliveIntervalMillis()
long
getLockMaxAgeMillis()
Set<org.apache.camel.processor.idempotent.jdbc.JdbcOrphanLockAwareIdempotentRepository.ProcessorNameAndMessageId>
getProcessorNameMessageIdSet()
String
getUpdateTimestampQuery()
protected int
insert(String key)
Operation that inserts the key if it does not already existprotected int
queryForInt(String key)
Operation that returns the number of rows, if any, for the specified keyvoid
setLockKeepAliveIntervalMillis(long lockKeepAliveIntervalMillis)
void
setLockMaxAgeMillis(long lockMaxAgeMillis)
void
setUpdateTimestampQuery(String updateTimestampQuery)
-
Methods inherited from class org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository
doStart, getClearString, getCreateString, getDeleteString, getInsertString, getQueryString, getTableExistsString, getTableName, isCreateTableIfNotExists, setClearString, setCreateString, setCreateTableIfNotExists, setDeleteString, setInsertString, setQueryString, setTableExistsString, setTableName
-
Methods inherited from class org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository
add, clear, confirm, contains, createTransactionTemplate, doStop, getDataSource, getJdbcTemplate, getProcessorName, getTransactionTemplate, remove, setDataSource, setJdbcTemplate, setProcessorName, setTransactionTemplate
-
Methods inherited from class org.apache.camel.support.service.BaseService
build, doBuild, doFail, doLifecycleChange, doResume, 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 class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.camel.spi.IdempotentRepository
add, confirm, contains, remove
-
-
-
-
Constructor Detail
-
JdbcOrphanLockAwareIdempotentRepository
public JdbcOrphanLockAwareIdempotentRepository(org.apache.camel.CamelContext camelContext)
-
JdbcOrphanLockAwareIdempotentRepository
public JdbcOrphanLockAwareIdempotentRepository(DataSource dataSource, String processorName, org.apache.camel.CamelContext camelContext)
-
JdbcOrphanLockAwareIdempotentRepository
public JdbcOrphanLockAwareIdempotentRepository(DataSource dataSource, org.springframework.transaction.support.TransactionTemplate transactionTemplate, String processorName, org.apache.camel.CamelContext camelContext)
-
JdbcOrphanLockAwareIdempotentRepository
public JdbcOrphanLockAwareIdempotentRepository(org.springframework.jdbc.core.JdbcTemplate jdbcTemplate, org.springframework.transaction.support.TransactionTemplate transactionTemplate, org.apache.camel.CamelContext camelContext)
-
-
Method Detail
-
queryForInt
protected int queryForInt(String key)
Description copied from class:AbstractJdbcMessageIdRepository
Operation that returns the number of rows, if any, for the specified key- Overrides:
queryForInt
in classJdbcMessageIdRepository
- Parameters:
key
- the key- Returns:
- int number of rows
-
delete
protected int delete(String key)
Description copied from class:AbstractJdbcMessageIdRepository
Operations that deletes the key if it exists- Overrides:
delete
in classJdbcMessageIdRepository
- Parameters:
key
- the key- Returns:
- int number of rows deleted
-
insert
protected int insert(String key)
Description copied from class:AbstractJdbcMessageIdRepository
Operation that inserts the key if it does not already exist- Overrides:
insert
in classJdbcMessageIdRepository
- Parameters:
key
- the key- Returns:
- int number of rows inserted
-
doInit
protected void doInit() throws Exception
- Overrides:
doInit
in classJdbcMessageIdRepository
- Throws:
Exception
-
doShutdown
protected void doShutdown() throws Exception
- Overrides:
doShutdown
in classorg.apache.camel.support.service.BaseService
- Throws:
Exception
-
delete
protected int delete()
Description copied from class:AbstractJdbcMessageIdRepository
Operations that deletes all the rows- Overrides:
delete
in classJdbcMessageIdRepository
- Returns:
- int number of rows deleted
-
getProcessorNameMessageIdSet
public Set<org.apache.camel.processor.idempotent.jdbc.JdbcOrphanLockAwareIdempotentRepository.ProcessorNameAndMessageId> getProcessorNameMessageIdSet()
-
getUpdateTimestampQuery
public String getUpdateTimestampQuery()
-
setUpdateTimestampQuery
public void setUpdateTimestampQuery(String updateTimestampQuery)
-
getLockMaxAgeMillis
public long getLockMaxAgeMillis()
-
setLockMaxAgeMillis
public void setLockMaxAgeMillis(long lockMaxAgeMillis)
-
getLockKeepAliveIntervalMillis
public long getLockKeepAliveIntervalMillis()
-
setLockKeepAliveIntervalMillis
public void setLockKeepAliveIntervalMillis(long lockKeepAliveIntervalMillis)
-
-