@Override
 public CompletableFuture<Object> invokeAsync() throws Throwable {
   GlobalComponentRegistry globalComponentRegistry = cacheManager.getGlobalComponentRegistry();
   ComponentRegistry cacheComponentRegistry =
       globalComponentRegistry.getNamedComponentRegistry(cacheName);
   String name = cacheName.toString();
   if (cacheComponentRegistry != null) {
     cacheComponentRegistry.getComponent(PersistenceManager.class).setClearOnStop(true);
     cacheComponentRegistry.getComponent(CacheJmxRegistration.class).setUnregisterCacheMBean(true);
     cacheComponentRegistry.getComponent(PassivationManager.class).skipPassivationOnStop(true);
     Cache<?, ?> cache = cacheManager.getCache(name, false);
     if (cache != null) {
       cache.stop();
     }
   }
   globalComponentRegistry.removeCache(name);
   // Remove cache configuration and remove it from the computed cache name list
   globalComponentRegistry.getComponent(ConfigurationManager.class).removeConfiguration(name);
   // Remove cache from dependency graph
   //noinspection unchecked
   globalComponentRegistry
       .getComponent(DependencyGraph.class, CACHE_DEPENDENCY_GRAPH)
       .remove(cacheName);
   return CompletableFutures.completedNull();
 }
 private void unregisterProtobufMetadataManagerMBean(GlobalComponentRegistry gcr) {
   try {
     ObjectName objName = gcr.getComponent(ProtobufMetadataManager.class).getObjectName();
     MBeanServer mBeanServer = JmxUtil.lookupMBeanServer(gcr.getGlobalConfiguration());
     JmxUtil.unregisterMBean(objName, mBeanServer);
   } catch (Exception e) {
     throw new CacheException("Unable to unregister ProtobufMetadataManager MBean", e);
   }
 }
 @Override
 protected EmbeddedCacheManager createCacheManager() throws Exception {
   ConfigurationBuilder c = getDefaultStandaloneCacheConfig(false);
   c.jmxStatistics().enable();
   cacheManager = TestCacheManagerFactory.createCacheManager(c);
   memcachedServer = MemcachedTestingUtil.startMemcachedTextServer(cacheManager);
   port = memcachedServer.getPort();
   memcachedClient = MemcachedTestingUtil.createMemcachedClient(60000, port);
   GlobalComponentRegistry gcr = TestingUtil.extractGlobalComponentRegistry(cacheManager);
   interpreter = gcr.getComponent(Interpreter.class);
   return cacheManager;
 }
 @Override
 protected void setup() throws Exception {
   super.setup();
   hotrodServer = HotRodClientTestingUtil.startHotRodServer(cacheManager);
   port = hotrodServer.getPort();
   remoteCacheManager =
       new RemoteCacheManager(
           new org.infinispan.client.hotrod.configuration.ConfigurationBuilder()
               .addServers("localhost:" + hotrodServer.getPort())
               .build());
   remoteCacheManager.start();
   GlobalComponentRegistry gcr = TestingUtil.extractGlobalComponentRegistry(cacheManager);
   interpreter = gcr.getComponent(Interpreter.class);
 }
 /**
  * Replaces a component in a running cache manager (global component registry)
  *
  * @param cacheContainer cache in which to replace component
  * @param componentType component type of which to replace
  * @param replacementComponent new instance
  * @param rewire if true, ComponentRegistry.rewire() is called after replacing.
  * @return the original component that was replaced
  */
 public static <T> T replaceComponent(
     CacheContainer cacheContainer,
     Class<T> componentType,
     T replacementComponent,
     boolean rewire) {
   GlobalComponentRegistry cr = extractGlobalComponentRegistry(cacheContainer);
   T old = cr.getComponent(componentType);
   cr.registerComponent(replacementComponent, componentType);
   if (rewire) {
     cr.rewire();
     cr.rewireNamedRegistries();
   }
   return old;
 }
 private SearchFactoryIntegrator getSearchFactory(
     Properties indexingProperties, ComponentRegistry cr) {
   Object component = cr.getComponent(SearchFactoryIntegrator.class);
   SearchFactoryIntegrator searchFactory = null;
   if (component
       instanceof
       SearchFactoryIntegrator) { // could be the placeholder Object REMOVED_REGISTRY_COMPONENT
     searchFactory = (SearchFactoryIntegrator) component;
   }
   // defend against multiple initialization:
   if (searchFactory == null) {
     GlobalComponentRegistry globalComponentRegistry = cr.getGlobalComponentRegistry();
     EmbeddedCacheManager uninitializedCacheManager =
         globalComponentRegistry.getComponent(EmbeddedCacheManager.class);
     indexingProperties = addProgrammaticMappings(indexingProperties, cr);
     // Set up the search factory for Hibernate Search first.
     SearchConfiguration config =
         new SearchableCacheConfiguration(
             new Class[0], indexingProperties, uninitializedCacheManager, cr);
     searchFactory = new SearchFactoryBuilder().configuration(config).buildSearchFactory();
     cr.registerComponent(searchFactory, SearchFactoryIntegrator.class);
   }
   return searchFactory;
 }
 public static ExternalizerTable extractExtTable(CacheContainer cacheContainer) {
   GlobalComponentRegistry gcr =
       (GlobalComponentRegistry) extractField(cacheContainer, "globalComponentRegistry");
   return gcr.getComponent(ExternalizerTable.class);
 }
 public static AbstractDelegatingMarshaller extractGlobalMarshaller(EmbeddedCacheManager cm) {
   GlobalComponentRegistry gcr =
       (GlobalComponentRegistry) extractField(cm, "globalComponentRegistry");
   return (AbstractDelegatingMarshaller)
       gcr.getComponent(StreamingMarshaller.class, KnownComponentNames.GLOBAL_MARSHALLER);
 }
 /** Extracts a component of a given type from the cache's internal component registry */
 public static <T> T extractGlobalComponent(
     CacheContainer cacheContainer, Class<T> componentType) {
   GlobalComponentRegistry gcr = extractGlobalComponentRegistry(cacheContainer);
   return gcr.getComponent(componentType);
 }
 @Override
 public void cacheManagerStarted(GlobalComponentRegistry gcr) {
   EmbeddedCacheManager cacheManager = gcr.getComponent(EmbeddedCacheManager.class);
   initProtobufMetadataManager((DefaultCacheManager) cacheManager, gcr);
 }