package org.infinispan.cdi.embedded.test;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.global.GlobalConfigurationBuilder;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.test.TestingUtil;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.infinispan.test.fwk.TestResourceTracker;
/**
* <p>The alternative default {@link EmbeddedCacheManager} producer for the test environment.</p>
*
* @author Galder ZamarreƱo
*/
public class DefaultTestEmbeddedCacheManagerProducer {
/**
* Produces the default embedded cache manager.
*
* @param defaultConfiguration the default configuration produced by the {@link DefaultTestEmbeddedCacheManagerProducer}.
* @return the default embedded cache manager used by the application.
*/
@Produces
@ApplicationScoped
public EmbeddedCacheManager getDefaultEmbeddedCacheManager(Configuration defaultConfiguration) {
// Sometimes we're called from a remote thread that doesn't have the test name set
// We don't have the test name here, either, but we can use a dummy one
TestResourceTracker.setThreadTestNameIfMissing("DefaultTestEmbeddedCacheManagerProducer");
ConfigurationBuilder builder = new ConfigurationBuilder();
GlobalConfigurationBuilder globalConfigurationBuilder = new GlobalConfigurationBuilder();
globalConfigurationBuilder.globalJmxStatistics().allowDuplicateDomains(true);
builder.read(defaultConfiguration);
return TestCacheManagerFactory.createClusteredCacheManager(globalConfigurationBuilder, builder);
}
/**
* Stops the default embedded cache manager when the corresponding instance is released.
*
* @param defaultEmbeddedCacheManager the default embedded cache manager.
*/
private void stopCacheManager(@Disposes EmbeddedCacheManager defaultEmbeddedCacheManager) {
TestingUtil.killCacheManagers(defaultEmbeddedCacheManager);
}
}