2015-08-26 33 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(..)將爲您處理「迭代」部分,;-) –