Java 获取所有缓存名称

Java 获取所有缓存名称,java,hazelcast,jcache,Java,Hazelcast,Jcache,我正在开发一个REST应用程序来读取集群中的所有缓存,该集群使用带有Hazel cast 3.3.3的J缓存 当我在应用程序中调用以下行时,此应用程序将创建另一个hazel cast节点: cacheManager= Caching.getCachingProvider().getCacheManager(); 该节点与已创建的节点聚集在一起。但是,当我尝试使用以下命令获取集群的所有缓存名称时,它返回一个空的iterable: cacheManager.getCacheNames().iter

我正在开发一个REST应用程序来读取集群中的所有缓存,该集群使用带有Hazel cast 3.3.3的J缓存

当我在应用程序中调用以下行时,此应用程序将创建另一个hazel cast节点:

cacheManager= Caching.getCachingProvider().getCacheManager();
该节点与已创建的节点聚集在一起。但是,当我尝试使用以下命令获取集群的所有缓存名称时,它返回一个空的iterable:

cacheManager.getCacheNames().iterator()
我浏览了Jcache的Java文档,其中包含:

可能无法提供CacheManager管理的所有缓存。对于 示例:内部定义的或特定于平台的缓存 可通过调用getCache(java.lang.String)或 getCache(java.lang.String、java.lang.Class、java.lang.Class)可能不可用 在迭代中出现

但是我尝试访问的缓存不是内部的 定义的或特定于平台的。它们由其他节点创建

我想要一种方法来获取集群中存在的所有名称。有办法吗

注意:应用程序中未使用hazelcast.xml。所有这些都由默认的xml初始化

更新:

如果我知道名字,我可以访问缓存。在第一次直接给出名称进行访问之后,现在它显示了
cacheManager.getCacheNames().iterator()中的缓存

但是我尝试访问的缓存不是内部定义的,也不是外部定义的 平台特定

这很好,因为此方法应该返回所有其他方法以及一些内部定义的或特定于平台的方法

但是我尝试访问的缓存不是内部定义的,也不是外部定义的 平台特定

这很好,因为此方法应该返回所有其他方法以及一些内部定义的或特定于平台的方法

但是我尝试访问的缓存不是内部定义的,也不是外部定义的 平台特定

这很好,因为此方法应该返回所有其他方法以及一些内部定义的或特定于平台的方法

但是我尝试访问的缓存不是内部定义的,也不是外部定义的 平台特定


这很好,因为此方法应该返回所有其他缓存以及一些内部定义的缓存或特定于平台的缓存。

CacheManager
仅提供其管理的缓存的名称,因此您无法使用JCache API获取集群已知的所有缓存

在Hazelcast 3.7中(EA就在昨天发布),所有的
Cache
s都可以作为
DistributedObject
s使用,因此调用
Hazelcast实例.getDistributedObject()
然后检查对象是否是
javax.cache.cache
或Hazelcast特定子类
com.Hazelcast.cache.ICache的实例,您应该能够获取集群中所有
缓存的引用:

// works for 3.7
Collection<DistributedObject> distributedObjects = hazelcastInstance.getDistributedObjects();
for (DistributedObject distributedObject : distributedObjects) {
     if (distributedObject instanceof ICache) {
        System.out.println("Found cache with name " + distributedObject.getName());
     }
}
//适用于3.7
集合distributedObjects=hazelcastInstance.getDistributedObjects();
对于(DistributedObject DistributedObject:DistributedObject){
if(ICache的分布式对象实例){
System.out.println(“找到名为“+distributedObject.getName()的缓存”);
}
}
在Hazelcast 3.6中,可以仅使用内部类获取集群已知的所有缓存名称,因此不能保证这将适用于任何其他版本

// works for 3.6 using internal classes, most probably will not work for other versions
public static void main(String[] args) {

    // start a hazelcast instance
    HazelcastInstance hz = Hazelcast.newHazelcastInstance();

    // create a CacheManager and Cache on this instance
    CachingProvider hazelcastCachingProvider = Caching.getCachingProvider("com.hazelcast.cache.HazelcastCachingProvider",
            HazelcastCachingProvider.class.getClassLoader());
    CacheManager cacheManager = hazelcastCachingProvider.getCacheManager();
    cacheManager.createCache("test1", new CacheConfig<Object, Object>());

    // hacky: obtain a reference to internal cache service
    CacheDistributedObject cacheDistributedObject = hz.getDistributedObject("hz:impl:cacheService", "setupRef");
    ICacheService cacheService = cacheDistributedObject.getService();

    // obtain all CacheConfig's in the cluster
    Collection<CacheConfig> cacheConfigs = cacheService.getCacheConfigs();
    for (CacheConfig cacheConfig : cacheConfigs) {
        System.out.println("Cache name: " + cacheConfig.getName() + 
            ", fully qualified name: " + cacheConfig.getNameWithPrefix());
    }

    hz.shutdown();
}
//适用于使用内部类的3.6,很可能不适用于其他版本
公共静态void main(字符串[]args){
//启动一个hazelcast实例
HazelcastInstance hz=Hazelcast.newHazelcastInstance();
//在此实例上创建CacheManager和缓存
CachingProvider hazelcastCachingProvider=Caching.getCachingProvider(“com.hazelcast.cache.hazelcastCachingProvider”,
HazelcastCachingProvider.class.getClassLoader());
CacheManager CacheManager=hazelcastCachingProvider.getCacheManager();
createCache(“test1”,newcacheconfig());
//hacky:获取对内部缓存服务的引用
CacheDistributedObject CacheDistributedObject=hz.getDistributedObject(“hz:impl:cacheService”、“setupRef”);
ICacheService cacheService=cacheDistributedObject.getService();
//获取群集中的所有CacheConfig
集合cacheConfigs=cacheService.getCacheConfigs();
for(CacheConfig CacheConfig:cacheConfigs){
System.out.println(“缓存名称:”+cacheConfig.getName()+
,完全限定名:“+cacheConfig.getNameWithPrefix());
}
hz.shutdown();
}

CacheManager
仅提供其管理的缓存的名称,因此您无法使用JCache API获取集群已知的所有缓存

在Hazelcast 3.7中(EA就在昨天发布),所有的
Cache
s都可以作为
DistributedObject
s使用,因此调用
Hazelcast实例.getDistributedObject()
然后检查对象是否是
javax.cache.cache
或Hazelcast特定子类
com.Hazelcast.cache.ICache的实例,您应该能够获取集群中所有
缓存的引用:

// works for 3.7
Collection<DistributedObject> distributedObjects = hazelcastInstance.getDistributedObjects();
for (DistributedObject distributedObject : distributedObjects) {
     if (distributedObject instanceof ICache) {
        System.out.println("Found cache with name " + distributedObject.getName());
     }
}
//适用于3.7
集合distributedObjects=hazelcastInstance.getDistributedObjects();
对于(DistributedObject DistributedObject:DistributedObject){
if(ICache的分布式对象实例){
System.out.println(“找到名为“+distributedObject.getName()的缓存”);
}
}
在Hazelcast 3.6中,可以仅使用内部类获取集群已知的所有缓存名称,因此不能保证这将适用于任何其他版本

// works for 3.6 using internal classes, most probably will not work for other versions
public static void main(String[] args) {

    // start a hazelcast instance
    HazelcastInstance hz = Hazelcast.newHazelcastInstance();

    // create a CacheManager and Cache on this instance
    CachingProvider hazelcastCachingProvider = Caching.getCachingProvider("com.hazelcast.cache.HazelcastCachingProvider",
            HazelcastCachingProvider.class.getClassLoader());
    CacheManager cacheManager = hazelcastCachingProvider.getCacheManager();
    cacheManager.createCache("test1", new CacheConfig<Object, Object>());

    // hacky: obtain a reference to internal cache service
    CacheDistributedObject cacheDistributedObject = hz.getDistributedObject("hz:impl:cacheService", "setupRef");
    ICacheService cacheService = cacheDistributedObject.getService();

    // obtain all CacheConfig's in the cluster
    Collection<CacheConfig> cacheConfigs = cacheService.getCacheConfigs();
    for (CacheConfig cacheConfig : cacheConfigs) {
        System.out.println("Cache name: " + cacheConfig.getName() + 
            ", fully qualified name: " + cacheConfig.getNameWithPrefix());
    }

    hz.shutdown();
}
//适用于使用内部类的3.6,很可能不适用于其他版本
公共静态void main(字符串[]args){
//启动一个hazelcast实例
HazelcastInstance hz=Hazelcast.newHazelcastInstance();
//在此实例上创建CacheManager和缓存
CachingProvider hazelcastCachingProvider=Caching.getCachingProvider(“com.hazelcast.cache.hazelcastCachingProvider”,