2015-08-26 38 views
0

我正在开发一个非常简单的仪表板来清除Gemfire区域以进行测试。我主要这样做是为了让测试人员自己来做这件事。用Spring-data-gemfire从Gemfire中获取所有区域

我想动态获取当前可用的区域名称来清除。

我正在寻找spring-data-gemfire文档,但我找不到获取所有区域名称的方法。

我到目前为止最好的提示是<gfe:auto-region-lookup/>,但我想我仍然需要有一个cache.xml与所有区域名称,我也不知道如何动态显示它们的名称以及如何从所有区域中删除所有数据那些地区。

感谢

回答

1

<gfe:auto-region-lookup>旨在为所有的GemFire地区春季ApplicationContext已Spring上下文之外被明确创建(即cache.xml或使用的GemFire的相对较新的Cluster-based Configuration Service)自动创建豆类。但是,开发人员必须使用和/或启用这些机制才能使用auto-region-lookup功能。

要得到的GemFire“集群”在所有地区的名单,你需要的东西相当于Gfsh的'list region'命令,它采用Function收集起来的GemFire(高速缓存)集群中定义的所有地区。

请注意,成员可以定义不同的区域,即参与群集的所有成员不一定必须定义相同的区域。在大多数情况下,它们的确适用于复制和HA目的。还有一些成员可能只定义成员将使用的本地区域。

要继续清除列表中的区域,您将需要再次使用GemFire Function来“清除”群集中查询执行成员当前未定义的其他区域。

当然,这个问题是真正的简单,如果你只想清除成员本身定义的区域...

@Autowired 
private Cache gemfireCache; 
... 

public void clearRegions() { 
    for (Region rootRegion : gemfireCache.rootRegions()) { 
    for (Region subRegion : rootRegion.subregions(true)) { 
     subRegion.clear(); 
    } 
    rootRegion.clear()); 
    } 
} 

详情请参阅rootRegions()subregions(recursive:boolean)

注意,GemFire的Cache接口实现RegionService接口。

希望这会有所帮助。

干杯!

+0

请注意,您无法在PartitionedRegions上调用clear(),您将得到一个UnsupportedOperationException异常。对于那些,典型的方法是使用onMember函数调用,它遍历并单独删除每个条目。 –

+0

这是正确的。但是,您可以在PARTITION区域上调用“removeAll()”。这正是SDG SimpleGemfireRepository impl所做的(https://github.com/spring-projects/spring-data-gemfire/blob/master/src/main/java/org/springframework/data/gemfire/repository/support/ SimpleGemfireRepository.java#L264-L266),特别是(https://github.com/spring-projects/spring-data-gemfire/blob/master/src/main/java/org/springframework/data/gemfire/repository/support /SimpleGemfireRepository.java#L249-L251)。所以,这里不要求函数。 –

+0

其实,只是在想分区。removeAll(partitionRegion.keySet())最可能是成员本地的,在这种情况下,您需要一个以托管该(PARTITION)区域的所有成员为目标的函数。但是,使用keySet的removeAll(..)将为您处理“迭代”部分,;-) –