package org.radargun.service; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.Properties; import javax.cache.Caching; import javax.cache.spi.CachingProvider; import org.radargun.logging.Log; import org.radargun.logging.LogFactory; import org.radargun.traits.Lifecycle; import org.radargun.utils.Utils; /** * @author Matej Cimbora */ public class JCacheLifecycle implements Lifecycle { private static final Log log = LogFactory.getLog(JCacheLifecycle.class); private JCacheService service; public JCacheLifecycle(JCacheService service) { this.service = service; } @Override public void start() { URI cacheManagerUri = null; try { if (service.configFile != null) { URL cacheManagerUrl = JCacheLifecycle.class.getClassLoader().getResource(service.configFile); if (cacheManagerUrl == null) { throw new IllegalArgumentException(String.format("Unable to locate specified configuration file %s.", service.configFile)); } cacheManagerUri = cacheManagerUrl.toURI(); } } catch (URISyntaxException e) { log.errorf(String.format("Exception while accessing configuration file %s.", service.configFile), e); throw new IllegalStateException(e); } Properties configProperties = null; if (service.propertiesFile != null) { configProperties = new Properties(); try (InputStream propertiesStream = JCacheLifecycle.class.getClassLoader().getResourceAsStream(service.propertiesFile)) { Utils.loadProperties(configProperties, propertiesStream); } catch (IOException e) { log.error(String.format("Exception while loading configuration properties file %s.", service.propertiesFile)); throw new IllegalStateException(e); } } CachingProvider cachingProvider = service.cachingProviderClass == null ? Caching.getCachingProvider() : Caching.getCachingProvider(service.cachingProviderClass); service.cacheManager = cachingProvider.getCacheManager(cacheManagerUri, JCacheLifecycle.class.getClassLoader(), configProperties); } @Override public void stop() { service.cacheManager.destroyCache(service.cacheName); Caching.getCachingProvider().close(); } @Override public boolean isRunning() { return service.cacheManager != null && !service.cacheManager.isClosed(); } }