Class DefaultCacheManager

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, BasicCacheContainer, Lifecycle, CacheContainer, EmbeddedCacheManager, Listenable

    public class DefaultCacheManager
    extends java.lang.Object
    implements EmbeddedCacheManager
    A CacheManager is the primary mechanism for retrieving a Cache instance, and is often used as a starting point to using the Cache.

    CacheManagers are heavyweight objects, and we foresee no more than one CacheManager being used per JVM (unless specific configuration requirements require more than one; but either way, this would be a minimal and finite number of instances).

    Constructing a CacheManager is done via one of its constructors, which optionally take in a Configuration or a path or URL to a configuration XML file.

    Lifecycle - CacheManagers have a lifecycle (it implements Lifecycle) and the default constructors also call start(). Overloaded versions of the constructors are available, that do not start the CacheManager, although it must be kept in mind that CacheManagers need to be started before they can be used to create Cache instances.

    Once constructed, CacheManagers should be made available to any component that requires a Cache, via JNDI or via some other mechanism such as an IoC container.

    You obtain Cache instances from the CacheManager by using one of the overloaded getCache(), methods. Note that with getCache(), there is no guarantee that the instance you get is brand-new and empty, since caches are named and shared. Because of this, the CacheManager also acts as a repository of Caches, and is an effective mechanism of looking up or creating Caches on demand.

    When the system shuts down, it should call stop() on the CacheManager. This will ensure all caches within its scope are properly stopped as well.

    Sample usage:

    
        CacheManager manager = CacheManager.getInstance("my-config-file.xml");
        Cache<String, Person> entityCache = manager.getCache("myEntityCache");
        entityCache.put("aPerson", new Person());
    
        ConfigurationBuilder confBuilder = new ConfigurationBuilder();
        confBuilder.clustering().cacheMode(CacheMode.REPL_SYNC);
        manager.createCache("myReplicatedCache", confBuilder.build());
        Cache<String, String> replicatedCache = manager.getCache("myReplicatedCache");
     
    Since:
    4.0
    Author:
    Manik Surtani, Galder ZamarreƱo
    • Constructor Detail

      • DefaultCacheManager

        public DefaultCacheManager()
        Constructs and starts a default instance of the CacheManager, using configuration defaults. See Configuration and GlobalConfiguration for details of these defaults.
      • DefaultCacheManager

        public DefaultCacheManager​(boolean start)
        Constructs a default instance of the CacheManager, using configuration defaults. See Configuration and GlobalConfiguration for details of these defaults.
        Parameters:
        start - if true, the cache manager is started
      • DefaultCacheManager

        public DefaultCacheManager​(Configuration defaultConfiguration)
        Constructs and starts a new instance of the CacheManager, using the default configuration passed in. See Configuration and GlobalConfiguration for details of these defaults.
        Parameters:
        defaultConfiguration - configuration to use as a template for all caches created
      • DefaultCacheManager

        public DefaultCacheManager​(Configuration defaultConfiguration,
                                   boolean start)
        Constructs a new instance of the CacheManager, using the default configuration passed in. See GlobalConfiguration for details of these defaults.
        Parameters:
        defaultConfiguration - configuration file to use as a template for all caches created
        start - if true, the cache manager is started
      • DefaultCacheManager

        public DefaultCacheManager​(GlobalConfiguration globalConfiguration)
        Constructs and starts a new instance of the CacheManager, using the global configuration passed in, and system defaults for the default named cache configuration. See Configuration for details of these defaults.
        Parameters:
        globalConfiguration - GlobalConfiguration to use for all caches created
      • DefaultCacheManager

        public DefaultCacheManager​(GlobalConfiguration globalConfiguration,
                                   boolean start)
        Constructs a new instance of the CacheManager, using the global configuration passed in, and system defaults for the default named cache configuration. See Configuration for details of these defaults.
        Parameters:
        globalConfiguration - GlobalConfiguration to use for all caches created
        start - if true, the cache manager is started.
      • DefaultCacheManager

        public DefaultCacheManager​(GlobalConfiguration globalConfiguration,
                                   Configuration defaultConfiguration)
        Constructs and starts a new instance of the CacheManager, using the global and default configurations passed in. If either of these are null, system defaults are used.
        Parameters:
        globalConfiguration - global configuration to use. If null, a default instance is created.
        defaultConfiguration - default configuration to use. If null, a default instance is created.
      • DefaultCacheManager

        public DefaultCacheManager​(GlobalConfiguration globalConfiguration,
                                   Configuration defaultConfiguration,
                                   boolean start)
        Constructs a new instance of the CacheManager, using the global and default configurations passed in. If either of these are null, system defaults are used.
        Parameters:
        globalConfiguration - global configuration to use. If null, a default instance is created.
        defaultConfiguration - default configuration to use. If null, a default instance is created.
        start - if true, the cache manager is started
      • DefaultCacheManager

        public DefaultCacheManager​(java.lang.String configurationFile)
                            throws java.io.IOException
        Constructs and starts a new instance of the CacheManager, using the configuration file name passed in. This constructor first searches for the named file on the classpath, and failing that, treats the file name as an absolute path.
        Parameters:
        configurationFile - name of configuration file to use as a template for all caches created
        Throws:
        java.io.IOException - if there is a problem with the configuration file.
      • DefaultCacheManager

        public DefaultCacheManager​(java.lang.String configurationFile,
                                   boolean start)
                            throws java.io.IOException
        Constructs a new instance of the CacheManager, using the configuration file name passed in. This constructor first searches for the named file on the classpath, and failing that, treats the file name as an absolute path.
        Parameters:
        configurationFile - name of configuration file to use as a template for all caches created
        start - if true, the cache manager is started
        Throws:
        java.io.IOException - if there is a problem with the configuration file.
      • DefaultCacheManager

        public DefaultCacheManager​(java.io.InputStream configurationStream)
                            throws java.io.IOException
        Constructs and starts a new instance of the CacheManager, using the input stream passed in to read configuration file contents.
        Parameters:
        configurationStream - stream containing configuration file contents, to use as a template for all caches created
        Throws:
        java.io.IOException - if there is a problem with the configuration stream.
      • DefaultCacheManager

        public DefaultCacheManager​(java.io.InputStream configurationStream,
                                   boolean start)
                            throws java.io.IOException
        Constructs a new instance of the CacheManager, using the input stream passed in to read configuration file contents.
        Parameters:
        configurationStream - stream containing configuration file contents, to use as a template for all caches created
        start - if true, the cache manager is started
        Throws:
        java.io.IOException - if there is a problem reading the configuration stream
      • DefaultCacheManager

        public DefaultCacheManager​(ConfigurationBuilderHolder holder,
                                   boolean start)
        Constructs a new instance of the CacheManager, using the holder passed in to read configuration settings.
        Parameters:
        holder - holder containing configuration settings, to use as a template for all caches created
        start - if true, the cache manager is started
    • Method Detail

      • defineConfiguration

        public Configuration defineConfiguration​(java.lang.String name,
                                                 Configuration configuration)
        Description copied from interface: EmbeddedCacheManager
        Defines a named cache's configuration by using the provided configuration

        Unlike previous versions of Infinispan, this method does not build on an existing configuration (default or named). If you want this behavior, then use ConfigurationBuilder.read(org.infinispan.configuration.cache.Configuration).

        The other way to define named cache's configuration is declaratively, in the XML file passed in to the cache manager.

        If this cache was already configured either declaritively or programmatically this method will throw a CacheConfigurationException.

        Specified by:
        defineConfiguration in interface EmbeddedCacheManager
        Parameters:
        name - name of cache whose configuration is being defined
        configuration - configuration overrides to use
        Returns:
        a cloned configuration instance
      • defineConfiguration

        public Configuration defineConfiguration​(java.lang.String name,
                                                 java.lang.String template,
                                                 Configuration configurationOverride)
        Description copied from interface: EmbeddedCacheManager
        Defines a named cache's configuration using by first reading the template configuration and then applying the override afterwards to generate a configuration.

        The other way to define named cache's configuration is declaratively, in the XML file passed in to the cache manager.

        If templateName is null or there isn't any named cache with that name, this methods works exactly like EmbeddedCacheManager.defineConfiguration(String, Configuration).

        If this cache was already configured either declaratively or programmatically this method will throw a CacheConfigurationException.

        Specified by:
        defineConfiguration in interface EmbeddedCacheManager
        Parameters:
        name - name of cache whose configuration is being defined
        template - name of cache to use as a template before overrides are applied to it
        configurationOverride - configuration overrides to use
        Returns:
        a cloned configuration instance
      • undefineConfiguration

        public void undefineConfiguration​(java.lang.String configurationName)
        Description copied from interface: EmbeddedCacheManager
        Removes a configuration from the set of defined configurations. If the configuration is currently in use by one of the caches, an IllegalStateException is thrown. If the named configuration does not exist, nothing happens
        Specified by:
        undefineConfiguration in interface EmbeddedCacheManager
        Parameters:
        configurationName - the named configuration
      • getCache

        public <K,​V> Cache<K,​V> getCache()
        Retrieves the default cache associated with this cache manager. Note that the default cache does not need to be explicitly created with createCache(String, String) (String)} since it is automatically created lazily when first used.

        As such, this method is always guaranteed to return the default cache.

        Specified by:
        getCache in interface BasicCacheContainer
        Specified by:
        getCache in interface CacheContainer
        Returns:
        the default cache.
      • getCache

        public <K,​V> Cache<K,​V> getCache​(java.lang.String cacheName)
        Retrieves a named cache from the system. If the cache has been previously created with the same name, the running cache instance is returned. Otherwise, this method attempts to create the cache first.

        When creating a new cache, this method will use the configuration passed in to the CacheManager on construction, as a template, and then optionally apply any overrides previously defined for the named cache using the defineConfiguration(String, Configuration) or defineConfiguration(String, String, Configuration) methods, or declared in the configuration file.

        Specified by:
        getCache in interface BasicCacheContainer
        Specified by:
        getCache in interface CacheContainer
        Parameters:
        cacheName - name of cache to retrieve
        Returns:
        a cache instance identified by cacheName
      • getCache

        public <K,​V> Cache<K,​V> getCache​(java.lang.String cacheName,
                                                     java.lang.String configurationName)
        Description copied from interface: EmbeddedCacheManager
        Retrieves a named cache from the system in the same way that CacheContainer.getCache(String) does except that if offers the possibility to specify a specific configuration template. Multiple caches can be created using the same configuration.
        Specified by:
        getCache in interface EmbeddedCacheManager
        Parameters:
        cacheName - name of cache to retrieve
        configurationName - name of the configuration template to use
        Returns:
        null if no configuration exists as per rules set above, otherwise returns a cache instance identified by cacheName
      • internalGetCache

        public <K,​V> Cache<K,​V> internalGetCache​(java.lang.String cacheName,
                                                             java.lang.String configurationName)
      • cacheExists

        public boolean cacheExists​(java.lang.String cacheName)
        Description copied from interface: EmbeddedCacheManager
        A cache is considered to exist if it has been created and started via one of the CacheContainer.getCache() methods and has not yet been removed via EmbeddedCacheManager.removeCache(String).

        In environments when caches are continuously created and removed, this method offers the possibility to find out whether a cache has either, not been started, or if it was started, whether it's been removed already or not.
        Specified by:
        cacheExists in interface EmbeddedCacheManager
        Returns:
        true if the cache with the given name has not yet been started, or if it was started, whether it's been removed or not.
      • getCache

        public <K,​V> Cache<K,​V> getCache​(java.lang.String cacheName,
                                                     boolean createIfAbsent)
        Description copied from interface: EmbeddedCacheManager
        Retrieves a named cache from the system in the same way that CacheContainer.getCache(String) does except that if offers the possibility for the named cache not to be retrieved if it has not yet been started, or if it's been removed after being started. If a non-template configuration exists with the same name, it will be used to configure the cache.
        Specified by:
        getCache in interface EmbeddedCacheManager
        Parameters:
        cacheName - name of cache to retrieve
        createIfAbsent - if false, the named cache will not be retrieved if it hasn't been retrieved previously or if it's been removed. If true, this methods works just like CacheContainer.getCache(String)
        Returns:
        null if no named cache exists as per rules set above, otherwise returns a cache instance identified by cacheName
      • getCache

        public <K,​V> Cache<K,​V> getCache​(java.lang.String cacheName,
                                                     java.lang.String configurationTemplate,
                                                     boolean createIfAbsent)
        Description copied from interface: EmbeddedCacheManager
        Retrieves a named cache from the system in the same way that CacheContainer.getCache(String) does except that if offers the possibility to specify a specific configuration template. Multiple caches can be created using the same configuration. Tihs method also offers the possibility for the named cache not to be retrieved if it has not yet been started, or if it's been removed after being started.
        Specified by:
        getCache in interface EmbeddedCacheManager
        Parameters:
        cacheName - name of cache to retrieve
        configurationTemplate - name of the configuration template to use
        createIfAbsent - if false, the named cache will not be retrieved if it hasn't been retrieved previously or if it's been removed. If true, this methods works just like EmbeddedCacheManager.getCache(String, String)
        Returns:
        null if no configuration exists as per rules set above, otherwise returns a cache instance identified by cacheName
      • startCaches

        public EmbeddedCacheManager startCaches​(java.lang.String... cacheNames)
        Description copied from interface: EmbeddedCacheManager
        Starts a set of caches in parallel. Infinispan supports both symmetric and asymmetric clusters; that is, multiple nodes having the same or different sets of caches running, respectively. Calling this method on application/application server startup with all your cache names will ensure that the cluster is symmetric.
        Specified by:
        startCaches in interface EmbeddedCacheManager
        Parameters:
        cacheNames - the names of the caches to start
      • removeCache

        public void removeCache​(java.lang.String cacheName)
        Description copied from interface: EmbeddedCacheManager
        Removes a cache with the given name from the system. This is a cluster wide operation that results not only in stopping the cache with the given name in all nodes in the cluster, but also deletes its contents both in memory and in any backing cache store.
        Specified by:
        removeCache in interface EmbeddedCacheManager
        Parameters:
        cacheName - name of cache to remove
      • getMembers

        public java.util.List<Address> getMembers()
        Specified by:
        getMembers in interface EmbeddedCacheManager
        Returns:
        the addresses of all the members in the cluster, or null if not connected
      • getAddress

        public Address getAddress()
        Warning: the address may be null before the first clustered cache starts and after all the clustered caches have been stopped.
        Specified by:
        getAddress in interface EmbeddedCacheManager
        Returns:
        the address of the local node, or null if not connected
      • getCoordinatorAddress

        public java.lang.String getCoordinatorAddress()
      • isCoordinator

        public boolean isCoordinator()
        Specified by:
        isCoordinator in interface EmbeddedCacheManager
        Returns:
        whether the local node is the cluster's coordinator, or null if not connected
      • start

        public void start()
        Description copied from interface: Lifecycle
        Invoked on component start
        Specified by:
        start in interface Lifecycle
      • stop

        public void stop()
        Description copied from interface: Lifecycle
        Invoked on component stop
        Specified by:
        stop in interface Lifecycle
      • addListener

        public void addListener​(java.lang.Object listener)
        Description copied from interface: Listenable
        Adds a listener to the component. Typically, listeners would need to be annotated with Listener and further to that, contain methods annotated appropriately, otherwise the listener will not be registered.

        See the Listener annotation for more information.

        Specified by:
        addListener in interface Listenable
        Parameters:
        listener - must not be null.
      • removeListener

        public void removeListener​(java.lang.Object listener)
        Description copied from interface: Listenable
        Removes a listener from the component.
        Specified by:
        removeListener in interface Listenable
        Parameters:
        listener - listener to remove. Must not be null.
      • getListeners

        public java.util.Set<java.lang.Object> getListeners()
        Specified by:
        getListeners in interface Listenable
        Returns:
        a set of all listeners registered on this component.
      • getCacheNames

        public java.util.Set<java.lang.String> getCacheNames()
        Description copied from interface: BasicCacheContainer
        This method returns a collection of caches names which contains the caches that have been defined via XML or programmatically, and the caches that have been created at runtime via this cache manager instance. If no named caches are registered or no caches have been created, this method returns an empty set. The list of caches does not include internal-only caches InternalCacheRegistry
        Specified by:
        getCacheNames in interface BasicCacheContainer
        Returns:
        an immutable set of caches registered or created with this cache manager.
      • getCacheConfigurationNames

        public java.util.Set<java.lang.String> getCacheConfigurationNames()
        Description copied from interface: EmbeddedCacheManager
        This method returns a collection of cache configuration names which contains the cache configurations that have been defined via XML or programmatically, and the cache configurations that have been defined at runtime via this cache manager instance. If no cache configurations are registered or no caches have been created, this method returns an empty set. The default cache is never included in this set of cache names, as well a caches for internal-only use InternalCacheRegistry
        Specified by:
        getCacheConfigurationNames in interface EmbeddedCacheManager
        Returns:
        an immutable set of non-default named caches registered or created with this cache manager.
      • isRunning

        public boolean isRunning​(java.lang.String cacheName)
        Description copied from interface: EmbeddedCacheManager
        Tests whether a named cache is running.
        Specified by:
        isRunning in interface EmbeddedCacheManager
        Parameters:
        cacheName - name of cache to test.
        Returns:
        true if the named cache exists and is running; false otherwise.
      • isDefaultRunning

        public boolean isDefaultRunning()
        Description copied from interface: EmbeddedCacheManager
        Tests whether the default cache is running.
        Specified by:
        isDefaultRunning in interface EmbeddedCacheManager
        Returns:
        true if the default cache is running; false otherwise.
      • getCacheManagerStatus

        public java.lang.String getCacheManagerStatus()
      • getDefinedCacheNames

        public java.lang.String getDefinedCacheNames()
      • getDefinedCacheConfigurationNames

        public java.lang.String getDefinedCacheConfigurationNames()
      • getDefinedCacheCount

        public java.lang.String getDefinedCacheCount()
      • getCreatedCacheCount

        public java.lang.String getCreatedCacheCount()
      • getRunningCacheCount

        public java.lang.String getRunningCacheCount()
      • getVersion

        public java.lang.String getVersion()
      • getName

        public java.lang.String getName()
      • startCache

        public void startCache()
      • startCache

        public void startCache​(java.lang.String cacheName)
      • getNodeAddress

        public java.lang.String getNodeAddress()
      • getPhysicalAddresses

        public java.lang.String getPhysicalAddresses()
      • getClusterMembers

        public java.lang.String getClusterMembers()
      • getClusterSize

        public int getClusterSize()
      • getClusterName

        public java.lang.String getClusterName()
        Specified by:
        getClusterName in interface EmbeddedCacheManager
        Returns:
        the name of the cluster. Null if running in local mode.
      • addCacheDependency

        public void addCacheDependency​(java.lang.String from,
                                       java.lang.String to)
        Description copied from interface: EmbeddedCacheManager
        Add a dependency between two caches. The cache manager will make sure that a cache is stopped before any of its dependencies
        Specified by:
        addCacheDependency in interface EmbeddedCacheManager
        Parameters:
        from - cache name
        to - cache name
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getGlobalConfigurationAsProperties

        public java.util.Properties getGlobalConfigurationAsProperties()
      • executor

        public ClusterExecutor executor()
        Description copied from interface: EmbeddedCacheManager
        Providess the cache manager based executor. This can be used to execute a given operation upon the cluster or a single node if desired. If this manager is not clustered this will execute locally only.

        Note that not all EmbeddedCacheManager implementations may implement this. Those that don't will throw a UnsupportedOperationException upon invocation.

        Specified by:
        executor in interface EmbeddedCacheManager
        Returns:
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException