org.infinispan.spring.embedded.provider.SpringEmbeddedCacheManagerFactoryBean Maven / Gradle / Ivy
package org.infinispan.spring.embedded.provider;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.spring.embedded.AbstractEmbeddedCacheManagerFactory;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
/**
*
* A {@link FactoryBean FactoryBean
} for creating an
* {@link SpringEmbeddedCacheManager
* SpringEmbeddedCacheManager
} instance. The location of the Infinispan configuration
* file used to provide the default {@link org.infinispan.configuration.cache.Configuration configuration} for
* the EmbeddedCacheManager
instance created by this FactoryBean
is
* {@link #setConfigurationFileLocation(org.springframework.core.io.Resource) configurable}.
*
*
* If no configuration file location is set the SpringEmbeddedCacheManager
instance
* created by this FactoryBean
will use Infinispan's default settings. See Infinispan's
* documentation for what those default settings
* are.
*
*
* A user may further customize the SpringEmbeddedCacheManager
's configuration using
* explicit setters on this FactoryBean
. The properties thus defined will be applied
* either to the configuration loaded from Infinispan's configuration file in case one has been
* specified, or to a configuration initialized with Infinispan's default settings. Either way, the
* net effect is that explicitly set configuration properties take precedence over both those loaded
* from a configuration file as well as INFINISPAN's default settings.
*
*
* In addition to creating an SpringEmbeddedCacheManager
this FactoryBean
* does also control that SpringEmbeddedCacheManager
's
* {@link org.infinispan.commons.api.Lifecycle lifecycle} by shutting it down when the enclosing
* Spring application context is closed. It is therefore advisable to always use this
* FactoryBean
when creating an SpringEmbeddedCacheManager
.
*
*
* @author Olaf Bergner
*
* @see #setConfigurationFileLocation(org.springframework.core.io.Resource)
* @see #destroy()
* @see SpringEmbeddedCacheManager
* @see EmbeddedCacheManager
* @see org.infinispan.configuration.cache.Configuration
*
*/
public class SpringEmbeddedCacheManagerFactoryBean extends AbstractEmbeddedCacheManagerFactory
implements FactoryBean, InitializingBean, DisposableBean {
private static final Log logger = LogFactory.getLog(SpringEmbeddedCacheManagerFactoryBean.class);
private SpringEmbeddedCacheManager cacheManager;
// ------------------------------------------------------------------------
// org.springframework.beans.factory.InitializingBean
// ------------------------------------------------------------------------
/**
* @see InitializingBean#afterPropertiesSet()
*/
@Override
public void afterPropertiesSet() throws Exception {
logger.info("Initializing SpringEmbeddedCacheManager instance ...");
final EmbeddedCacheManager nativeEmbeddedCacheManager = createBackingEmbeddedCacheManager();
this.cacheManager = new SpringEmbeddedCacheManager(nativeEmbeddedCacheManager);
logger.info("Successfully initialized SpringEmbeddedCacheManager instance ["
+ this.cacheManager + "]");
}
// ------------------------------------------------------------------------
// org.springframework.beans.factory.FactoryBean
// ------------------------------------------------------------------------
/**
* @see FactoryBean#getObject()
*/
@Override
public SpringEmbeddedCacheManager getObject() throws Exception {
return this.cacheManager;
}
/**
* @see FactoryBean#getObjectType()
*/
@Override
public Class extends SpringEmbeddedCacheManager> getObjectType() {
return this.cacheManager != null ? this.cacheManager.getClass()
: SpringEmbeddedCacheManager.class;
}
/**
* Always returns true
.
*
* @return Always true
*
* @see FactoryBean#isSingleton()
*/
@Override
public boolean isSingleton() {
return true;
}
// ------------------------------------------------------------------------
// org.springframework.beans.factory.DisposableBean
// ------------------------------------------------------------------------
/**
* Shuts down the SpringEmbeddedCacheManager
instance created by this
* FactoryBean
.
*
* @see DisposableBean#destroy()
* @see SpringEmbeddedCacheManager#stop()
*/
@Override
public void destroy() throws Exception {
// Probably being paranoid here ...
if (this.cacheManager != null) {
this.cacheManager.stop();
}
}
}