org.infinispan.factories.InternalCacheFactory Maven / Gradle / Ivy
package org.infinispan.factories;
import org.infinispan.AdvancedCache;
import org.infinispan.Cache;
import org.infinispan.cache.impl.CacheImpl;
import org.infinispan.commons.CacheConfigurationException;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.jmx.CacheJmxRegistration;
import org.infinispan.manager.DefaultCacheManager;
import org.infinispan.upgrade.RollingUpgradeManager;
import org.infinispan.transaction.xa.recovery.RecoveryAdminOperations;
import org.infinispan.xsite.XSiteAdminOperations;
import java.lang.ref.WeakReference;
/**
* An internal factory for constructing Caches. Used by the {@link DefaultCacheManager}, this is not intended as public
* API.
*
* This is a special instance of a {@link AbstractComponentFactory} which contains bootstrap information for the {@link
* ComponentRegistry}.
*
*
* @author Manik Surtani ([email protected])
* @since 4.0
*/
public class InternalCacheFactory extends AbstractNamedCacheComponentFactory {
/**
* This implementation clones the configuration passed in before using it.
*
*
* @param configuration to use
* @param globalComponentRegistry global component registry to attach the cache to
* @param cacheName name of the cache
* @return a cache
* @throws ConfigurationException if there are problems with the cfg
*/
public Cache createCache(Configuration configuration,
GlobalComponentRegistry globalComponentRegistry,
String cacheName) throws CacheConfigurationException {
try {
return createAndWire(configuration, globalComponentRegistry, cacheName);
}
catch (CacheConfigurationException ce) {
throw ce;
}
catch (RuntimeException re) {
throw re;
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
protected AdvancedCache createAndWire(Configuration configuration, GlobalComponentRegistry globalComponentRegistry,
String cacheName) throws Exception {
AdvancedCache cache = new CacheImpl(cacheName);
bootstrap(cacheName, cache, configuration, globalComponentRegistry);
return cache;
}
/**
* Bootstraps this factory with a Configuration and a ComponentRegistry.
*/
private void bootstrap(String cacheName, AdvancedCache, ?> cache, Configuration configuration,
GlobalComponentRegistry globalComponentRegistry) {
this.configuration = configuration;
// injection bootstrap stuff
componentRegistry = new ComponentRegistry(cacheName, configuration, cache, globalComponentRegistry, globalComponentRegistry.getClassLoader());
/*
--------------------------------------------------------------------------------------------------------------
This is where the bootstrap really happens. Registering the cache in the component registry will cause
the component registry to look at the cache's @Inject methods, and construct various components and their
dependencies, in turn.
--------------------------------------------------------------------------------------------------------------
*/
componentRegistry.registerComponent(cache, Cache.class.getName(), true);
componentRegistry.registerComponent(new CacheJmxRegistration(), CacheJmxRegistration.class.getName(), true);
if (configuration.transaction().transactionMode().isTransactional() && configuration.transaction().recovery().enabled()) {
componentRegistry.registerComponent(new RecoveryAdminOperations(), RecoveryAdminOperations.class.getName(), true);
}
if (configuration.sites().hasEnabledBackups()) {
componentRegistry.registerComponent(new XSiteAdminOperations(), XSiteAdminOperations.class.getName(), true);
}
// The RollingUpgradeManager should always be added so it is registered in JMX.
componentRegistry.registerComponent(new RollingUpgradeManager(), RollingUpgradeManager.class.getName(), true);
}
@Override
public T construct(Class componentType) {
throw new UnsupportedOperationException("Should never be invoked - this is a bootstrap factory.");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy