blob: fc7f4f3fd47e00be491d9fbeefd211194b294406 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.cache;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
import org.apache.geode.cache.asyncqueue.AsyncEventQueueFactory;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.Pool;
import org.apache.geode.cache.server.CacheServer;
import org.apache.geode.cache.snapshot.CacheSnapshotService;
import org.apache.geode.cache.util.GatewayConflictResolver;
import org.apache.geode.cache.wan.GatewayReceiver;
import org.apache.geode.cache.wan.GatewayReceiverFactory;
import org.apache.geode.cache.wan.GatewaySender;
import org.apache.geode.cache.wan.GatewaySenderFactory;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.DistributedSystem;
import org.apache.geode.i18n.LogWriterI18n;
/**
* Caches are obtained from the {@link CacheFactory#create()} method. See {@link CacheFactory} for
* common usage patterns for creating the cache instance.
* <p>
* When a cache is created a {@link DistributedSystem} is also created. This system tells the cache
* where to find other caches on the network and how to communicate with them. The system can also
* specify a <a href="../distribution/DistributedSystem.html#cache-xml-file">"cache-xml-file"</a>
* property which will cause this cache to be initialized with the contents of that file. The
* contents must comply with the {@code "doc-files/cache8_0.dtd"} file and the top level element
* must be a {@code cache} element.
* <p>
* When a cache will no longer be used it should be {@link #close() closed}. Once it
* {@link #isClosed is closed} any attempt to use it or any {@link Region} obtained from it will
* cause a {@link CacheClosedException} to be thrown.
* <p>
* A cache can have multiple root regions, each with a different name.
*
* @since GemFire 2.0
*/
@SuppressWarnings("deprecation")
public interface Cache extends GemFireCache {
/**
* Terminates this object cache and releases all the resources. Calls {@link Region#close} on each
* region in the cache. After this cache is closed, any further method call on this cache or any
* region object will throw {@link CacheClosedException}, unless otherwise noted.
*
* @param keepAlive whether the server should keep the durable client's queues alive for the
* timeout period
* @throws CacheClosedException if the cache is already closed.
* @deprecated as of 6.5 use {@link ClientCache#close(boolean)} instead.
*/
@Deprecated
void close(boolean keepAlive);
/**
* Creates a VM region using the specified RegionAttributes.
*
* @param name the name of the region to create
* @param aRegionAttributes the attributes of the root region
* @return the region object
* @throws RegionExistsException if a region is already in this cache
* @throws org.apache.geode.distributed.LeaseExpiredException if lease expired on distributed lock
* for Scope.GLOBAL
* @throws TimeoutException if timed out getting distributed lock for Scope.GLOBAL
* @throws CacheClosedException if the cache is closed
* @throws IllegalStateException If the supplied RegionAttributes violate the
* <a href="AttributesFactory.html#creationConstraints">region creation constraints</a>
* with a region of the same name in another cache in the distributed system
* @deprecated as of GemFire 5.0, use {@link #createRegion} instead.
*/
@Deprecated
<K, V> Region<K, V> createVMRegion(String name, RegionAttributes<K, V> aRegionAttributes)
throws RegionExistsException, TimeoutException;
/**
* Creates a region using the specified RegionAttributes.
*
* @param name the name of the region to create
* @param aRegionAttributes the attributes of the root region
* @return the region object
* @throws RegionExistsException if a region is already in this cache
* @throws org.apache.geode.distributed.LeaseExpiredException if lease expired on distributed lock
* for Scope.GLOBAL
* @throws TimeoutException if timed out getting distributed lock for Scope.GLOBAL
* @throws CacheClosedException if the cache is closed
* @throws IllegalStateException If the supplied RegionAttributes violate the
* <a href="AttributesFactory.html#creationConstraints">region creation constraints</a>
* with a region of the same name in another cache in the distributed system
* @since GemFire 5.0
* @deprecated as of 6.5 use {@link #createRegionFactory(RegionAttributes)} instead
*/
@Deprecated
<K, V> Region<K, V> createRegion(String name, RegionAttributes<K, V> aRegionAttributes)
throws RegionExistsException, TimeoutException;
/**
* Creates a {@link RegionFactory} which can be used to specify additional attributes for
* {@link Region} creation.
*
* @see #createRegionFactory(RegionShortcut)
* @since GemFire 6.5
*/
<K, V> RegionFactory<K, V> createRegionFactory();
/**
* Creates a {@link RegionFactory} for the most commonly used {@link Region} types defined by
* {@link RegionShortcut}
*
* @since GemFire 6.5
*/
<K, V> RegionFactory<K, V> createRegionFactory(RegionShortcut shortcut);
/**
* Creates a {@link RegionFactory} for creating a {@link Region} from {@link RegionAttributes}
* mapped to this regionAttributesId
*
* @param regionAttributesId the Id of RegionAttributes to be used
* @see #setRegionAttributes(String, RegionAttributes)
* @since GemFire 6.5
*/
<K, V> RegionFactory<K, V> createRegionFactory(String regionAttributesId);
/**
* Creates a {@link RegionFactory} for creating a {@link Region} from the given regionAttributes
*
* @param regionAttributes regionAttributes for the new region
* @see #createRegionFactory(RegionShortcut)
* @since GemFire 6.5
*/
<K, V> RegionFactory<K, V> createRegionFactory(RegionAttributes<K, V> regionAttributes);
/**
* Internal GemStone method for accessing the internationalized logging object for GemFire, use
* {@link #getLogger()} instead. This method does not throw {@code CacheClosedException} if the
* cache is closed.
*
* @return the logging object
* @deprecated as of 6.5 use getLogger().convertToLogWriterI18n() instead
*/
@Deprecated
LogWriterI18n getLoggerI18n();
/**
* Internal GemStone method for accessing the internationalized logging object for GemFire, use
* {@link #getSecurityLogger()} instead. This method does not throw {@code CacheClosedException}
* if the cache is closed.
*
* @return the security logging object
* @deprecated as of 6.5 use getSecurityLogger().convertToLogWriterI18n() instead
*/
@Deprecated
LogWriterI18n getSecurityLoggerI18n();
/**
* Gets the number of seconds a cache operation will wait to obtain a distributed lock lease. This
* method does not throw {@code CacheClosedException} if the cache is closed.
*/
int getLockTimeout();
/**
* Sets the number of seconds a cache operation may wait to obtain a distributed lock lease before
* timing out.
*
* @throws IllegalArgumentException if {@code seconds} is less than zero
*/
void setLockTimeout(int seconds);
/**
* Gets the frequency (in seconds) at which a message will be sent by the primary cache-server to
* all the secondary cache-server nodes to remove the events which have already been dispatched
* from the queue.
*
* @return The time interval in seconds
*/
int getMessageSyncInterval();
/**
* Sets the frequency (in seconds) at which a message will be sent by the primary cache-server
* node to all the secondary cache-server nodes to remove the events which have already been
* dispatched from the queue.
*
* @param seconds the time interval in seconds
* @throws IllegalArgumentException if {@code seconds} is less than zero
*/
void setMessageSyncInterval(int seconds);
/**
* Gets the length, in seconds, of distributed lock leases obtained by this cache. This method
* does not throw {@code CacheClosedException} if the cache is closed.
*/
int getLockLease();
/**
* Sets the length, in seconds, of distributed lock leases obtained by this cache.
*
* @throws IllegalArgumentException if {@code seconds} is less than zero.
*/
void setLockLease(int seconds);
/**
* Gets the number of seconds a cache {@link org.apache.geode.cache.Region#get(Object) get}
* operation can spend searching for a value before it times out. The search includes any time
* spent loading the object. When the search times out it causes the get to fail by throwing an
* exception. This method does not throw {@code CacheClosedException} if the cache is closed.
*/
int getSearchTimeout();
/**
* Sets the number of seconds a cache get operation can spend searching for a value.
*
* @throws IllegalArgumentException if {@code seconds} is less than zero
*/
void setSearchTimeout(int seconds);
/**
* Creates a new cache server, with the default configuration, that will allow clients to access
* this cache.
* <p>
* For the default configuration see the constants in
* {@link org.apache.geode.cache.server.CacheServer}.
*
* @see org.apache.geode.cache.server.CacheServer
*
* @since GemFire 5.7
*/
CacheServer addCacheServer();
/**
* Returns a collection of all of the {@code CacheServer}s that can serve the contents of this
* {@code Cache} to clients.
*
* @see #addCacheServer
*
* @since GemFire 5.7
*/
List<CacheServer> getCacheServers();
/**
* Adds a gateway event conflict resolution resolver. This is invoked if an event is processed
* that comes from a different distributed system than the last event to modify the affected
* entry. It may alter the event or disallow the event. If it does neither the event is applied to
* the cache if its timestamp is newer than what is in the cache or if it is the same and the
* event's distributed system ID is larger than that of the last event to modify the affected
* entry.
*
* @param resolver gateway event conflict resolution resolver
* @since GemFire 7.0
*/
void setGatewayConflictResolver(GatewayConflictResolver resolver);
/**
* Returns the current gateway event conflict resolver
*
* @since GemFire 7.0
*/
GatewayConflictResolver getGatewayConflictResolver();
/**
* Sets whether or not this {@code Cache} resides in a long-running "cache server" VM. A cache
* server may be an application VM or may be a stand-along VM launched using
* {@linkplain org.apache.geode.admin.AdminDistributedSystem#addCacheServer administration API} or
* the {@code cacheserver} command line utility.
*
* @since GemFire 4.0
*/
void setIsServer(boolean isServer);
/**
* Returns whether or not this cache resides in a "cache server" VM.
*
* @see #setIsServer
*
* @since GemFire 4.0
*/
boolean isServer();
/**
* Notifies the server that this client is ready to receive updates. This method is used by
* durable clients to notify servers that they are ready to receive updates. As soon as the server
* receives this message, it will forward updates to this client (if necessary).
* <p>
* Durable clients must call this method after they are done creating regions. If it is called
* before the client creates the regions then updates will be lost. Any time a new {@link Pool} is
* created and regions have been added to it then this method needs to be called again.
* <p>
*
* @throws IllegalStateException if called by a non-durable client
*
* @since GemFire 5.5
* @deprecated as of 6.5 use {@link ClientCache#readyForEvents} instead.
*/
@Deprecated
void readyForEvents();
/**
* Creates {@link GatewaySenderFactory} for creating a SerialGatewaySender
*
* @since GemFire 7.0
*/
@Override
GatewaySenderFactory createGatewaySenderFactory();
/**
* Creates {@link AsyncEventQueueFactory} for creating a AsyncEventQueue
*
* @since GemFire 7.0
*/
AsyncEventQueueFactory createAsyncEventQueueFactory();
/**
* Creates {@link GatewayReceiverFactory} for creating a GatewayReceiver
*
* @since GemFire 7.0
*/
GatewayReceiverFactory createGatewayReceiverFactory();
/**
* Returns all {@link GatewaySender}s for this Cache.
*
* @return Set of GatewaySenders
* @since GemFire 7.0
*/
Set<GatewaySender> getGatewaySenders();
/**
* Returns the {@link GatewaySender} with the given id added to this Cache.
*
* @return GatewaySender with id
* @since GemFire 7.0
*/
GatewaySender getGatewaySender(String id);
/**
* Returns all {@link GatewayReceiver}s for this Cache
*
* @return Set of GatewaySenders
* @since GemFire 7.0
*/
Set<GatewayReceiver> getGatewayReceivers();
/**
* Returns all {@link AsyncEventQueue}s for this Cache
*
* @return Set of AsyncEventQueue
* @since GemFire 7.0
*/
Set<AsyncEventQueue> getAsyncEventQueues();
/**
* Returns the {@link AsyncEventQueue} with the given id added to this Cache.
*
* @return AsyncEventQueue with id
* @since GemFire 7.0
*/
AsyncEventQueue getAsyncEventQueue(String id);
/**
* Returns a set of the other non-administrative members in the distributed system.
*
* @since GemFire 6.6
*/
Set<DistributedMember> getMembers();
/**
* Returns a set of the administrative members in the distributed system.
*
* @since GemFire 6.6
*/
Set<DistributedMember> getAdminMembers();
/**
* Returns a set of the members in the distributed system that have the given region. For regions
* with local scope an empty set is returned.
*
* @param region a Region in the cache
* @since GemFire 6.6
*/
Set<DistributedMember> getMembers(Region region);
/**
* Obtains the snapshot service to allow the cache data to be imported or exported.
*
* @return the snapshot service
*/
CacheSnapshotService getSnapshotService();
/**
* Test to see whether the Cache is in the process of reconnecting and recreating a new cache
* after it has been removed from the system by other members or has shut down due to missing
* Roles and is reconnecting.
* <p>
* This will also return true if the Cache has finished reconnecting. When reconnect has completed
* you can use {@link Cache#getReconnectedCache} to retrieve the new cache instance.
*
* @return true if the Cache is attempting to reconnect or has finished reconnecting
*/
boolean isReconnecting();
/**
* Wait for the Cache to finish reconnecting to the distributed system and recreate a new Cache.
* This may throw a CacheClosedException if reconnect attempts fail due to an exception. The
* exception will detail what went wrong.
*
* @see #getReconnectedCache
* @param time amount of time to wait, or -1 to wait forever
* @param units time unit
* @return true if the cache was reconnected
* @throws InterruptedException if the thread is interrupted while waiting
*/
boolean waitUntilReconnected(long time, TimeUnit units) throws InterruptedException;
/**
* Force the Cache to stop reconnecting. If the Cache is currently connected this will disconnect
* and close it.
*
*/
void stopReconnecting();
/**
* Returns the new Cache if there was an auto-reconnect and the cache was recreated.
*/
Cache getReconnectedCache();
}