2016-11-25 6 views
0

私のアプリケーションには2つのキャッシュがあります。私はフィルタの左側がキャッシュ "A"に、フィルタの右側がキャッシュ "B"になるANDフィルタを作成する必要があります。複数のキャッシュにまたがる一貫性フィルタ

これは可能ですか?

私の現在のフィルタは次のようである:

AllFilter( 
    AllFilter( 
     EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1), 
     EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C) 
    ), 
    AndFilter( 
     GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0), 
     OrFilter( 
      AndFilter( 
       EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S), 
       GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280) 
      ), 
      AndFilter( 
       EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N), 
       GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280) 
      ) 
     ) 
    ) 
) 

問題は、この抽出は、貴様のキャッシュ上で行動しなければならないということです。すべての条件が同じキャッシュにある場合、コードは次のようになります。

list.addAll(cacheA.keySet(myFilter)); 

が、実際のフィルタは、3つの異なるキャッシュ上にある:

cacheA -> 
    AllFilter( 
     EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=0)), 1), 
     EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=1)), C) 
    ) 

cacheB -> 
    GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=4)), 1998-12-31 00:00:00.0) 

cacheC and CacheA -> 
    OrFilter( 
      AndFilter( 
       CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), S), 
       CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=27)), 280) 
      ), 
      AndFilter( 
       CacheA --> EqualsFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=33)), N), 
       CacheB --> GreaterFilter(PofExtractor(target=VALUE, navigator=SimplePofPath(indices=26)), 280) 
      ) 
     ) 
    ) 

親切に関してあなたが持っているでしょう結局

+0

(CacheA.getValue()== CacheB.getValue()) \tリターンA. は、それが正しい場合は、 を実装するように見えますか? –

答えて

0

2つのクエリを作成するには、ユースケースを説明すると役に立ちます。

EntryProcessorを使用して複数のキャッシュにアクセスすると、キャッシュ自体でコードが実行されるため、パフォーマンスと整合性が向上します。

注記:両方のキャッシュが同じServiceに属している必要があります。それ以外の場合は動作しません。

+0

こんにちは、私は私の質問に詳細を追加しました。あなたが実装で私を導くことができたら、私は感謝します。親切な意見 – user7210000

関連する問題