private Cache getCache(String regionName, String typeKey, Properties properties) {
   TypeOverrides regionOverride = typeOverrides.get(regionName);
   if (!definedConfigurations.contains(regionName)) {
     String templateCacheName = null;
     Configuration regionCacheCfg = null;
     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;
       else // Region specific override without cache name, so template cache name is generic for
            // data type.
       templateCacheName = typeOverrides.get(typeKey).getCacheName();
     } else {
       // No region specific overrides, template cache name is generic for data type.
       templateCacheName = typeOverrides.get(typeKey).getCacheName();
       regionCacheCfg = typeOverrides.get(typeKey).createInfinispanConfiguration();
     }
     // Configure transaction manager
     regionCacheCfg = configureTransactionManager(regionCacheCfg, templateCacheName, properties);
     // Apply overrides
     manager.defineConfiguration(regionName, templateCacheName, regionCacheCfg);
     definedConfigurations.add(regionName);
   }
   Cache cache = manager.getCache(regionName);
   if (!cache.getStatus().allowInvocations()) {
     cache.start();
   }
   return createCacheWrapper(cache.getAdvancedCache());
 }
 private TypeOverrides overrideStatisticsIfPresent(TypeOverrides override, Properties properties) {
   String globalStats =
       ConfigurationHelper.extractPropertyValue(INFINISPAN_GLOBAL_STATISTICS_PROP, properties);
   if (globalStats != null) {
     override.setExposeStatistics(Boolean.parseBoolean(globalStats));
   }
   return override;
 }
 private void defineGenericDataTypeCacheConfigurations(Settings settings, Properties properties)
     throws CacheException {
   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();
     // Apply overrides
     Configuration cacheConfig = manager.defineConfiguration(cacheName, cacheName, newCacheCfg);
     // Configure transaction manager
     cacheConfig = configureTransactionManager(cacheConfig, cacheName, properties);
     manager.defineConfiguration(cacheName, cacheName, cacheConfig);
     definedConfigurations.add(cacheName);
     override.validateInfinispanConfiguration(cacheConfig);
   }
 }
 private void dissectProperty(int prefixLoc, String key, Properties properties) {
   TypeOverrides cfgOverride = null;
   int suffixLoc = -1;
   if (!key.equals(INFINISPAN_CONFIG_RESOURCE_PROP)
       && (suffixLoc = key.indexOf(CONFIG_SUFFIX)) != -1) {
     cfgOverride = getOrCreateConfig(prefixLoc, key, suffixLoc);
     cfgOverride.setCacheName(ConfigurationHelper.extractPropertyValue(key, properties));
   } else if ((suffixLoc = key.indexOf(STRATEGY_SUFFIX)) != -1) {
     cfgOverride = getOrCreateConfig(prefixLoc, key, suffixLoc);
     cfgOverride.setEvictionStrategy(ConfigurationHelper.extractPropertyValue(key, properties));
   } else if ((suffixLoc = key.indexOf(WAKE_UP_INTERVAL_SUFFIX)) != -1) {
     cfgOverride = getOrCreateConfig(prefixLoc, key, suffixLoc);
     cfgOverride.setEvictionWakeUpInterval(
         Long.parseLong(ConfigurationHelper.extractPropertyValue(key, properties)));
   } else if ((suffixLoc = key.indexOf(MAX_ENTRIES_SUFFIX)) != -1) {
     cfgOverride = getOrCreateConfig(prefixLoc, key, suffixLoc);
     cfgOverride.setEvictionMaxEntries(ConfigurationHelper.getInt(key, properties, -1));
   } else if ((suffixLoc = key.indexOf(LIFESPAN_SUFFIX)) != -1) {
     cfgOverride = getOrCreateConfig(prefixLoc, key, suffixLoc);
     cfgOverride.setExpirationLifespan(
         Long.parseLong(ConfigurationHelper.extractPropertyValue(key, properties)));
   } else if ((suffixLoc = key.indexOf(MAX_IDLE_SUFFIX)) != -1) {
     cfgOverride = getOrCreateConfig(prefixLoc, key, suffixLoc);
     cfgOverride.setExpirationMaxIdle(
         Long.parseLong(ConfigurationHelper.extractPropertyValue(key, properties)));
   }
   //      else if ((suffixLoc = key.indexOf(STATISTICS_SUFFIX)) != -1) {
   //         cfgOverride = getOrCreateConfig(prefixLoc, key, suffixLoc);
   //
   // cfgOverride.setExposeStatistics(Boolean.parseBoolean(PropertiesHelper.extractPropertyValue(key, properties)));
   //      }
 }
 private Map<String, TypeOverrides> initGenericDataTypeOverrides() {
   TypeOverrides entityOverrides = new TypeOverrides();
   entityOverrides.setCacheName(DEF_ENTITY_RESOURCE);
   typeOverrides.put(ENTITY_KEY, entityOverrides);
   TypeOverrides collectionOverrides = new TypeOverrides();
   collectionOverrides.setCacheName(DEF_ENTITY_RESOURCE);
   typeOverrides.put(COLLECTION_KEY, collectionOverrides);
   TypeOverrides timestampOverrides = new TimestampTypeOverrides();
   timestampOverrides.setCacheName(DEF_TIMESTAMPS_RESOURCE);
   typeOverrides.put(TIMESTAMPS_KEY, timestampOverrides);
   TypeOverrides queryOverrides = new TypeOverrides();
   queryOverrides.setCacheName(DEF_QUERY_RESOURCE);
   typeOverrides.put(QUERY_KEY, queryOverrides);
   return typeOverrides;
 }