2017-07-05 19 views
0

私は、1つのロケータと1つのサーバでPivotal GemFire 9.0.0を使用しています。次のコードを実行するとき、私はヌルとして地域を取得していますGemFire getRegion()はnullを返しますが、OQLクエリは結果を返します。

<gfe:replicated-region id="submissionsRegion" name="submissions" 
statistics="true" template="replicateRegionTemplate"> 
... 
</gfe:replicated-region> 

- -

Region<K, V> region = clientCache.getRegion("submissions"); 

驚くべきことに、同じClientCacheリターンすべてのレコードをするとき、私Serverは、以下のような「提出」を、地域と呼ばれています私はこのような私のClientCacheを初期化しています

String queryString = "SELECT * FROM /submissions"; 
QueryService queryService = clientCache.getQueryService(); 
Query query = queryService.newQuery(queryString); 
SelectResults results = (SelectResults) query.execute(); 

- - OQLとQueryServiceを使用してクエリを以下のように

ClientCache clientCache = new ClientCacheFactory() 
      .addPoolLocator("localhost", 10479) 
      .set("name", "MyClientCache") 
      .set("log-level", "error") 
      .create(); 

私はこれに本当に困惑しています。どんなポインタやヘルプも素晴らしいでしょう。

答えて

2

ClientCache(cache.xmlまたは純粋なGemFire APIのいずれかを使用)をリージョンとともに構成する必要があります。あなたの例の使用:はちょうど簡単のために使用され

ClientRegionFactory regionFactory = clientCache.createClientRegionFactory(ClientRegionShortcut.PROXY); 
Region region = regionFactory.create("submissions"); 

ClientRegionShortcut.PROXYを、あなたはあなたのニーズを満たしているショートカットを使用する必要があります。予想通り、あなたが(代わりにClientCache.getLocalQueryService()の)ClientCache.getQueryService()メソッドを介してQueryServiceを取得しているので、クエリは、実際にサーバー側で実行されるため、OQL作品

クライアント/サーバートポロジを構成する方法の詳細については、 Client/Server Configurationを参照してください。

これが役に立ちます。

乾杯。

+1

ありがとうございました。しかし、私は 'clientCache.getRegion(" submissions ")が何をしているのか理解していました。以来、私は 'clientCache'を使ってloactorに接続していたので、私はその地域を私に持ってきたはずです。 – Vijender

+0

こんにちは。あなたはそれを解決する方法を見つけましたか?私は同じ行動を経験しています。 getRegionはnullとClientCacheFactory RegionExistsExceptionを返します。 – korro

1

はい、サーバサイドのREPLICATEと名前が一致する(つまり「送信」)、対応するクライアント側の地域を定義する必要があります。実際には、これはサーバの種類に関係なく、地域番号DataPolicy(例:REPLICATEまたはPARTITION)です。

これは、すべてのクライアントがすべての可能なサーバー領域からのデータ/イベントを知りたい、または必要とする必要がないためです。もちろん、これはサブスクリプションと "Interests Registration"(Client/Server Event Messaging、あるいはCQs)でも設定できます。とにかく

、あなたは完全に...どちらかSDGのXML名前空間を使用して(非常に避けることをお勧めします)

<gfe:client-cache properties-ref="gemfireProperties" ... /> 

<gfe:client-region id="submissions" shortcut="PROXY"/> 

それとも JavaConfigを使用しての直接のGemFireのAPIの使用を避けるかさえGemFireののネイティブcache.xmlすることができますSDGのAPIで...

@Configuration 
class GemFireConfiguration { 

    Properties gemfireProperties() { 

    Properties gemfireProperties = new Properties(); 

    gemfireProperties.setProperty("log-level", "config"); 
    ... 

    return gemfireProperties; 
    } 

    @Bean 
    ClientCacheFactoryBean gemfireCache() { 

    ClientCacheFactoryBean gemfireCache = new ClientCacheFactoryBean(); 

    gemfireCache.setClose(true); 
    gemfireCache.setProperties(gemfireProperties()); 
    ... 

    return gemfireCache; 
    } 

    @Bean(name = "submissions"); 
    ClientRegionFactoryBean submissionsRegion(GemFireCache gemfireCache) { 

    ClientRegionFactoryBean submissions = new ClientRegionFactoryBean(); 

    submissions.setCache(gemfireCache); 
    submissions.setClose(false); 
    submissions.setShortcut(ClientRegionShortcut.PROXY); 
    ... 

    return submissions; 
    } 

    ... 
} 

「提出」地域はfind(..)メソッドを使用してクエリを実行するときに、あなたに代わってQueryService「正しい」を取得し処理するこれ、SDGのGemfireTemplateでラップすることができます。

もちろん、あなたのクライアントの "提出先"地域をCACHING_PROXYにすることもできます。もちろん、キーや興味のあるデータに "興味"を登録する必要があります。クエリの基準を使用して「関心」のデータを定義するので、これを実行します。

CACHING_PROXY興味のポリシーに基づいてクライアントでローカルにデータをキャッシュするのとまったく同じです。ここでは、「ネットワークホップを避け、ローカルにデータを照会するQueryService。とにかく

、多くのオプション。

乾杯、 ジョン

関連する問題