@AdviseWith(adviceClasses = {DisableEhcacheBootstrapAdvice.class})
  @Test
  public void testBootstrapDisabled() {
    Configuration configuration =
        EhcacheConfigurationUtil.getConfiguration(_configurationURL, false);

    _assertBootStrap(configuration, false);

    configuration = EhcacheConfigurationUtil.getConfiguration(_configurationURL, true);

    _assertBootStrap(configuration, false);
  }
  @AdviseWith(
      adviceClasses = {EnableClusterLinkAdvice.class, EnableClusterLinkReplicateAdvice.class})
  @Test
  public void testClusterEnabled2() {
    Configuration configuration =
        EhcacheConfigurationUtil.getConfiguration(_configurationURL, false);

    _assertClusterLinkReplicatorConfigs(configuration, false);

    configuration = EhcacheConfigurationUtil.getConfiguration(_configurationURL, true);

    _assertClusterLinkReplicatorConfigs(configuration, true);
  }
  @AdviseWith(adviceClasses = {DisableClusterLinkAdvice.class, EnableEhcacheBootstrapAdvice.class})
  @Test
  public void testClusterDisabled() {
    Configuration configuration =
        EhcacheConfigurationUtil.getConfiguration(_configurationURL, false);

    _assertNoDefaultReplicatorConfigs(configuration);
    _assertBootStrap(configuration, false);

    configuration = EhcacheConfigurationUtil.getConfiguration(_configurationURL, true);

    _assertNoListenerConfigs(configuration);
    _assertBootStrap(configuration, false);
  }
  @AdviseWith(
      adviceClasses = {
        EnableClusterLinkAdvice.class,
        EnableEhcacheBootstrapAdvice.class,
        DisableClusterLinkReplicateAdvice.class
      })
  @Test
  public void testClusterEnabled1() {
    Configuration configuration =
        EhcacheConfigurationUtil.getConfiguration(_configurationURL, false);

    _assertListenerConfigsEquals(_configuration, configuration);
    _assertBootStrap(configuration, true);

    configuration = EhcacheConfigurationUtil.getConfiguration(_configurationURL, true);

    _assertListenerConfigsEquals(_configuration, configuration);
    _assertBootStrap(configuration, true);
  }
  @NewEnv(type = NewEnv.Type.NONE)
  @Test
  public void testMisc() {
    Configuration configuration =
        EhcacheConfigurationUtil.getConfiguration("WrongConfigurationPath", false);

    Assert.assertNull(configuration);

    configuration = EhcacheConfigurationUtil.getConfiguration(StringPool.BLANK, true);

    Assert.assertNull(configuration);

    URL configurationURL =
        EhcacheConfigurationUtilTest.class.getResource(
            "dependencies/test-single-ehcache-config.xml");

    Assert.assertNotNull(configurationURL);

    configuration = EhcacheConfigurationUtil.getConfiguration(configurationURL, true);

    Assert.assertNotNull(configuration);

    new EhcacheConfigurationUtil();
  }
  public void reconfigureCaches(URL configurationURL) {
    Configuration configuration =
        EhcacheConfigurationUtil.getConfiguration(configurationURL, _clusterAware);

    Map<String, CacheConfiguration> cacheConfigurations = configuration.getCacheConfigurations();

    for (CacheConfiguration cacheConfiguration : cacheConfigurations.values()) {

      Cache cache = new Cache(cacheConfiguration);

      PortalCache portalCache = addCache(cache.getName(), cache);

      if (portalCache == null) {
        _log.error("Failed to override cache " + cacheConfiguration.getName());
      }
    }
  }
  public void afterPropertiesSet() {
    String configurationPath = PropsUtil.get(_configPropertyKey);

    if (Validator.isNull(configurationPath)) {
      configurationPath = _DEFAULT_CLUSTERED_EHCACHE_CONFIG_FILE;
    }

    boolean usingDefault = configurationPath.equals(_DEFAULT_CLUSTERED_EHCACHE_CONFIG_FILE);

    Configuration configuration =
        EhcacheConfigurationUtil.getConfiguration(configurationPath, _clusterAware, usingDefault);

    _cacheManager = new CacheManager(configuration);

    FailSafeTimer failSafeTimer = _cacheManager.getTimer();

    failSafeTimer.cancel();

    try {
      Field cacheManagerTimerField =
          ReflectionUtil.getDeclaredField(CacheManager.class, "cacheManagerTimer");

      cacheManagerTimerField.set(_cacheManager, null);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }

    if (PropsValues.EHCACHE_PORTAL_CACHE_MANAGER_JMX_ENABLED) {
      _managementService =
          new ManagementService(
              _cacheManager,
              _mBeanServer,
              _registerCacheManager,
              _registerCaches,
              _registerCacheConfigurations,
              _registerCacheStatistics);

      _managementService.init();
    }
  }