/* * Copyright Terracotta, Inc. * * Licensed 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.ehcache; import java.io.Closeable; import org.ehcache.config.Builder; import org.ehcache.config.CacheConfiguration; import org.ehcache.config.Configuration; /** * A repository that manages {@link Cache}s and associated {@link org.ehcache.spi.service.Service Service}s. */ public interface CacheManager extends Closeable { /** * Creates a {@link Cache} in this {@code CacheManager} according to the specified {@link CacheConfiguration}. * <p> * The returned {@code Cache} will be in status {@link Status#AVAILABLE AVAILABLE}. * * @param alias the alias under which the cache will be created * @param config the configuration of the cache to create * @param <K> the key type for the cache * @param <V> the value type for the cache * @return the created and available {@code Cache} * * @throws java.lang.IllegalArgumentException if there is already a cache registered with the given alias * @throws java.lang.IllegalStateException if the cache creation fails */ <K, V> Cache<K, V> createCache(String alias, CacheConfiguration<K, V> config); /** * Creates a {@link Cache} in this {@code CacheManager} according to the specified {@link CacheConfiguration} provided * through a {@link Builder}. * <p> * The returned {@code Cache} will be in status {@link Status#AVAILABLE AVAILABLE}. * * @param alias the alias under which the cache will be created * @param configBuilder the builder for the configuration of the cache to create * @param <K> the key type for the cache * @param <V> the value type for the cache * @return the created and available {@code Cache} * * @throws java.lang.IllegalArgumentException if there is already a cache registered with the given alias * @throws java.lang.IllegalStateException if the cache creation fails */ <K, V> Cache<K, V> createCache(String alias, Builder<? extends CacheConfiguration<K, V>> configBuilder); /** * Retrieves the {@link Cache} associated with the given alias, if one is known. * * @param alias the alias under which to look the {@link Cache} up * @param keyType the {@link Cache} key class * @param valueType the {@link Cache} value class * @param <K> the key type for the cache * @param <V> the value type for the cache * @return the {@link Cache} associated with the given alias, {@code null} if no such cache exists * * @throws java.lang.IllegalArgumentException if the keyType or valueType do not match the ones with which the * {@code Cache} was created */ <K, V> Cache<K, V> getCache(String alias, Class<K> keyType, Class<V> valueType); /** * Removes the {@link Cache} associated with the alias provided, if one is known. * <p> * When the cache is removed, it will release all resources it used. * * @param alias the alias for which to remove the {@link Cache} */ void removeCache(String alias); /** * Transitions this {@code CacheManager} to {@link Status#AVAILABLE AVAILABLE}. * <p> * This will start all {@link org.ehcache.spi.service.Service Service}s managed by this {@code CacheManager}, as well * as initializing all {@link Cache}s registered with it. * <p> * If an error occurs before the {@code CacheManager} is {@code AVAILABLE}, it will revert to * {@link org.ehcache.Status#UNINITIALIZED UNINITIALIZED} attempting to close all services it had already started. * * @throws IllegalStateException if the {@code CacheManager} is not {@code UNINITIALIZED} * @throws StateTransitionException if the {@code CacheManager} could not be made {@code AVAILABLE} */ void init() throws StateTransitionException; /** * Transitions this {@code CacheManager} to {@link Status#UNINITIALIZED UNINITIALIZED}. * <p> * This will close all {@link Cache}s known to this {@code CacheManager} and stop all * {@link org.ehcache.spi.service.Service Service}s managed by this {@code CacheManager}. * <p> * Failure to close any {@code Cache} or to stop any {@code Service} will not prevent others from being closed or * stopped. * * @throws StateTransitionException if the {@code CacheManager} could not reach {@code UNINITIALIZED} cleanly * @throws IllegalStateException if the {@code CacheManager} is not {@code AVAILABLE} */ @Override void close() throws StateTransitionException; /** * Returns the current {@link org.ehcache.Status Status} of this {@code CacheManager}. * * @return the current {@code Status} */ Status getStatus(); /** * Returns the current {@link Configuration} used by this {@code CacheManager}. * * @return the configuration instance backing this {@code CacheManager} */ Configuration getRuntimeConfiguration(); }