mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-16 16:15:06 +00:00
HHH-7553 Use new Infinispan configuration exclusively
This commit is contained in:
parent
cf9ef94f8e
commit
e57c822cbc
@ -17,13 +17,14 @@
|
||||
import org.hibernate.cache.infinispan.util.Caches;
|
||||
import org.infinispan.AdvancedCache;
|
||||
import org.infinispan.commands.module.ModuleCommandFactory;
|
||||
import org.infinispan.config.Configuration;
|
||||
import org.infinispan.configuration.cache.CacheMode;
|
||||
import org.infinispan.configuration.cache.Configuration;
|
||||
import org.infinispan.configuration.cache.ConfigurationBuilder;
|
||||
import org.infinispan.factories.GlobalComponentRegistry;
|
||||
import org.infinispan.manager.DefaultCacheManager;
|
||||
import org.infinispan.manager.EmbeddedCacheManager;
|
||||
import org.infinispan.transaction.TransactionMode;
|
||||
import org.infinispan.transaction.lookup.GenericTransactionManagerLookup;
|
||||
import org.infinispan.util.concurrent.IsolationLevel;
|
||||
import org.infinispan.configuration.parsing.ConfigurationBuilderHolder;
|
||||
import org.infinispan.configuration.parsing.ParserRegistry;
|
||||
@ -318,7 +319,7 @@ public void start(Settings settings, Properties properties) throws CacheExceptio
|
||||
dissectProperty(prefixLoc, key, properties);
|
||||
}
|
||||
}
|
||||
defineGenericDataTypeCacheConfigurations(settings, properties);
|
||||
defineGenericDataTypeCacheConfigurations(properties);
|
||||
definePendingPutsCache();
|
||||
} catch (CacheException ce) {
|
||||
throw ce;
|
||||
@ -475,45 +476,59 @@ private TypeOverrides getOrCreateConfig(int prefixLoc, String key, int suffixLoc
|
||||
return cfgOverride;
|
||||
}
|
||||
|
||||
private void defineGenericDataTypeCacheConfigurations(Settings settings, Properties properties) throws CacheException {
|
||||
private void defineGenericDataTypeCacheConfigurations(Properties properties) {
|
||||
String[] defaultGenericDataTypes = new String[]{ENTITY_KEY, COLLECTION_KEY, TIMESTAMPS_KEY, QUERY_KEY};
|
||||
for (String type : defaultGenericDataTypes) {
|
||||
TypeOverrides override = overrideStatisticsIfPresent(typeOverrides.get(type), properties);
|
||||
String cacheName = override.getCacheName();
|
||||
Configuration newCacheCfg = override.createInfinispanConfiguration();
|
||||
ConfigurationBuilder builder = new ConfigurationBuilder();
|
||||
// Read base configuration
|
||||
applyConfiguration(cacheName, builder);
|
||||
|
||||
// Apply overrides
|
||||
Configuration cacheConfig = manager.defineConfiguration(cacheName, cacheName, newCacheCfg);
|
||||
override.applyTo(builder);
|
||||
// Configure transaction manager
|
||||
cacheConfig = configureTransactionManager(cacheConfig, cacheName, properties);
|
||||
manager.defineConfiguration(cacheName, cacheName, cacheConfig);
|
||||
configureTransactionManager(builder, cacheName, properties);
|
||||
// Define configuration, validate and then apply
|
||||
Configuration cfg = builder.build();
|
||||
override.validateInfinispanConfiguration(cfg);
|
||||
manager.defineConfiguration(cacheName, cfg);
|
||||
definedConfigurations.add(cacheName);
|
||||
override.validateInfinispanConfiguration(cacheConfig);
|
||||
}
|
||||
}
|
||||
|
||||
private AdvancedCache getCache(String regionName, String typeKey, Properties properties) {
|
||||
TypeOverrides regionOverride = typeOverrides.get(regionName);
|
||||
if (!definedConfigurations.contains(regionName)) {
|
||||
String templateCacheName = null;
|
||||
Configuration regionCacheCfg = null;
|
||||
String templateCacheName;
|
||||
Configuration regionCacheCfg;
|
||||
ConfigurationBuilder builder = new ConfigurationBuilder();
|
||||
if (regionOverride != null) {
|
||||
if (log.isDebugEnabled()) log.debug("Cache region specific configuration exists: " + regionOverride);
|
||||
regionOverride = overrideStatisticsIfPresent(regionOverride, properties);
|
||||
regionCacheCfg = regionOverride.createInfinispanConfiguration();
|
||||
String cacheName = regionOverride.getCacheName();
|
||||
if (cacheName != null) // Region specific override with a given cache name
|
||||
templateCacheName = cacheName;
|
||||
templateCacheName = cacheName;
|
||||
else // Region specific override without cache name, so template cache name is generic for data type.
|
||||
templateCacheName = typeOverrides.get(typeKey).getCacheName();
|
||||
templateCacheName = typeOverrides.get(typeKey).getCacheName();
|
||||
|
||||
// Read template configuration
|
||||
applyConfiguration(templateCacheName, builder);
|
||||
|
||||
regionOverride = overrideStatisticsIfPresent(regionOverride, properties);
|
||||
regionOverride.applyTo(builder);
|
||||
|
||||
} else {
|
||||
// No region specific overrides, template cache name is generic for data type.
|
||||
templateCacheName = typeOverrides.get(typeKey).getCacheName();
|
||||
regionCacheCfg = typeOverrides.get(typeKey).createInfinispanConfiguration();
|
||||
// Read template configuration
|
||||
builder.read(manager.getCacheConfiguration(templateCacheName));
|
||||
// Apply overrides
|
||||
typeOverrides.get(typeKey).applyTo(builder);
|
||||
}
|
||||
// Configure transaction manager
|
||||
regionCacheCfg = configureTransactionManager(regionCacheCfg, templateCacheName, properties);
|
||||
// Apply overrides
|
||||
manager.defineConfiguration(regionName, templateCacheName, regionCacheCfg);
|
||||
configureTransactionManager(builder, templateCacheName, properties);
|
||||
// Define configuration
|
||||
manager.defineConfiguration(regionName, builder.build());
|
||||
definedConfigurations.add(regionName);
|
||||
}
|
||||
AdvancedCache cache = manager.getCache(regionName).getAdvancedCache();
|
||||
@ -523,6 +538,12 @@ private AdvancedCache getCache(String regionName, String typeKey, Properties pro
|
||||
return createCacheWrapper(cache);
|
||||
}
|
||||
|
||||
private void applyConfiguration(String cacheName, ConfigurationBuilder builder) {
|
||||
Configuration cfg = manager.getCacheConfiguration(cacheName);
|
||||
if (cfg != null)
|
||||
builder.read(cfg);
|
||||
}
|
||||
|
||||
private CacheCommandFactory getCacheCommandFactory(AdvancedCache cache) {
|
||||
GlobalComponentRegistry globalCr = cache.getComponentRegistry()
|
||||
.getGlobalComponentRegistry();
|
||||
@ -549,25 +570,30 @@ protected AdvancedCache createCacheWrapper(AdvancedCache cache) {
|
||||
return cache;
|
||||
}
|
||||
|
||||
private Configuration configureTransactionManager(Configuration regionOverrides, String templateCacheName, Properties properties) {
|
||||
private void configureTransactionManager(ConfigurationBuilder builder,
|
||||
String cacheName, Properties properties) {
|
||||
// Get existing configuration to verify whether a tm was configured or not.
|
||||
Configuration templateConfig = manager.defineConfiguration(templateCacheName, new Configuration());
|
||||
if (templateConfig.isTransactionalCache()) {
|
||||
String ispnTmLookupClassName = templateConfig.getTransactionManagerLookupClass();
|
||||
Configuration baseCfg = manager.getCacheConfiguration(cacheName);
|
||||
if (baseCfg != null && baseCfg.transaction().transactionMode().isTransactional()) {
|
||||
String ispnTmLookupClassName = baseCfg.transaction().transactionManagerLookup().getClass().getName();
|
||||
String hbTmLookupClassName = org.hibernate.cache.infinispan.tm.HibernateTransactionManagerLookup.class.getName();
|
||||
if (ispnTmLookupClassName != null && !ispnTmLookupClassName.equals(hbTmLookupClassName)) {
|
||||
if (GenericTransactionManagerLookup.class.getName().equals(ispnTmLookupClassName)) {
|
||||
log.debug("Using default Infinispan transaction manager lookup " +
|
||||
"instance (GenericTransactionManagerLookup), overriding it " +
|
||||
"with Hibernate transaction manager lookup");
|
||||
builder.transaction().transactionManagerLookup(transactionManagerlookup);
|
||||
} else if (ispnTmLookupClassName != null && !ispnTmLookupClassName.equals(hbTmLookupClassName)) {
|
||||
log.debug("Infinispan is configured [" + ispnTmLookupClassName + "] with a different transaction manager lookup " +
|
||||
"class than Hibernate [" + hbTmLookupClassName + "]");
|
||||
} else {
|
||||
regionOverrides.setTransactionManagerLookup(transactionManagerlookup);
|
||||
// Infinispan TM lookup class null, so apply Hibernate one directly
|
||||
builder.transaction().transactionManagerLookup(transactionManagerlookup);
|
||||
}
|
||||
|
||||
String useSyncProp = extractProperty(INFINISPAN_USE_SYNCHRONIZATION_PROP, properties);
|
||||
boolean useSync = useSyncProp == null ? DEF_USE_SYNCHRONIZATION : Boolean.parseBoolean(useSyncProp);
|
||||
regionOverrides.fluent().transaction().useSynchronization(useSync);
|
||||
builder.transaction().useSynchronization(useSync);
|
||||
}
|
||||
|
||||
return regionOverrides;
|
||||
}
|
||||
|
||||
private TypeOverrides overrideStatisticsIfPresent(TypeOverrides override, Properties properties) {
|
||||
|
@ -25,7 +25,8 @@
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import org.infinispan.config.Configuration;
|
||||
import org.infinispan.configuration.cache.Configuration;
|
||||
import org.infinispan.configuration.cache.ConfigurationBuilder;
|
||||
import org.infinispan.eviction.EvictionStrategy;
|
||||
|
||||
import org.hibernate.cache.CacheException;
|
||||
@ -118,25 +119,23 @@ public void setExposeStatistics(boolean isExposeStatistics) {
|
||||
this.isExposeStatistics = isExposeStatistics;
|
||||
}
|
||||
|
||||
public Configuration createInfinispanConfiguration() {
|
||||
Configuration cacheCfg = new Configuration();
|
||||
public void applyTo(ConfigurationBuilder builder) {
|
||||
if (overridden.contains("evictionStrategy"))
|
||||
cacheCfg.fluent().eviction().strategy(evictionStrategy);
|
||||
builder.eviction().strategy(evictionStrategy);
|
||||
if (overridden.contains("evictionWakeUpInterval"))
|
||||
cacheCfg.fluent().expiration().wakeUpInterval(evictionWakeUpInterval);
|
||||
builder.expiration().wakeUpInterval(evictionWakeUpInterval);
|
||||
if (overridden.contains("evictionMaxEntries"))
|
||||
cacheCfg.fluent().eviction().maxEntries(evictionMaxEntries);
|
||||
builder.eviction().maxEntries(evictionMaxEntries);
|
||||
if (overridden.contains("expirationLifespan"))
|
||||
cacheCfg.fluent().expiration().lifespan(expirationLifespan);
|
||||
builder.expiration().lifespan(expirationLifespan);
|
||||
if (overridden.contains("expirationMaxIdle"))
|
||||
cacheCfg.fluent().expiration().maxIdle(expirationMaxIdle);
|
||||
builder.expiration().maxIdle(expirationMaxIdle);
|
||||
if (overridden.contains("isExposeStatistics") && isExposeStatistics)
|
||||
cacheCfg.fluent().jmxStatistics();
|
||||
return cacheCfg;
|
||||
builder.jmxStatistics().enable();
|
||||
}
|
||||
|
||||
public void validateInfinispanConfiguration(Configuration configuration) throws CacheException {
|
||||
// no-op
|
||||
public void validateInfinispanConfiguration(Configuration cfg) throws CacheException {
|
||||
// no-op, method overriden
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -21,8 +21,7 @@
|
||||
*/
|
||||
package org.hibernate.cache.infinispan.timestamp;
|
||||
|
||||
import org.infinispan.config.Configuration;
|
||||
import org.infinispan.config.Configuration.CacheMode;
|
||||
import org.infinispan.configuration.cache.Configuration;
|
||||
import org.infinispan.eviction.EvictionStrategy;
|
||||
|
||||
import org.hibernate.cache.CacheException;
|
||||
@ -35,15 +34,16 @@
|
||||
* @since 3.5
|
||||
*/
|
||||
public class TimestampTypeOverrides extends TypeOverrides {
|
||||
|
||||
@Override
|
||||
public void validateInfinispanConfiguration(Configuration configuration) throws CacheException {
|
||||
CacheMode cacheMode = configuration.getCacheMode();
|
||||
if (cacheMode.equals(CacheMode.INVALIDATION_ASYNC) || cacheMode.equals(CacheMode.INVALIDATION_SYNC)) {
|
||||
public void validateInfinispanConfiguration(Configuration cfg) throws CacheException {
|
||||
if (cfg.clustering().cacheMode().isInvalidation()) {
|
||||
throw new CacheException("Timestamp cache cannot be configured with invalidation");
|
||||
}
|
||||
EvictionStrategy strategy = configuration.getEvictionStrategy();
|
||||
EvictionStrategy strategy = cfg.eviction().strategy();
|
||||
if (!strategy.equals(EvictionStrategy.NONE)) {
|
||||
throw new CacheException("Timestamp cache cannot be configured with eviction");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -242,6 +242,7 @@ public void testBuildEntityCollectionRegionOverridesOnly() {
|
||||
assertEquals(EvictionStrategy.LIRS, cacheCfg.eviction().strategy());
|
||||
assertEquals(3000, cacheCfg.expiration().wakeUpInterval());
|
||||
assertEquals(30000, cacheCfg.eviction().maxEntries());
|
||||
// Max idle value comes from base XML configuration
|
||||
assertEquals(100000, cacheCfg.expiration().maxIdle());
|
||||
|
||||
CollectionRegionImpl collectionRegion = (CollectionRegionImpl)
|
||||
@ -394,7 +395,7 @@ public void testBuildTimestamRegionWithNoneEvictionOverride() {
|
||||
p.setProperty("hibernate.cache.infinispan.timestamps.cfg", "timestamps-none-eviction");
|
||||
p.setProperty("hibernate.cache.infinispan.timestamps.eviction.strategy", "NONE");
|
||||
p.setProperty("hibernate.cache.infinispan.timestamps.eviction.wake_up_interval", "3000");
|
||||
p.setProperty("hibernate.cache.infinispan.timestamps.eviction.max_entries", "10000");
|
||||
p.setProperty("hibernate.cache.infinispan.timestamps.eviction.max_entries", "0");
|
||||
InfinispanRegionFactory factory = createRegionFactory(p);
|
||||
try {
|
||||
factory.buildTimestampsRegion(timestamps, p);
|
||||
|
@ -69,7 +69,7 @@ public class IsolatedClassLoaderTest extends DualNodeTestCase {
|
||||
|
||||
private static ClassLoader originalTCCL;
|
||||
|
||||
private static ClassLoader visibleClassesCl;
|
||||
// private static ClassLoader visibleClassesCl;
|
||||
|
||||
@BeforeClass
|
||||
public static void prepareClassLoader() {
|
||||
@ -200,12 +200,10 @@ protected void queryTest(boolean useNamedRegion) throws Exception {
|
||||
if ( useNamedRegion ) {
|
||||
cacheName = "AccountRegion"; // As defined by ClassLoaderTestDAO via calls to query.setCacheRegion
|
||||
// Define cache configurations for region early to avoid ending up with local caches for this region
|
||||
localManager.defineConfiguration(
|
||||
cacheName, "replicated-query", new org.infinispan.config.Configuration()
|
||||
);
|
||||
remoteManager.defineConfiguration(
|
||||
cacheName, "replicated-query", new org.infinispan.config.Configuration()
|
||||
);
|
||||
localManager.defineConfiguration(cacheName,
|
||||
localManager.getCacheConfiguration("replicated-query"));
|
||||
remoteManager.defineConfiguration(cacheName,
|
||||
remoteManager.getCacheConfiguration("replicated-query"));
|
||||
}
|
||||
else {
|
||||
cacheName = "replicated-query";
|
||||
|
@ -34,6 +34,7 @@
|
||||
import javax.transaction.Status;
|
||||
import javax.transaction.UserTransaction;
|
||||
|
||||
import org.infinispan.configuration.cache.ConfigurationBuilder;
|
||||
import org.infinispan.transaction.lookup.JBossStandaloneJTAManagerLookup;
|
||||
import org.infinispan.util.logging.Log;
|
||||
import org.infinispan.util.logging.LogFactory;
|
||||
@ -84,7 +85,7 @@ public void setUp() throws Exception {
|
||||
jndiServer = startJndiServer();
|
||||
ctx = createJndiContext();
|
||||
// Inject configuration to initialise transaction manager from config classloader
|
||||
lookup.init( new org.infinispan.config.Configuration() );
|
||||
lookup.init(new ConfigurationBuilder().build());
|
||||
bindTransactionManager();
|
||||
bindUserTransaction();
|
||||
}
|
||||
@ -92,6 +93,8 @@ public void setUp() throws Exception {
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
try {
|
||||
unbind("UserTransaction", ctx);
|
||||
unbind("java:/TransactionManager", ctx);
|
||||
ctx.close();
|
||||
jndiServer.stop();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user