Top Description Inners Fields Constructors Methods
net.sf.ehcache.constructs.blocking

public Class BlockingCache

extends EhcacheDecoratorAdapter
Class Inheritance
Known Direct Subclasses
net.sf.ehcache.constructs.blocking.SelfPopulatingCache
Static Imports
net.sf.ehcache.statistics.StatisticBuilder.operation

A blocking decorator for an Ehcache, backed by a Ehcache.

It allows concurrent read access to elements already in the cache. If the element is null, other reads will block until an element with the same key is put into the cache.

This is useful for constructing read-through or self-populating caches.

This implementation uses the net.sf.ehcache.concurrent.ReadWriteLockSync class. If you wish to use this class, you will need the concurrent package in your class path.

It features:

"Hashtable / synchronizedMap uses the "one big fat lock" approach to guard the mutable state of the map. That works, but is a big concurrency bottleneck, as you've observed. You went to the opposite extreme, one lock per key. That works (as long as you've got sufficient synchronization in the cache itself to protect its own data structures.)

Lock striping is a middle ground, partitioning keys into a fixed number of subsets, like the trick used at large theaters for will-call ticket pickup -- there are separate lines for "A-F, G-M, N-R, and S-Z". This way, there are a fixed number of locks, each guarding (hopefully) 1/Nth of the keys." - Brian Goetz

Further improvements to hashing suggested by Joe Bowbeer.

Author
Greg Luck
Version
$Id: BlockingCache.java 10789 2018-04-26 02:08:13Z adahanne $

Nested and Inner Type Summary

Modifier and TypeClass and Description
private abstract static class
BlockingCache.PutAction<V>

Callable like class to actually execute one of the many Ehcache.put* methods in the context of a BlockingCache

Field Summary

Modifier and TypeField and Description
private final AtomicReference<CacheLockProvider>
private final OperationObserver<BlockingCacheOperationOutcomes.GetOutcome>
private final int
protected volatile int
timeoutMillis

The amount of time to block a thread before a LockTimeoutException is thrown

Inherited from net.sf.ehcache.constructs.EhcacheDecoratorAdapter:
underlyingCache

Constructor Summary

AccessConstructor and Description
public
BlockingCache(final Ehcache
a backing ehcache.
cache
,
int
how many stripes to has the keys against. Must be a non-zero even number. This is a trade-off between memory use and concurrency
numberOfStripes
)

Creates a BlockingCache which decorates the supplied cache.

public
BlockingCache(final Ehcache
a backing ehcache.
cache
)

Creates a BlockingCache which decorates the supplied cache.

Method Summary

Modifier and TypeMethod and Description
private void
acquiredLockForKey(final Object key, final Sync lock, final LockType lockType)

private CacheLockProvider
private <V> V
public Element
get(final Object
an Object value
key
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.get.

Implements net.sf.ehcache.Ehcache.get.

Looks up an entry.
public Element

Returns:

the element, or null, if it does not exist.
get
(Serializable
a serializable value
key
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.get.

Implements net.sf.ehcache.Ehcache.get.

Gets an element from the cache.
public Map<K, V>
getAllWithLoader(Collection<E>
a collection of keys to be returned/loaded
keys
,
Object
an argument to pass to the CacheLoader.
loaderArgument
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.getAllWithLoader.

Implements net.sf.ehcache.Ehcache.getAllWithLoader.

This method is not appropriate to use with BlockingCache.
protected Ehcache

Returns:

the backing cache
getCache
()

Retrieve the EHCache backing cache

private CacheLockProvider
protected Sync

Returns:

one of a limited number of Sync's.
getLockForKey
(final Object
the key
key
)

Gets the Sync to use for a given key.

public int

Returns:

the time in ms.
getTimeoutMillis
()

Gets the time to wait to acquire a lock.

public Element
getWithLoader(Object
key whose associated value is to be returned.
key
,
CacheLoader
the override loader to use. If null, the cache's default loader will be used
loader
,
Object
an argument to pass to the CacheLoader.
loaderArgument
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.getWithLoader.

Implements net.sf.ehcache.Ehcache.getWithLoader.

This method is not appropriate to use with BlockingCache.
public synchronized String

Returns:

the name of the cache.
liveness
()

Synchronized version of getName to test liveness of the object lock.

public void
load(Object
key whose associated value to be loaded using the associated cacheloader if this cache doesn't contain it.
key
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.load.

Implements net.sf.ehcache.Ehcache.load.

This method is not appropriate to use with BlockingCache.
public void
loadAll(Collection<E>
- collection of the keys whose associated values to be loaded into this cache by using the associated cacheloader if this cache doesn't contain them.
keys
,
Object
can be anything that makes sense to the loader

The Ehcache native API provides similar functionality to loaders using the decorator net.sf.ehcache.constructs.blocking.SelfPopulatingCache

argument
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.loadAll.

Implements net.sf.ehcache.Ehcache.loadAll.

This method is not appropriate to use with BlockingCache.
public void
put(final Element
An object. If Serializable it can fully participate in replication and the DiskStore.
element
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.put.

Implements net.sf.ehcache.Ehcache.put.

Adds an entry and unlocks it
public void
put(final Element
An object. If Serializable it can fully participate in replication and the DiskStore.
element
,
final boolean
whether the put is coming from a doNotNotifyCacheReplicators cache peer, in which case this put should not initiate a further notification to doNotNotifyCacheReplicators cache peers
doNotNotifyCacheReplicators
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.put.

Implements net.sf.ehcache.Ehcache.put.

Put an element in the cache.
public Element
putIfAbsent(final Element
element to be added
element
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putIfAbsent.

Implements net.sf.ehcache.Ehcache.putIfAbsent.

Put an element in the cache if no element is currently mapped to the elements key.
public Element
putIfAbsent(final Element
element to be added
element
,
final boolean
whether the put is coming from a doNotNotifyCacheReplicators cache peer, in which case this put should not initiate a further notification to doNotNotifyCacheReplicators cache peers
doNotNotifyCacheReplicators
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putIfAbsent.

Implements net.sf.ehcache.Ehcache.putIfAbsent.

Put an element in the cache if no element is currently mapped to the elements key.
public void
putQuiet(final Element
An object. If Serializable it can fully participate in replication and the DiskStore.
element
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putQuiet.

Implements net.sf.ehcache.Ehcache.putQuiet.

Put an element in the cache, without updating statistics, or updating listeners.
public void
putWithWriter(final Element
An object. If Serializable it can fully participate in replication and the DiskStore.
element
)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putWithWriter.

Implements net.sf.ehcache.Ehcache.putWithWriter.

Put an element in the cache writing through a CacheWriter.
public void
public void
setTimeoutMillis(int
the time in ms. Must be a positive number. 0 means wait forever.
timeoutMillis
)

Sets the time to wait to acquire a lock.

public void
Inherited from net.sf.ehcache.constructs.EhcacheDecoratorAdapter:
acquireReadLockOnKeyacquireWriteLockOnKeyaddPropertyChangeListenerbootstrapcalculateInMemorySizecalculateOffHeapSizecalculateOnDiskSizeclonecreateQuerydisableDynamicFeaturesdisposeevictExpiredElementsflushgetAllgetBootstrapCacheLoadergetCacheConfigurationgetCacheEventNotificationServicegetCacheExceptionHandlergetCacheManagergetDiskStoreSizegetGuidgetInternalContextgetKeysgetKeysNoDuplicateCheckgetKeysWithExpiryCheckgetMemoryStoreSizegetNamegetOffHeapStoreSizegetQuietgetQuietgetRegisteredCacheExtensionsgetRegisteredCacheLoadersgetRegisteredCacheWritergetSearchAttributegetSearchAttributesgetSizegetStatisticsgetStatusgetWriterManagerhasAbortedSizeOfinitialiseisClusterBulkLoadEnabledisClusterCoherentisDisabledisElementInMemoryisElementInMemoryisElementOnDiskisElementOnDiskisExpiredisKeyInCacheisNodeBulkLoadEnabledisNodeCoherentisReadLockedByCurrentThreadisSearchableisValueInCacheisWriteLockedByCurrentThreadputAllrecalculateSizeregisterCacheExtensionregisterCacheWriterregisterDynamicAttributesExtractorreleaseReadLockOnKeyreleaseWriteLockOnKeyremoveremoveremoveremoveremoveAllremoveAllremoveAllremoveAllremoveAndReturnElementremoveElementremovePropertyChangeListenerremoveQuietremoveQuietremoveWithWriterreplacereplacesetBootstrapCacheLoadersetCacheExceptionHandlersetCacheManagersetDisabledsetNamesetNodeBulkLoadEnabledsetNodeCoherentsetTransactionManagerLookuptoStringtryReadLockOnKeytryWriteLockOnKeyunregisterCacheExtensionunregisterCacheWriterwaitUntilClusterBulkLoadCompletewaitUntilClusterCoherent

Field Detail

cacheLockProviderReferenceback to summary
private final AtomicReference<CacheLockProvider> cacheLockProviderReference
getObserverback to summary
private final OperationObserver<BlockingCacheOperationOutcomes.GetOutcome> getObserver
stripesback to summary
private final int stripes
timeoutMillisback to summary
protected volatile int timeoutMillis

The amount of time to block a thread before a LockTimeoutException is thrown

Constructor Detail

BlockingCacheback to summary
public BlockingCache(final Ehcache cache, int numberOfStripes) throws CacheException

Creates a BlockingCache which decorates the supplied cache.

Parameters
cache:Ehcache

a backing ehcache.

numberOfStripes:int

how many stripes to has the keys against. Must be a non-zero even number. This is a trade-off between memory use and concurrency

Exceptions
CacheException:
shouldn't happen
Since
1.2
BlockingCacheback to summary
public BlockingCache(final Ehcache cache) throws CacheException

Creates a BlockingCache which decorates the supplied cache.

Parameters
cache:Ehcache

a backing ehcache.

Exceptions
CacheException:
shouldn't happen
Since
1.6.1

Method Detail

acquiredLockForKeyback to summary
private void acquiredLockForKey(final Object key, final Sync lock, final LockType lockType)
createCacheLockProviderback to summary
private CacheLockProvider createCacheLockProvider()
doAndReleaseWriteLockback to summary
private <V> V doAndReleaseWriteLock(BlockingCache.PutAction<V> putAction)
getback to summary
public Element get(final Object key) throws RuntimeException, LockTimeoutException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.get.

Implements net.sf.ehcache.Ehcache.get.

Looks up an entry. Blocks if the entry is null until a call to put is done to put an Element in.

If a put is not done, the lock is never released.

If this method throws an exception, it is the responsibility of the caller to catch that exception and call put(new Element(key, null)); to release the lock acquired. See net.sf.ehcache.constructs.blocking.SelfPopulatingCache for an example.

Note

If a LockTimeoutException is thrown while doing a get it means the lock was never acquired, therefore it is a threading error to call put

Parameters
key:Object

Doc from net.sf.ehcache.Ehcache.get.

an Object value

Returns:Element

Doc from net.sf.ehcache.Ehcache.get.

the element, or null, if it does not exist.

Annotations
@Override
Exceptions
RuntimeException:
if thrown the lock will not released. Catch and callput(new Element(key, null)); to release the lock acquired.
LockTimeoutException:
if timeout millis is non zero and this method has been unable to acquire a lock in that time
getback to summary
public Element get(Serializable key) throws IllegalStateException, CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.get.

Implements net.sf.ehcache.Ehcache.get.

Gets an element from the cache. Updates Element Statistics

Note that the Element's lastAccessTime is always the time of this get. Use getQuiet(Object) to peak into the Element to see its last access time with get

Parameters
key:Serializable

a serializable value

Returns:Element

the element, or null, if it does not exist.

Annotations
@Override
Exceptions
IllegalStateException:
if the cache is not net.sf.ehcache.Status#STATUS_ALIVE
See Also
isExpired
getAllWithLoaderback to summary
public Map<K, V> getAllWithLoader(Collection<E> keys, Object loaderArgument) throws CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.getAllWithLoader.

Implements net.sf.ehcache.Ehcache.getAllWithLoader.

This method is not appropriate to use with BlockingCache.

Parameters
keys:Collection<E>

Doc from net.sf.ehcache.Ehcache.getAllWithLoader.

a collection of keys to be returned/loaded

loaderArgument:Object

Doc from net.sf.ehcache.Ehcache.getAllWithLoader.

an argument to pass to the CacheLoader.

Returns:Map<K, V>

Doc from net.sf.ehcache.Ehcache.getAllWithLoader.

a Map populated from the Cache. If there are no elements, an empty Map is returned.

Annotations
@Override
Exceptions
CacheException:
if this method is called
getCacheback to summary
protected Ehcache getCache()

Retrieve the EHCache backing cache

Returns:Ehcache

the backing cache

getCacheLockProviderback to summary
private CacheLockProvider getCacheLockProvider()
getLockForKeyback to summary
protected Sync getLockForKey(final Object key)

Gets the Sync to use for a given key.

Parameters
key:Object

the key

Returns:Sync

one of a limited number of Sync's.

getTimeoutMillisback to summary
public int getTimeoutMillis()

Gets the time to wait to acquire a lock.

Returns:int

the time in ms.

getWithLoaderback to summary
public Element getWithLoader(Object key, CacheLoader loader, Object loaderArgument) throws CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.getWithLoader.

Implements net.sf.ehcache.Ehcache.getWithLoader.

This method is not appropriate to use with BlockingCache.

Parameters
key:Object

Doc from net.sf.ehcache.Ehcache.getWithLoader.

key whose associated value is to be returned.

loader:CacheLoader

Doc from net.sf.ehcache.Ehcache.getWithLoader.

the override loader to use. If null, the cache's default loader will be used

loaderArgument:Object

Doc from net.sf.ehcache.Ehcache.getWithLoader.

an argument to pass to the CacheLoader.

Returns:Element

Doc from net.sf.ehcache.Ehcache.getWithLoader.

an element if it existed or could be loaded, otherwise null

Annotations
@Override
Exceptions
CacheException:
if this method is called
livenessback to summary
public synchronized String liveness()

Synchronized version of getName to test liveness of the object lock.

The time taken for this method to return is a useful measure of runtime contention on the cache.

Returns:String

the name of the cache.

loadback to summary
public void load(Object key) throws CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.load.

Implements net.sf.ehcache.Ehcache.load.

This method is not appropriate to use with BlockingCache.

Parameters
key:Object

Doc from net.sf.ehcache.Ehcache.load.

key whose associated value to be loaded using the associated cacheloader if this cache doesn't contain it.

Annotations
@Override
Exceptions
CacheException:
if this method is called
loadAllback to summary
public void loadAll(Collection<E> keys, Object argument) throws CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.loadAll.

Implements net.sf.ehcache.Ehcache.loadAll.

This method is not appropriate to use with BlockingCache.

Parameters
keys:Collection<E>

Doc from net.sf.ehcache.Ehcache.loadAll.

- collection of the keys whose associated values to be loaded into this cache by using the associated cacheloader if this cache doesn't contain them.

argument:Object

Doc from net.sf.ehcache.Ehcache.loadAll.

can be anything that makes sense to the loader

The Ehcache native API provides similar functionality to loaders using the decorator net.sf.ehcache.constructs.blocking.SelfPopulatingCache

Annotations
@Override
Exceptions
CacheException:
if this method is called
putback to summary
public void put(final Element element)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.put.

Implements net.sf.ehcache.Ehcache.put.

Adds an entry and unlocks it

Parameters
element:Element

Doc from net.sf.ehcache.Ehcache.put.

An object. If Serializable it can fully participate in replication and the DiskStore.

Annotations
@Override
putback to summary
public void put(final Element element, final boolean doNotNotifyCacheReplicators) throws IllegalArgumentException, IllegalStateException, CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.put.

Implements net.sf.ehcache.Ehcache.put.

Doc from net.sf.ehcache.constructs.EhcacheDecoratorAdapter.put.

Put an element in the cache.

Resets the access statistics on the element, which would be the case if it has previously been gotten from a cache, and is now being put back.

Also notifies the CacheEventListener that:

  • the element was put, but only if the Element was actually put.
  • if the element exists in the cache, that an update has occurred, even if the element would be expired if it was requested
Parameters
element:Element

Doc from net.sf.ehcache.Ehcache.put.

An object. If Serializable it can fully participate in replication and the DiskStore.

doNotNotifyCacheReplicators:boolean

Doc from net.sf.ehcache.Ehcache.put.

whether the put is coming from a doNotNotifyCacheReplicators cache peer, in which case this put should not initiate a further notification to doNotNotifyCacheReplicators cache peers

Annotations
@Override
Exceptions
IllegalArgumentException:

Doc from net.sf.ehcache.Ehcache.put.

if the element is null

IllegalStateException:

Doc from net.sf.ehcache.Ehcache.put.

if the cache is not net.sf.ehcache.Status#STATUS_ALIVE

putIfAbsentback to summary
public Element putIfAbsent(final Element element) throws NullPointerException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putIfAbsent.

Implements net.sf.ehcache.Ehcache.putIfAbsent.

Doc from net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putIfAbsent.

Put an element in the cache if no element is currently mapped to the elements key.

Parameters
element:Element

Doc from net.sf.ehcache.Ehcache.putIfAbsent.

element to be added

Returns:Element

Doc from net.sf.ehcache.Ehcache.putIfAbsent.

the element previously cached for this key, or null if none.

Annotations
@Override
Exceptions
NullPointerException:

Doc from net.sf.ehcache.Ehcache.putIfAbsent.

if the element is null, or has a null key

putIfAbsentback to summary
public Element putIfAbsent(final Element element, final boolean doNotNotifyCacheReplicators) throws NullPointerException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putIfAbsent.

Implements net.sf.ehcache.Ehcache.putIfAbsent.

Doc from net.sf.ehcache.Ehcache.putIfAbsent.

Put an element in the cache if no element is currently mapped to the elements key.

Parameters
element:Element

element to be added

doNotNotifyCacheReplicators:boolean

whether the put is coming from a doNotNotifyCacheReplicators cache peer, in which case this put should not initiate a further notification to doNotNotifyCacheReplicators cache peers

Returns:Element

the element previously cached for this key, or null if none.

Annotations
@Override
Exceptions
NullPointerException:
if the element is null, or has a null key
putQuietback to summary
public void putQuiet(final Element element) throws IllegalArgumentException, IllegalStateException, CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putQuiet.

Implements net.sf.ehcache.Ehcache.putQuiet.

Doc from net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putQuiet.

Put an element in the cache, without updating statistics, or updating listeners. This is meant to be used in conjunction with getQuiet

Parameters
element:Element

Doc from net.sf.ehcache.Ehcache.putQuiet.

An object. If Serializable it can fully participate in replication and the DiskStore.

Annotations
@Override
Exceptions
IllegalArgumentException:

Doc from net.sf.ehcache.Ehcache.putQuiet.

if the element is null

IllegalStateException:

Doc from net.sf.ehcache.Ehcache.putQuiet.

if the cache is not net.sf.ehcache.Status#STATUS_ALIVE

putWithWriterback to summary
public void putWithWriter(final Element element) throws IllegalArgumentException, IllegalStateException, CacheException

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putWithWriter.

Implements net.sf.ehcache.Ehcache.putWithWriter.

Doc from net.sf.ehcache.constructs.EhcacheDecoratorAdapter.putWithWriter.

Put an element in the cache writing through a CacheWriter. If no CacheWriter has been registered for the cache, then this method throws an exception.

Resets the access statistics on the element, which would be the case if it has previously been gotten from a cache, and is now being put back.

Also notifies the CacheEventListener, if the writer operation succeeds, that:

  • the element was put, but only if the Element was actually put.
  • if the element exists in the cache, that an update has occurred, even if the element would be expired if it was requested
Parameters
element:Element

Doc from net.sf.ehcache.Ehcache.putWithWriter.

An object. If Serializable it can fully participate in replication and the DiskStore.

Annotations
@Override
Exceptions
IllegalArgumentException:

Doc from net.sf.ehcache.Ehcache.putWithWriter.

if the element is null

IllegalStateException:

Doc from net.sf.ehcache.Ehcache.putWithWriter.

if the cache is not net.sf.ehcache.Status#STATUS_ALIVE

CacheException:

Doc from net.sf.ehcache.Ehcache.putWithWriter.

if no CacheWriter was registered

registerCacheLoaderback to summary
public void registerCacheLoader(CacheLoader cacheLoader)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.registerCacheLoader.

Implements net.sf.ehcache.Ehcache.registerCacheLoader.

Register a CacheLoader with the cache. It will then be tied into the cache lifecycle.

If the CacheLoader is not initialised, initialise it.

Parameters
cacheLoader:CacheLoader

A Cache Loader to register

Annotations
@Override
setTimeoutMillisback to summary
public void setTimeoutMillis(int timeoutMillis)

Sets the time to wait to acquire a lock. This may be modified at any time.

The consequences of setting a timeout are:

  1. if a lock cannot be acquired in the given time a LockTimeoutException is thrown.
  2. if there is a queue of threads waiting for the first thread to complete, but it does not complete within the time out period, the successive threads may find that they have exceeded their lock timeouts and fail. This is usually a good thing because it stops a build up of threads from overwhelming a busy resource, but it does need to be considered in the design of user interfaces. The timeout should be set no greater than the time a user would be expected to wait before considering the action will never return
  3. it will be common to see a number of threads timeout trying to get the same lock. This is a normal and desired consequence.
The consequences of not setting a timeout (or setting it to 0) are:
  1. There are no partial failures in the system. But there is a greater possibility that a temporary overload in one part of the system can cause a back up that may take a long time to recover from.
  2. A failing method that perhaps fails because a resource is overloaded will be hit by each thread in turn, no matter whether there is a still a user who cares about getting a response.
Parameters
timeoutMillis:int

the time in ms. Must be a positive number. 0 means wait forever.

unregisterCacheLoaderback to summary
public void unregisterCacheLoader(CacheLoader cacheLoader)

Overrides net.sf.ehcache.constructs.EhcacheDecoratorAdapter.unregisterCacheLoader.

Implements net.sf.ehcache.Ehcache.unregisterCacheLoader.

Unregister a CacheLoader with the cache. It will then be detached from the cache lifecycle.

Parameters
cacheLoader:CacheLoader

A Cache Loader to unregister

Annotations
@Override
net.sf.ehcache.constructs.blocking back to summary

private abstract Class BlockingCache.PutAction<V>

extends Object
Class Inheritance

Callable like class to actually execute one of the many Ehcache.put* methods in the context of a BlockingCache

Field Summary

Modifier and TypeField and Description
private final Element

Constructor Summary

AccessConstructor and Description
private
PutAction(Element element)

Method Summary

Modifier and TypeMethod and Description
pack-priv abstract V

Returns:

the return value of the put*
put
()

implement method with the put*

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

elementback to summary
private final Element element

Constructor Detail

PutActionback to summary
private PutAction(Element element)

Method Detail

putback to summary
pack-priv abstract V put()

implement method with the put*

Returns:V

the return value of the put*