blob: 40041cbd3a8c0916a8981646b0fc4d5d0ef80ab1 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.cache;
import java.io.File;
import java.util.Properties;
import com.gemstone.gemfire.cache.client.PoolManager;
import com.gemstone.gemfire.compression.Compressor;
import com.gemstone.gemfire.distributed.LeaseExpiredException;
import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
import com.gemstone.gemfire.internal.cache.LocalRegion;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
/**
* <code>RegionFactory</code> is used to create {@link Region regions}
* in a {@link Cache cache}.
* Instances of this interface can be created:
<ul>
<li>using a {@link RegionShortcut shortcut} by calling {@link Cache#createRegionFactory(RegionShortcut)} which will initialize the factory with the shortcut's region attributes
<li>using a named region attribute by calling {@link Cache#createRegionFactory(String)} which will initialize the factory the named region attributes
<li>using a region attribute instance by calling {@link Cache#createRegionFactory(RegionAttributes)} which will initialize the factory with the given region attributes
<li>by calling {@link Cache#createRegionFactory()} which will initialize the factory with defaults
</ul>
Once the factory has been created it can be customized with its setter methods.
<p>
The final step is to produce a {@link Region} by calling {@link #create(String)}.
<p>Example: Create a replicate region with a CacheListener
<PRE>
Cache c = new CacheFactory().create();
// Create replicate region.
// Add a cache listener before creating region
Region r = c.createRegionFactory(REPLICATE)
.addCacheListener(myListener)
.create("replicate");
</PRE>
<p>Example: Create a partition region that has redundancy
<PRE>
Cache c = new CacheFactory().create();
// Create replicate region.
// Add a cache listener before creating region
Region r = c.createRegionFactory(PARTITION_REDUNDANT)
.create("partition");
</PRE>
*
* @author Mitch Thomas
* @since 5.0
*/
public class RegionFactory<K,V>
{
private final AttributesFactory<K,V> attrsFactory;
private final GemFireCacheImpl cache;
/**
* For internal use only.
* @since 6.5
*/
protected RegionFactory(GemFireCacheImpl cache) {
this.cache = cache;
this.attrsFactory = new AttributesFactory<K,V>();
}
/**
* For internal use only.
* @since 6.5
*/
protected RegionFactory(GemFireCacheImpl cache, RegionShortcut pra) {
this.cache = cache;
RegionAttributes ra = cache.getRegionAttributes(pra.toString());
if (ra == null) {
throw new IllegalStateException("The region shortcut " + pra
+ " has been removed.");
}
this.attrsFactory = new AttributesFactory<K,V>(ra);
}
/**
* For internal use only.
* @since 6.5
*/
protected RegionFactory(GemFireCacheImpl cache, RegionAttributes ra) {
this.cache = cache;
this.attrsFactory = new AttributesFactory<K,V>(ra);
}
/**
* For internal use only.
* @since 6.5
*/
protected RegionFactory(GemFireCacheImpl cache, String regionAttributesId) {
this.cache = cache;
RegionAttributes<K,V> ra = getCache().getRegionAttributes(regionAttributesId);
if (ra == null) {
throw new IllegalStateException(LocalizedStrings.RegionFactory_NO_ATTRIBUTES_ASSOCIATED_WITH_0.toLocalizedString(regionAttributesId));
}
this.attrsFactory = new AttributesFactory<K,V>(ra);
}
/**
* Constructs a RegionFactory by creating a DistributedSystem and a Cache. If
* no DistributedSystem exists it creates a DistributedSystem with default
* configuration, otherwise it uses the existing DistributedSystem. The
* default Region configuration is used.
*
* @throws CacheException
* if unable to connect the DistributedSystem or create a Cache
* @deprecated as of 6.5 use {@link Cache#createRegionFactory()} instead.
*/
@Deprecated
public RegionFactory() throws CacheWriterException, RegionExistsException,
TimeoutException {
this((GemFireCacheImpl)new CacheFactory().create());
}
/**
* Constructs a RegionFactory by creating a DistributedSystem and a Cache. If
* no DistributedSystem exists it creates a DistributedSystem with default
* configuration, otherwise it uses the existing DistributedSystem. The Region
* configuration is initialized using the provided RegionAttributes.
*
* @throws CacheException
* if unable to connect the DistributedSystem or create a Cache
* @deprecated as of 6.5 use {@link Cache#createRegionFactory(RegionAttributes)} instead.
*/
@Deprecated
public RegionFactory(RegionAttributes<K,V> regionAttributes)
throws CacheWriterException, RegionExistsException, TimeoutException {
this((GemFireCacheImpl)new CacheFactory().create(), regionAttributes);
}
/**
* Constructs a RegionFactory by creating a DistributedSystem and a Cache. If
* no DistributedSystem exists it creates a DistributedSystem with default
* configuration, otherwise it uses the existing DistributedSystem. The Region
* configuration is initialized using the RegionAttributes identified in the
* cache.xml file by the provided identifier.
*
* @param regionAttributesId
* that identifies a set of RegionAttributes in the cache-xml file.
* @see Cache#getRegionAttributes
* @throws IllegalArgumentException
* if there are no attributes associated with the id
* @throws CacheException
* if unable to connect the DistributedSystem or create a Cache
* @deprecated as of 6.5 use {@link Cache#createRegionFactory(String)} instead.
*/
@Deprecated
public RegionFactory(String regionAttributesId) throws CacheWriterException,
RegionExistsException, TimeoutException {
this((GemFireCacheImpl)new CacheFactory().create(), regionAttributesId);
}
/**
* Constructs a RegionFactory by creating a DistributedSystem and a Cache. If
* a DistributedSystem already exists with the same properties it uses that
* DistributedSystem, otherwise a DistributedSystem is created using the
* provided properties. The default Region configuration is used.
*
* @param distributedSystemProperties
* an instance of Properties containing
* <code>DistributedSystem</code configuration
* @throws CacheException if unable to connect the DistributedSystem or create a Cache
* @deprecated as of 6.5 use {@link CacheFactory#CacheFactory(Properties)} and {@link Cache#createRegionFactory()} instead.
*/
@Deprecated
public RegionFactory(Properties distributedSystemProperties)
throws CacheWriterException, RegionExistsException, TimeoutException {
this((GemFireCacheImpl)new CacheFactory(distributedSystemProperties).create());
}
/**
* Constructs a RegionFactory by creating a DistributedSystem and a Cache. If
* a DistributedSystem already exists with the same properties it uses that
* DistributedSystem, otherwise a DistributedSystem is created using the
* provided properties. The initial Region configuration is set using the
* RegionAttributes provided.
*
* @param distributedSystemProperties
* properties used to either find or create a DistributedSystem.
* @param regionAttributes
* the initial Region configuration for this RegionFactory.
* @throws CacheException
* if unable to connect the DistributedSystem or create a Cache
* @deprecated as of 6.5 use {@link CacheFactory#CacheFactory(Properties)} and {@link Cache#createRegionFactory(RegionAttributes)} instead.
*/
@Deprecated
public RegionFactory(Properties distributedSystemProperties,
RegionAttributes<K,V> regionAttributes) throws CacheWriterException,
RegionExistsException, TimeoutException {
this((GemFireCacheImpl)new CacheFactory(distributedSystemProperties).create(), regionAttributes);
}
/**
* Constructs a RegionFactory by creating a DistributedSystem and a Cache. If
* a DistributedSystem already exists whose properties match those provied, it
* uses that DistributedSystem. The Region configuration is initialized using
* the RegionAttributes identified in the cache.xml file by the provided
* identifier.
*
* @param distributedSystemProperties
* properties used to either find or create a DistributedSystem.
* @param regionAttributesId
* the identifier for set of RegionAttributes in the cache.xml file
* used as the initial Region configuration for this RegionFactory.
* @throws IllegalArgumentException
* if there are no attributes associated with the id
*
* @throws CacheException
* if unable to connect the DistributedSystem or create a Cache
* @deprecated as of 6.5 use {@link CacheFactory#CacheFactory(Properties)} and {@link Cache#createRegionFactory(String)} instead.
*
*/
@Deprecated
public RegionFactory(Properties distributedSystemProperties,
String regionAttributesId) throws CacheWriterException,
RegionExistsException, TimeoutException {
this((GemFireCacheImpl)new CacheFactory(distributedSystemProperties).create(), regionAttributesId);
}
/**
* Returns the cache used by this factory.
*/
private synchronized GemFireCacheImpl getCache() {
return this.cache;
}
/**
* Sets the cache loader for the next <code>RegionAttributes</code> created.
*
* @param cacheLoader
* the cache loader or null if no loader
* @return a reference to this RegionFactory object
* @see AttributesFactory#setCacheLoader
*
*/
public RegionFactory<K,V> setCacheLoader(CacheLoader<K,V> cacheLoader)
{
this.attrsFactory.setCacheLoader(cacheLoader);
return this;
}
/**
* Sets the cache writer for the next <code>RegionAttributes</code> created.
*
* @param cacheWriter
* the cache writer or null if no cache writer
* @return a reference to this RegionFactory object
* @see AttributesFactory#setCacheWriter
*/
public RegionFactory<K,V> setCacheWriter(CacheWriter<K,V> cacheWriter)
{
this.attrsFactory.setCacheWriter(cacheWriter);
return this;
}
/**
* Adds a cache listener to the end of the list of cache listeners on this factory.
* @param aListener the cache listener to add
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException if <code>aListener</code> is null
* @see AttributesFactory#addCacheListener
*/
public RegionFactory<K,V> addCacheListener(CacheListener<K,V> aListener)
{
this.attrsFactory.addCacheListener(aListener);
return this;
}
/**
* Removes all cache listeners and then adds each listener in the specified array.
* for the next <code>RegionAttributes</code> created.
* @param newListeners a possibly null or empty array of listeners to add to this factory.
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException if the <code>newListeners</code> array has a null element
* @see AttributesFactory#initCacheListeners
*/
public RegionFactory<K,V> initCacheListeners(CacheListener<K,V>[] newListeners)
{
this.attrsFactory.initCacheListeners(newListeners);
return this;
}
/**
* Sets the eviction attributes that controls growth of the Region to be created.
*
* @param evictionAttributes for the Region to create
* @return a reference to this RegionFactory object
*/
public RegionFactory<K,V> setEvictionAttributes(EvictionAttributes evictionAttributes) {
this.attrsFactory.setEvictionAttributes(evictionAttributes);
return this;
}
/**
* Sets the idleTimeout expiration attributes for region entries for the next
* <code>RegionAttributes</code> created.
* Note that the XML element that corresponds to this method "entry-idle-time", does not include "out" in its name.
*
* @param idleTimeout
* the idleTimeout ExpirationAttributes for entries in this region
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if idleTimeout is null
* @see AttributesFactory#setEntryIdleTimeout
*/
public RegionFactory<K,V> setEntryIdleTimeout(ExpirationAttributes idleTimeout)
{
this.attrsFactory.setEntryIdleTimeout(idleTimeout);
return this;
}
/**
* Sets the custom idleTimeout for the next <code>RegionAttributes</code>
* created.
*
* @param custom the custom method
* @return the receiver
* @see AttributesFactory#setCustomEntryIdleTimeout(CustomExpiry)
*/
public RegionFactory<K,V> setCustomEntryIdleTimeout(CustomExpiry<K,V> custom) {
this.attrsFactory.setCustomEntryIdleTimeout(custom);
return this;
}
/**
* Sets the timeToLive expiration attributes for region entries for the next
* <code>RegionAttributes</code> created.
*
* @param timeToLive
* the timeToLive ExpirationAttributes for entries in this region
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if timeToLive is null
* @see AttributesFactory#setEntryTimeToLive
*/
public RegionFactory<K,V> setEntryTimeToLive(ExpirationAttributes timeToLive)
{
this.attrsFactory.setEntryTimeToLive(timeToLive);
return this;
}
/**
* Sets the custom timeToLive expiration method for the next
* <code>RegionAttributes</code> created.
* @param custom the custom method
* @return the receiver
* @see AttributesFactory#setCustomEntryTimeToLive(CustomExpiry)
*/
public RegionFactory<K,V> setCustomEntryTimeToLive(CustomExpiry<K,V> custom) {
this.attrsFactory.setCustomEntryTimeToLive(custom);
return this;
}
/**
* Sets the idleTimeout expiration attributes for the region itself for the
* next <code>RegionAttributes</code> created.
* Note that the XML element that corresponds to this method "region-idle-time", does not include "out" in its name.
*
* @param idleTimeout
* the ExpirationAttributes for this region idleTimeout
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if idleTimeout is null
* @see AttributesFactory#setRegionIdleTimeout
*/
public RegionFactory<K,V> setRegionIdleTimeout(ExpirationAttributes idleTimeout)
{
this.attrsFactory.setRegionIdleTimeout(idleTimeout);
return this;
}
/**
* Sets the timeToLive expiration attributes for the region itself for the
* next <code>RegionAttributes</code> created.
*
* @param timeToLive
* the ExpirationAttributes for this region timeToLive
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if timeToLive is null
* @see AttributesFactory#setRegionTimeToLive
*/
public RegionFactory<K,V> setRegionTimeToLive(ExpirationAttributes timeToLive)
{
this.attrsFactory.setRegionTimeToLive(timeToLive);
return this;
}
/**
* Set custom {@link EvictionCriteria} for the region with start time and
* interval of evictor task to be run in milliseconds, or evict incoming rows
* in case both start and frequency are specified as zero.
*
* @param criteria
* an {@link EvictionCriteria} to be used for eviction for HDFS
* persistent regions
* @param start
* the start time at which periodic evictor task should be first
* fired to apply the provided {@link EvictionCriteria}; if this is
* zero then current time is used for the first invocation of evictor
* @param interval
* the periodic frequency at which to run the evictor task after the
* initial start; if this is if both start and frequency are zero
* then {@link EvictionCriteria} is applied on incoming insert/update
* to determine whether it is to be retained
*/
public RegionFactory<K, V> setCustomEvictionAttributes(
EvictionCriteria<K, V> criteria, long start, long interval) {
this.attrsFactory.setCustomEvictionAttributes(criteria, start, interval);
return this;
}
/**
* Sets the scope for the next <code>RegionAttributes</code> created.
*
* @param scopeType
* the type of Scope to use for the region
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if scopeType is null
* @see AttributesFactory#setScope
*/
public RegionFactory<K,V> setScope(Scope scopeType)
{
this.attrsFactory.setScope(scopeType);
return this;
}
/**
* Sets the data policy for the next <code>RegionAttributes</code> created.
*
* @param dataPolicy
* The type of mirroring to use for the region
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if dataPolicy is null
* @see AttributesFactory#setDataPolicy
*/
public RegionFactory<K,V> setDataPolicy(DataPolicy dataPolicy)
{
this.attrsFactory.setDataPolicy(dataPolicy);
return this;
}
/**
* Sets for this region whether or not acks are sent after an update is processed.
*
* @param earlyAck set to true for the acknowledgement to be sent prior to processing the update
* @return a reference to this RegionFactory object
* @see AttributesFactory#setEarlyAck(boolean)
* @deprecated As of 6.5 this setting no longer has any effect.
*/
@Deprecated
public RegionFactory<K,V> setEarlyAck(boolean earlyAck) {
this.attrsFactory.setEarlyAck(earlyAck);
return this;
}
/**
* Sets whether distributed operations on this region should attempt to use multicast.
*
* @since 5.0
* @param value true to enable multicast
* @return a reference to this RegionFactory object
* @see AttributesFactory#setMulticastEnabled(boolean)
*/
public RegionFactory<K,V> setMulticastEnabled(boolean value) {
this.attrsFactory.setMulticastEnabled(value);
return this;
}
/**
* Sets the pool name attribute.
* This causes regions that use these attributes
* to be a client region which communicates with the
* servers that the connection pool communicates with.
* <p>If this attribute is set to <code>null</code> or <code>""</code>
* then the connection pool is disabled causing regions that use these attributes
* to be communicate with peers instead of servers.
* <p>The named connection pool must exist on the cache at the time these
* attributes are used to create a region. See {@link PoolManager#createFactory}
* for how to create a connection pool.
* @param poolName the name of the connection pool to use; if <code>null</code>
* or <code>""</code> then the connection pool attribute is disabled for regions
* using these attributes.
* @return a reference to this RegionFactory object
* @throws IllegalStateException if a cache loader or cache writer has already
* been set.
* @since 5.7
*/
public RegionFactory<K,V> setPoolName(String poolName) {
this.attrsFactory.setPoolName(poolName);
return this;
}
/**
* Sets whether or not this region should be considered a publisher.
* @since 5.0
* @deprecated as of 6.5
*/
@Deprecated
public void setPublisher(boolean v) {
// this.attrsFactory.setPublisher(v);
}
/**
* Sets whether or not conflation is enabled for sending messages
* to async peers.
* @param value true to enable async conflation
* @return a reference to this RegionFactory object
* @see AttributesFactory#setEnableAsyncConflation(boolean)
*/
public RegionFactory<K,V> setEnableAsyncConflation(boolean value) {
this.attrsFactory.setEnableAsyncConflation(value);
return this;
}
/**
* Sets whether or not conflation is enabled for sending messages
* from a cache server to its clients.
* @param value true to enable subscription conflation
* @return a reference to this RegionFactory object
* @see AttributesFactory#setEnableSubscriptionConflation(boolean)
*/
public RegionFactory<K,V> setEnableSubscriptionConflation(boolean value) {
this.attrsFactory.setEnableSubscriptionConflation(value);
return this;
}
/**
* Sets the key constraint for the next <code>RegionAttributes</code>
* created. Keys in the region will be constrained to this class (or
* subclass). Any attempt to store a key of an incompatible type in the region
* will cause a <code>ClassCastException</code> to be thrown.
*
* @param keyConstraint
* The Class to constrain the keys to, or null if no constraint
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if <code>keyConstraint</code> is a class denoting a primitive
* type
* @see AttributesFactory#setKeyConstraint
*/
public RegionFactory<K,V> setKeyConstraint(Class<K> keyConstraint)
{
this.attrsFactory.setKeyConstraint(keyConstraint);
return this;
}
/**
* Sets the value constraint for the next <code>RegionAttributes</code>
* created. Values in the region will be constrained to this class (or
* subclass). Any attempt to store a value of an incompatible type in the
* region will cause a <code>ClassCastException</code> to be thrown.
*
* @param valueConstraint
* The Class to constrain the values to, or null if no constraint
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if <code>valueConstraint</code> is a class denoting a primitive
* type
* @see AttributesFactory#setValueConstraint
*/
public RegionFactory<K,V> setValueConstraint(Class<V> valueConstraint)
{
this.attrsFactory.setValueConstraint(valueConstraint);
return this;
}
/**
* Sets the entry initial capacity for the next <code>RegionAttributes</code>
* created. This value is used in initializing the map that holds the entries.
*
* @param initialCapacity
* the initial capacity of the entry map
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException if initialCapacity is negative.
* @see java.util.HashMap
* @see AttributesFactory#setInitialCapacity
*/
public RegionFactory<K,V> setInitialCapacity(int initialCapacity)
{
this.attrsFactory.setInitialCapacity(initialCapacity);
return this;
}
/**
* Sets the entry load factor for the next <code>RegionAttributes</code>
* created. This value is used in initializing the map that holds the entries.
*
* @param loadFactor
* the load factor of the entry map
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if loadFactor is nonpositive
* @see java.util.HashMap
* @see AttributesFactory#setLoadFactor
*/
public RegionFactory<K,V> setLoadFactor(float loadFactor)
{
this.attrsFactory.setLoadFactor(loadFactor);
return this;
}
/**
* Sets the concurrency level tof the next <code>RegionAttributes</code>
* created. This value is used in initializing the map that holds the entries.
*
* @param concurrencyLevel
* the concurrency level of the entry map
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException
* if concurrencyLevel is nonpositive
* @see AttributesFactory#setConcurrencyLevel
*/
public RegionFactory<K,V> setConcurrencyLevel(int concurrencyLevel)
{
this.attrsFactory.setConcurrencyLevel(concurrencyLevel);
return this;
}
/**
* Enables a versioning system that detects concurrent modifications and
* ensures that region contents are consistent across the distributed
* system. This setting must be the same in each member having the region.
*
* @since 7.0
* @param enabled whether concurrency checks should be enabled for the region
* @see AttributesFactory#setConcurrencyChecksEnabled
*/
public RegionFactory<K,V> setConcurrencyChecksEnabled(boolean enabled)
{
this.attrsFactory.setConcurrencyChecksEnabled(enabled);
return this;
}
/**
* Returns whether or not disk writes are asynchronous.
*
* @return a reference to this RegionFactory object
* @see Region#writeToDisk
* @see AttributesFactory#setDiskWriteAttributes
* @deprecated as of 6.5 use {@link #setDiskStoreName} instead
*
*/
@Deprecated
public RegionFactory<K,V> setDiskWriteAttributes(DiskWriteAttributes attrs)
{
this.attrsFactory.setDiskWriteAttributes(attrs);
return this;
}
/**
* Sets the DiskStore name attribute.
* This causes the region to belong to the DiskStore.
* @param name the name of the diskstore
* @return a reference to this RegionFactory object
* @since 6.5
*
* @see AttributesFactory#setDiskStoreName
*/
public RegionFactory<K,V> setDiskStoreName(String name) {
this.attrsFactory.setDiskStoreName(name);
return this;
}
/**
* Sets whether or not the writing to the disk is synchronous.
*
* @param isSynchronous
* boolean if true indicates synchronous writes
* @return a reference to this RegionFactory object
* @since 6.5
*/
public RegionFactory<K,V> setDiskSynchronous(boolean isSynchronous)
{
this.attrsFactory.setDiskSynchronous(isSynchronous);
return this;
}
/**
* Sets the directories to which the region's data are written. If multiple
* directories are used, GemFire will attempt to distribute the data evenly
* amongst them.
*
* @return a reference to this RegionFactory object
* @throws GemfireIOException if a directory cannot be created
*
* @see AttributesFactory#setDiskDirs
* @deprecated as of 6.5 use {@link DiskStoreFactory#setDiskDirs} instead
*/
@Deprecated
public RegionFactory<K,V> setDiskDirs(File[] diskDirs)
{
this.attrsFactory.setDiskDirs(diskDirs);
return this;
}
/**
* Sets the directories to which the region's data are written and also set their sizes in megabytes
*
* @return a reference to this RegionFactory object
* @throws IllegalArgumentException if length of the size array
* does not match to the length of the dir array
* @throws GemfireIOException if a directory cannot be created
*
* @since 5.1
* @see AttributesFactory#setDiskDirsAndSizes
* @deprecated as of 6.5 use {@link DiskStoreFactory#setDiskDirsAndSizes} instead
*/
@Deprecated
public RegionFactory<K,V> setDiskDirsAndSizes(File[] diskDirs,int[] diskSizes) {
this.attrsFactory.setDiskDirsAndSizes(diskDirs, diskSizes);
return this;
}
/**
* Sets the <code>PartitionAttributes</code> that describe how the region is
* partitioned among members of the distributed system.
*
* @return a reference to this RegionFactory object
* @see AttributesFactory#setPartitionAttributes
*/
public RegionFactory<K,V> setPartitionAttributes(PartitionAttributes partition)
{
this.attrsFactory.setPartitionAttributes(partition);
return this;
}
/**
* Sets the <code>MembershipAttributes</code> that describe the membership
* roles required for reliable access to the region.
*
* @param ra the MembershipAttributes to use
* @return a reference to this RegionFactory object
* @see AttributesFactory#setMembershipAttributes
*/
public RegionFactory<K,V> setMembershipAttributes(MembershipAttributes ra) {
this.attrsFactory.setMembershipAttributes(ra);
return this;
}
/**
* Sets how indexes on this region are kept current.
*
* @param synchronous
* whether indexes are maintained in a synchronized fashion
* @return a reference to this RegionFactory object
*/
public RegionFactory<K,V> setIndexMaintenanceSynchronous(boolean synchronous)
{
this.attrsFactory.setIndexMaintenanceSynchronous(synchronous);
return this;
}
/**
* Sets whether statistics are enabled for this region and its entries.
*
* @param statisticsEnabled
* whether statistics are enabled
* @return a reference to this RegionFactory object
* @see AttributesFactory#setStatisticsEnabled
*/
public RegionFactory<K,V> setStatisticsEnabled(boolean statisticsEnabled)
{
this.attrsFactory.setStatisticsEnabled(statisticsEnabled);
return this;
}
/**
* Sets whether operations on this region should be controlled by
* JTA transactions or not
* @since 5.0
*/
public RegionFactory<K,V> setIgnoreJTA(boolean flag) {
this.attrsFactory.setIgnoreJTA(flag);
return this;
}
/**
* Sets whether this region should become lock grantor.
*
* @param isLockGrantor
* whether this region should become lock grantor
* @return a reference to this RegionFactory object
* @see AttributesFactory#setLockGrantor
*/
public RegionFactory<K,V> setLockGrantor(boolean isLockGrantor)
{
this.attrsFactory.setLockGrantor(isLockGrantor);
return this;
}
/**
* Sets the kind of interest this region has in events occuring in other caches that define
* the region by the same name.
* @param sa the attributes decribing the interest
* @return a reference to this RegionFactory object
* @see AttributesFactory#setSubscriptionAttributes(SubscriptionAttributes)
*/
public RegionFactory<K,V> setSubscriptionAttributes(SubscriptionAttributes sa) {
this.attrsFactory.setSubscriptionAttributes(sa);
return this;
}
/**
* Creates a region with the given name in this factory's {@link Cache}
* using the configuration contained in this factory. Validation of the
* provided attributes may cause exceptions to be thrown if there are problems
* with the configuration data.
*
* @param name
* the name of the region to create
*
* @return the region object
* @throws LeaseExpiredException
* if lease expired on distributed lock for Scope.GLOBAL
* @throws RegionExistsException
* if a region, shared or unshared, is already in this cache
* @throws TimeoutException
* if timed out getting distributed lock for Scope.GLOBAL
* @throws CacheClosedException
* if the cache is closed
* @throws IllegalStateException
* if the supplied RegionAttributes are incompatible with this region
* in another cache in the distributed system (see
* {@link AttributesFactory} for compatibility rules)
*/
@SuppressWarnings("unchecked")
public Region<K,V> create(String name) throws CacheExistsException,
RegionExistsException, CacheWriterException, TimeoutException
{
@SuppressWarnings("deprecation")
RegionAttributes<K,V> ra = this.attrsFactory.create();
return getCache().createRegion(name, ra);
}
/**
* Creates a sub-region in the {@link Cache} using
* the configuration contained in this RegionFactory. Validation of the
* provided attributes may cause exceptions to be thrown if there are problems
* with the configuration data.
*
* @param parent
* the existing region that will contain the created sub-region
* @param name
* the name of the region to create
*
* @return the region object
* @throws RegionExistsException
* if a region with the given name already exists in this cache
* @throws RegionDestroyedException
* if the parent region has been closed or destroyed
* @throws CacheClosedException
* if the cache is closed
* @since 7.0
*/
@SuppressWarnings("unchecked")
public Region<K,V> createSubregion(Region<?,?> parent, String name) throws RegionExistsException {
@SuppressWarnings("deprecation")
RegionAttributes<K,V> ra = this.attrsFactory.create();
return ((LocalRegion)parent).createSubregion(name, ra);
}
/**
* Sets cloning on region
* @param cloningEnable
* @return a reference to this RegionFactory object
* @since 6.1
* @see AttributesFactory#setCloningEnabled
*/
public RegionFactory<K,V> setCloningEnabled(boolean cloningEnable) {
this.attrsFactory.setCloningEnabled(cloningEnable);
return this;
}
/**
* Adds a gatewaySenderId to the RegionAttributes
* @param gatewaySenderId
* @return a reference to this RegionFactory object
* @since 7.0
* @see AttributesFactory#addGatewaySenderId(String)
*/
public RegionFactory<K,V> addGatewaySenderId(String gatewaySenderId)
{
this.attrsFactory.addGatewaySenderId(gatewaySenderId);
return this;
}
/**
* Adds a asyncEventQueueId to the RegionAttributes
*
* @param asyncEventQueueId id of AsyncEventQueue
* @return a reference to this RegionFactory instance
* @since 7.0
*/
public RegionFactory<K,V> addAsyncEventQueueId(String asyncEventQueueId) {
this.attrsFactory.addAsyncEventQueueId(asyncEventQueueId);
return this;
}
/**
* Sets the HDFSStore name attribute.
* This causes the region to belong to the HDFSStore.
* @param name the name of the hdfsstore
* @return a reference to this RegionFactory object
*
* @see AttributesFactory#setHDFSStoreName
* @since 9.0
*/
public RegionFactory<K,V> setHDFSStoreName(String name) {
this.attrsFactory.setHDFSStoreName(name);
return this;
}
/**
* Sets the HDFS write only attribute. if the region
* is configured to be write only to HDFS, events that have
* been evicted from memory cannot be read back from HDFS.
* Events are written to HDFS in the order in which they occurred.
* @since 9.0
*/
public RegionFactory<K,V> setHDFSWriteOnly(boolean writeOnly) {
this.attrsFactory.setHDFSWriteOnly(writeOnly);
return this;
}
/**
* Set the compressor to be used by this region for compressing
* region entry values.
* @param compressor a compressor
* @return a reference to this RegionFactory instance
* @since 8.0
*/
public RegionFactory<K,V> setCompressor(Compressor compressor) {
this.attrsFactory.setCompressor(compressor);
return this;
}
/**
* Enables this region's usage of off-heap memory if true.
* @param offHeap boolean flag to enable off-heap memory
* @since 9.0
*/
public RegionFactory<K,V> setOffHeap(boolean offHeap) {
this.attrsFactory.setOffHeap(offHeap);
return this;
}
}