/* * JBoss, Home of Professional Open Source * Copyright 2010 Red Hat Inc. and/or its affiliates and other * contributors as indicated by the @author tags. All rights reserved. * See the copyright.txt in the distribution for a full listing of * individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.infinispan.manager; import org.infinispan.Cache; import org.infinispan.config.Configuration; import org.infinispan.config.GlobalConfiguration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.factories.annotations.SurvivesRestarts; import org.infinispan.factories.scopes.Scope; import org.infinispan.factories.scopes.Scopes; import org.infinispan.lifecycle.ComponentStatus; import org.infinispan.notifications.Listenable; import org.infinispan.remoting.transport.Address; import org.infinispan.remoting.transport.Transport; import java.util.List; import java.util.Set; /** * EmbeddedCacheManager is an CacheManager that runs in the same JVM as the client. * <p/> * Constructing a <tt>EmbeddedCacheManager</tt> is done via one of its constructors, which optionally take in a {@link * org.infinispan.config.Configuration} or a path or URL to a configuration XML file: see {@link org.infinispan.manager.DefaultCacheManager}. * <p/> * Lifecycle - <tt>EmbeddedCacheManager</tt>s have a lifecycle (it implements {@link org.infinispan.lifecycle.Lifecycle}) and * the default constructors also call {@link #start()}. Overloaded versions of the constructors are available, that do * not start the <tt>CacheManager</tt>, although it must be kept in mind that <tt>CacheManager</tt>s need to be started * before they can be used to create <tt>Cache</tt> instances. * <p/> * Once constructed, <tt>EmbeddedCacheManager</tt>s should be made available to any component that requires a <tt>Cache</tt>, * via <a href="http://en.wikipedia.org/wiki/Java_Naming_and_Directory_Interface">JNDI</a> or via some other mechanism * such as an <a href="http://en.wikipedia.org/wiki/Dependency_injection">dependency injection</a> framework. * <p/> * * @see org.infinispan.manager.DefaultCacheManager * @author Manik Surtani (<a href="mailto:manik@jboss.org">manik@jboss.org</a>) * @author Galder Zamarreno * @author Mircea.Markus@jboss.com * @since 4.1 */ @Scope(Scopes.GLOBAL) @SurvivesRestarts public interface EmbeddedCacheManager extends CacheContainer, Listenable { /** * Defines a named cache's configuration using the following algorithm: * <p/> * If cache name hasn't been defined before, this method creates a clone of the default cache's configuration, * applies a clone of the configuration overrides passed in and returns this configuration instance. * <p/> * If cache name has been previously defined, this method creates a clone of this cache's existing configuration, * applies a clone of the configuration overrides passed in and returns the configuration instance. * <p/> * The other way to define named cache's configuration is declaratively, in the XML file passed in to the cache * manager. This method enables you to override certain properties that have previously been defined via XML. * <p/> * Passing a brand new Configuration instance as configuration override without having called any of its setters will * effectively return the named cache's configuration since no overrides where passed to it. * * @param cacheName name of cache whose configuration is being defined * @param configurationOverride configuration overrides to use * @return a cloned configuration instance * @deprecated Use {@link #defineConfiguration(String, String, org.infinispan.configuration.cache.Configuration)} instead */ @Deprecated Configuration defineConfiguration(String cacheName, Configuration configurationOverride); /** * Defines a named cache's configuration using the following algorithm: * <p/> * Unlike previous versions of Infinispan, this method does not build on an existing configuration (default or named). * If you want this behavior, then use {@link ConfigurationBuilder#read(org.infinispan.configuration.cache.Configuration)}. * <p/> * The other way to define named cache's configuration is declaratively, in the XML file passed in to the cache * manager. This method enables you to override certain properties that have previously been defined via XML. * <p/> * Passing a brand new Configuration instance as configuration override without having called any of its setters will * effectively return the named cache's configuration since no overrides where passed to it. * * @param cacheName name of cache whose configuration is being defined * @param configurationOverride configuration overrides to use * @return a cloned configuration instance */ org.infinispan.configuration.cache.Configuration defineConfiguration(String cacheName, org.infinispan.configuration.cache.Configuration configurationOverride); /** * Defines a named cache's configuration using the following algorithm: * <p/> * Regardless of whether the cache name has been defined or not, this method creates a clone of the configuration of * the cache whose name matches the given template cache name, then applies a clone of the configuration overrides * passed in and finally returns this configuration instance. * <p/> * The other way to define named cache's configuration is declaratively, in the XML file passed in to the cache * manager. This method enables you to override certain properties that have previously been defined via XML. * <p/> * Passing a brand new Configuration instance as configuration override without having called any of its setters will * effectively return the named cache's configuration since no overrides where passed to it. * <p/> * If templateName is null or there isn't any named cache with that name, this methods works exactly like {@link * #defineConfiguration(String, Configuration)} in the sense that the base configuration used is the default cache * configuration. * * @param cacheName name of cache whose configuration is being defined * @param templateCacheName name of cache to which to which apply overrides if cache name has not been previously * defined * @param configurationOverride configuration overrides to use * @return a cloned configuration instance * @deprecated Use {@link #defineConfiguration(String, org.infinispan.configuration.cache.Configuration)} instead */ @Deprecated Configuration defineConfiguration(String cacheName, String templateCacheName, Configuration configurationOverride); /** * @return the name of the cluster. Null if running in local mode. */ String getClusterName(); /** * @return the addresses of all the members in the cluster. */ List<Address> getMembers(); /** * @return the address of the local node */ Address getAddress(); /** * @return the address of the cluster's coordinator */ Address getCoordinator(); /** * @return whether the local node is the cluster's coordinator */ boolean isCoordinator(); /** * @return the status of the cache manager */ ComponentStatus getStatus(); /** * Returns global configuration for this CacheManager * * @return the global configuration object associated to this CacheManager */ GlobalConfiguration getGlobalConfiguration(); /** * Returns global configuration for this CacheManager * * @return the global configuration object associated to this CacheManager */ org.infinispan.configuration.global.GlobalConfiguration getCacheManagerConfiguration(); /** * Returns the configuration for the given cache. * * @return the configuration for the given cache or null if no such cache is defined */ org.infinispan.configuration.cache.Configuration getCacheConfiguration(String name); /** * Returns default configuration for this CacheManager * * @return the default configuration associated with this CacheManager */ @Deprecated Configuration getDefaultConfiguration(); /** * Returns default configuration for this CacheManager * * @return the default configuration associated with this CacheManager */ org.infinispan.configuration.cache.Configuration getDefaultCacheConfiguration(); /** * 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 default cache is never included in this * set of cache names. * * @return an immutable set of non-default named caches registered or * created with this cache manager. */ Set<String> getCacheNames(); /** * Tests whether a named cache is running. * @param cacheName name of cache to test. * @return true if the named cache exists and is running; false otherwise. */ boolean isRunning(String cacheName); /** * Tests whether the default cache is running. * @return true if the default cache is running; false otherwise. */ boolean isDefaultRunning(); /** * A cache is considered to exist if it has been created and started via * one of the {@link #getCache()} methods and has not yet been removed via * {@link #removeCache(String)}. </p> * * 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. * * @param cacheName * @return <tt>true</tt> if the cache with the given name has not yet been * started, or if it was started, whether it's been removed or not. */ boolean cacheExists(String cacheName); /** * Retrieves a named cache from the system in the same way that {@link * #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. * * @param cacheName name of cache to retrieve * @param createIfAbsent if <tt>false</tt>, the named cache will not be * retrieved if it hasn't been retrieved previously or if it's been * removed. If <tt>true</tt>, this methods works just like {@link * #getCache(String)} * @return null if no named cache exists as per rules set above, otherwise * returns a cache instance identified by cacheName */ <K, V> Cache<K, V> getCache(String cacheName, boolean createIfAbsent); /** * Starts a set of caches in parallel. * Infinispan doesn't yet support asymmetric clusters (that is, two nodes * having different sets of caches running). Calling this method on * application/application server startup with all your cache names * will ensure that the cluster is symmetric. * * @param cacheNames the names of the caches to start * @since 5.0 */ EmbeddedCacheManager startCaches(String... cacheNames); /** * 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. * * @param cacheName name of cache to remove */ void removeCache(String cacheName); /** * @since 5.1 */ Transport getTransport(); }