Spring Data for VMware GemFire
Class GemfireTransactionManager
- All Implemented Interfaces:
Serializable,org.springframework.beans.factory.InitializingBean,org.springframework.transaction.PlatformTransactionManager,org.springframework.transaction.support.ResourceTransactionManager,org.springframework.transaction.TransactionManager
PlatformTransactionManager implementation
for the Pivotal GemFire CacheTransactionManager.
Binds one or multiple GemFire Regions for the specified GemFireCache to the thread,
potentially allowing for one Region per GemFireCache model.
This local strategy is an alternative to executing cache operations within JTA transactions. Its advantage is that is able to work in any environment, for example a stand-alone application or a test suite. It is not able to provide XA transactions, for example to share transactions with data access.
By default, to prevent dirty reads, the GemFireCache is configured to return copies rather then direct references
for get data access operations. As a workaround, one could use explicitly deep copy objects before
making changes to them to avoid unnecessary copying on every fetch.
- See Also:
-
CopyHelper.copy(Object)GemFireCache.setCopyOnRead(boolean)CacheTransactionManagerRegionTransactionIdInitializingBeanPlatformTransactionManagerTransactionDefinitionAbstractPlatformTransactionManagerResourceTransactionManagerTransactionSynchronizationManagersetCopyOnRead(boolean)- Serialized Form
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classHolder of GemFire cache transaction state.protected static classGemFire local cache transaction object.Nested classes/interfaces inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
org.springframework.transaction.support.AbstractPlatformTransactionManager.SuspendedResourcesHolder -
Field Summary
FieldsFields inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION -
Constructor Summary
ConstructorsConstructorDescriptionConstructs an instance of theGemfireTransactionManager.GemfireTransactionManager(org.apache.geode.cache.GemFireCache cache) Constructs an instance of theGemfireTransactionManagerinitialized with the givenGemFireCachereference. -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected voidprotected voiddoCleanupAfterCompletion(Object transaction) protected voiddoCommit(org.springframework.transaction.support.DefaultTransactionStatus status) protected Objectprotected voidprotected voiddoRollback(org.springframework.transaction.support.DefaultTransactionStatus status) protected voiddoSetRollbackOnly(org.springframework.transaction.support.DefaultTransactionStatus status) protected Objectorg.apache.geode.cache.GemFireCachegetCache()Returns a reference to theGemFireCachefor which this transaction manager manages local cache transactions.protected org.apache.geode.cache.CacheTransactionManagerReturns a reference to theCacheTransactionManagerused by Apache Geode to manage local, cache transactions.protected LongReturns the timeout used to wait for the GemFire cache transaction to resume.protected TimeUnitReturns theTimeUnitused in the wait timeout when resuming a GemFire cache transaction.booleanIndicates whether copy on read is set and used for fetch data access operations.protected booleanisExistingTransaction(Object transaction) protected booleanDetermines whether the user specified a wait time for resuming a GemFire cache transaction.voidsetCache(org.apache.geode.cache.GemFireCache cache) Sets a reference to theGemFireCachefor which this transaction manager manages local cache transactions.voidsetCopyOnRead(boolean copyOnRead) Set whether the cache returns direct object references or copies of the objects it manages.<K,V> void setRegion(org.apache.geode.cache.Region<K, V> region) Sets the GemFire cacheRegionas an alternative in setting in theGemFireCachedirectly.voidsetResumeWaitTime(Long resumeWaitTime) Sets the timeout used to wait for the GemFire cache transaction to resume.voidsetResumeWaitTimeUnit(TimeUnit resumeWaitTimeUnit) Sets theTimeUnitused in the wait timeout when resuming a GemFire cache transaction.protected final booleanMethods inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, newTransactionStatus, prepareForCommit, prepareSynchronization, prepareTransactionStatus, registerAfterCompletionWithExistingTransaction, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, shouldCommitOnGlobalRollbackOnly, suspend, triggerBeforeCommit, triggerBeforeCompletionMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.transaction.PlatformTransactionManager
commit, getTransaction, rollback
-
Field Details
-
DEFAULT_RESUME_WAIT_TIME_UNIT
-
-
Constructor Details
-
GemfireTransactionManager
public GemfireTransactionManager()Constructs an instance of theGemfireTransactionManager. -
GemfireTransactionManager
public GemfireTransactionManager(org.apache.geode.cache.GemFireCache cache) Constructs an instance of theGemfireTransactionManagerinitialized with the givenGemFireCachereference.- Parameters:
cache- reference to theGemFireCacheassociated with cache transactions.- See Also:
-
GemFireCacheafterPropertiesSet()
-
-
Method Details
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean
-
doGetTransaction
- Specified by:
doGetTransactionin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
isExistingTransaction
protected boolean isExistingTransaction(Object transaction) throws org.springframework.transaction.TransactionException - Overrides:
isExistingTransactionin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doBegin
protected void doBegin(Object transaction, org.springframework.transaction.TransactionDefinition definition) throws org.springframework.transaction.TransactionException - Specified by:
doBeginin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doCommit
protected void doCommit(org.springframework.transaction.support.DefaultTransactionStatus status) throws org.springframework.transaction.TransactionException - Specified by:
doCommitin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doSuspend
protected Object doSuspend(Object transaction) throws org.springframework.transaction.TransactionException - Overrides:
doSuspendin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doResume
protected void doResume(Object transaction, Object suspendedResources) throws org.springframework.transaction.TransactionException - Overrides:
doResumein classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doRollback
protected void doRollback(org.springframework.transaction.support.DefaultTransactionStatus status) throws org.springframework.transaction.TransactionException - Specified by:
doRollbackin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doCleanupAfterCompletion
- Overrides:
doCleanupAfterCompletionin classorg.springframework.transaction.support.AbstractPlatformTransactionManager
-
doSetRollbackOnly
protected void doSetRollbackOnly(org.springframework.transaction.support.DefaultTransactionStatus status) - Overrides:
doSetRollbackOnlyin classorg.springframework.transaction.support.AbstractPlatformTransactionManager
-
useSavepointForNestedTransaction
protected final boolean useSavepointForNestedTransaction()- Overrides:
useSavepointForNestedTransactionin classorg.springframework.transaction.support.AbstractPlatformTransactionManager
-
setCache
public void setCache(org.apache.geode.cache.GemFireCache cache) Sets a reference to theGemFireCachefor which this transaction manager manages local cache transactions.- Parameters:
cache- reference to theGemFireCache.- See Also:
-
GemFireCache
-
getCache
public org.apache.geode.cache.GemFireCache getCache()Returns a reference to theGemFireCachefor which this transaction manager manages local cache transactions.- Returns:
- a reference to the
GemFireCache. - See Also:
-
GemFireCache
-
getCacheTransactionManager
protected org.apache.geode.cache.CacheTransactionManager getCacheTransactionManager()Returns a reference to theCacheTransactionManagerused by Apache Geode to manage local, cache transactions.- Returns:
- a reference to the
CacheTransactionManager. - See Also:
-
CacheTransactionManagergetCache()
-
setCopyOnRead
public void setCopyOnRead(boolean copyOnRead) Set whether the cache returns direct object references or copies of the objects it manages. While copies imply additional work for every fetch operation, direct object references can cause dirty reads across concurrent threads in the same VM, whether or not transactions are used. One could explicitly deep copy objects before making changes (for example by usingCopyHelper.copy(Object)in which case this setting can be set tofalseHowever, unless there is a measurable performance penalty, the recommendation is to keep this setting totrue.- Parameters:
copyOnRead- boolean value indicating whether copies (default) rather then direct object references will be returned on fetch operations.
-
isCopyOnRead
public boolean isCopyOnRead()Indicates whether copy on read is set and used for fetch data access operations.- Returns:
- the setting for copy-on-read.
- See Also:
-
setRegion
public <K,V> void setRegion(org.apache.geode.cache.Region<K, V> region) Sets the GemFire cacheRegionas an alternative in setting in theGemFireCachedirectly.- Type Parameters:
K-Classtype of theRegionkey.V-Classtype of theRegionvalue.- Parameters:
region- GemFire cacheRegiondirectly involved in the local cache transaction.- Throws:
IllegalArgumentException- ifRegionis null.- See Also:
-
Region
-
getResourceFactory
- Specified by:
getResourceFactoryin interfaceorg.springframework.transaction.support.ResourceTransactionManager
-
setResumeWaitTime
Sets the timeout used to wait for the GemFire cache transaction to resume.- Parameters:
resumeWaitTime- long value with the timeout used to wait for the GemFire cache transaction to resume.- See Also:
-
CacheTransactionManager.tryResume(TransactionId, long, TimeUnit)
-
getResumeWaitTime
Returns the timeout used to wait for the GemFire cache transaction to resume.- Returns:
- the long value with the timeout used to wait for the GemFire cache transaction to resume.
- See Also:
-
CacheTransactionManager.tryResume(TransactionId, long, TimeUnit)
-
isResumeWaitTimeSet
protected boolean isResumeWaitTimeSet()Determines whether the user specified a wait time for resuming a GemFire cache transaction.- Returns:
- a boolean value to indicate whether the user specified a wait time for resuming a GemFire cache transaction.
- See Also:
-
CacheTransactionManager.tryResume(TransactionId, long, TimeUnit)getResumeWaitTime()
-
setResumeWaitTimeUnit
Sets theTimeUnitused in the wait timeout when resuming a GemFire cache transaction.- Parameters:
resumeWaitTimeUnit-TimeUnitused in the wait timeout when resuming a GemFire cache transaction.- See Also:
-
CacheTransactionManager.tryResume(TransactionId, long, TimeUnit)
-
getResumeWaitTimeUnit
Returns theTimeUnitused in the wait timeout when resuming a GemFire cache transaction. Defaults toTimeUnit.SECONDS.- Returns:
- the
TimeUnitused in the wait timeout when resuming a GemFire cache transaction. - See Also:
-
CacheTransactionManager.tryResume(TransactionId, long, TimeUnit)
-