package org.infinispan.persistence.factory;
import org.infinispan.commons.CacheConfigurationException;
import org.infinispan.commons.util.Util;
import org.infinispan.configuration.cache.StoreConfiguration;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
/**
* Default implementation, which uses Local class loader. No external class loading is allowed.
*
* @author Sebastian Laskawiec
* @since 7.2
*/
public class LocalClassLoaderCacheStoreFactory implements CacheStoreFactory {
private static final Log log = LogFactory.getLog(LocalClassLoaderCacheStoreFactory.class);
@Override
public <T> T createInstance(StoreConfiguration cfg) {
Class classBasedOnConfigurationAnnotation = ConfigurationForClassExtractor.getClassBasedOnConfigurationAnnotation(cfg, log);
try {
//getInstance is heavily used, so refactoring it might be risky. However we can safely catch
//and ignore the exception. Returning null is perfectly legal here.
Object instance = Util.getInstance(classBasedOnConfigurationAnnotation);
if(instance != null) {
return (T) instance;
}
} catch (CacheConfigurationException unableToInstantiate) {
log.debugv("Could not instantiate class {0} using local classloader", classBasedOnConfigurationAnnotation.getName());
}
return null;
}
@Override
public StoreConfiguration processConfiguration(StoreConfiguration storeConfiguration) {
return null;
}
}