All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.spring.remote.provider.SpringRemoteCacheManagerFactoryBean Maven / Gradle / Ivy

There is a newer version: 14.0.33.Final
Show newest version
package org.infinispan.spring.remote.provider;

import java.util.Properties;

import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.spring.remote.AbstractRemoteCacheManagerFactory;
import org.infinispan.spring.remote.ConfigurationPropertiesOverrides;
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 SpringRemoteCacheManager * SpringRemoteCacheManager} instance. *

* Configuration
*

* A SpringRemoteCacheManager is configured through a {@link Properties * Properties} object. For an exhaustive list of valid properties to be used see * RemoteCacheManager's {@link RemoteCacheManager * javadocs}. This FactoryBean provides means to either * {@link #setConfigurationProperties(Properties) inject} a user-defined Properties * instance or to * {@link #setConfigurationPropertiesFileLocation(org.springframework.core.io.Resource) set} the * location of a properties file to load those properties from. Note that it is illegal to * use both mechanisms simultaneously. *

*

* Alternatively or in combination with * {@link #setConfigurationPropertiesFileLocation(org.springframework.core.io.Resource) setting} the * location of a Properties file to load the configuration from, this * FactoryBean provides (typed) setters for all configuration settings. Settings thus * defined take precedence over those defined in the injected Properties instance. This * flexibility enables users to use e.g. a company-wide Properties file containing * default settings while simultaneously overriding select settings whenever special requirements * warrant this.
* Note that it is illegal to use setters in conjunction with * {@link #setConfigurationProperties(Properties) injecting} a Properties instance. *

*

* In addition to creating a SpringRemoteCacheManager this FactoryBean * does also control that SpringRemoteCacheManager's 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 SpringRemoteCacheManager. *

* * @author Olaf Bergner * * @see RemoteCacheManager * @see #destroy() */ public class SpringRemoteCacheManagerFactoryBean extends AbstractRemoteCacheManagerFactory implements FactoryBean, InitializingBean, DisposableBean { private SpringRemoteCacheManager springRemoteCacheManager; // ------------------------------------------------------------------------ // org.springframework.beans.factory.InitializingBean // ------------------------------------------------------------------------ /** * @see InitializingBean#afterPropertiesSet() */ @Override public void afterPropertiesSet() throws Exception { assertCorrectlyConfigured(); this.logger.info("Creating new instance of RemoteCacheManager ..."); final Properties configurationPropertiesToUse = configurationProperties(); org.infinispan.client.hotrod.configuration.ConfigurationBuilder clientBuilder = new org.infinispan.client.hotrod.configuration.ConfigurationBuilder(); clientBuilder.withProperties(configurationPropertiesToUse); long readTimeout; if (configurationPropertiesToUse.containsKey(ConfigurationPropertiesOverrides.OPERATION_READ_TIMEOUT)) readTimeout = Long.parseLong(configurationPropertiesToUse.getProperty(ConfigurationPropertiesOverrides.OPERATION_READ_TIMEOUT)); else readTimeout = 0; long writeTimeout; if (configurationPropertiesToUse.containsKey(ConfigurationPropertiesOverrides.OPERATION_WRITE_TIMEOUT)) writeTimeout = Long.parseLong(configurationPropertiesToUse.getProperty(ConfigurationPropertiesOverrides.OPERATION_WRITE_TIMEOUT)); else writeTimeout = 0; final RemoteCacheManager nativeRemoteCacheManager = new RemoteCacheManager( clientBuilder.build(), this.startAutomatically); this.springRemoteCacheManager = new SpringRemoteCacheManager(nativeRemoteCacheManager, readTimeout, writeTimeout); this.logger.info("Finished creating new instance of RemoteCacheManager"); } // ------------------------------------------------------------------------ // org.springframework.beans.factory.FactoryBean // ------------------------------------------------------------------------ /** * @see FactoryBean#getObject() */ @Override public SpringRemoteCacheManager getObject() throws Exception { return this.springRemoteCacheManager; } /** * @see FactoryBean#getObjectType() */ @Override public Class getObjectType() { return this.springRemoteCacheManager != null ? this.springRemoteCacheManager.getClass() : SpringRemoteCacheManager.class; } /** * Always return true. * * @see FactoryBean#isSingleton() */ @Override public boolean isSingleton() { return true; } // ------------------------------------------------------------------------ // org.springframework.beans.factory.DisposableBean // ------------------------------------------------------------------------ /** * {@link RemoteCacheManager#stop() stop} the * RemoteCacheManager created by this factory. * * @see DisposableBean#destroy() */ @Override public void destroy() throws Exception { // Being paranoid if (this.springRemoteCacheManager != null) { this.springRemoteCacheManager.stop(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy