検索

5.2. 継続的なクエリーの作成

download PDF

リモートおよび組み込みキャッシュの継続的なクエリーを作成できます。

手順

  1. Query オブジェクトを作成します。
  2. 適切なメソッドを呼び出して、キャッシュの ContinuousQuery オブジェクトを取得します。

    • リモートキャッシュ: org.infinispan.client.hotrod.Search.getContinuousQuery(RemoteCache<K, V> cache)
    • 埋め込みキャッシュ: org.infinispan.query.Search.getContinuousQuery(Cache<K, V> cache)
  3. 以下のようにクエリーと ContinuousQueryListener オブジェクトを登録します。

    continuousQuery.addContinuousQueryListener(query, listener);
  4. 継続的なクエリーが必要なくなった場合は、以下のようにリスナーを削除します。

    continuousQuery.removeContinuousQueryListener(listener);

継続的なクエリーの例

以下のコード例は、組み込みキャッシュを使用した単純な継続的なクエリーを示しています。

この例では、年齢が 21 歳未満の Person インスタンスがキャッシュに追加されると、リスナーは通知を受け取ります。これらの Person インスタンスも matches マップに追加されます。エントリーがキャッシュから削除されるか、その年齢が 21 以上になると、matches マップから削除されます。

継続的クエリーの登録

import org.infinispan.query.api.continuous.ContinuousQuery;
import org.infinispan.query.api.continuous.ContinuousQueryListener;
import org.infinispan.query.Search;
import org.infinispan.query.dsl.QueryFactory;
import org.infinispan.query.dsl.Query;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

[...]

// We have a cache of Person objects.
Cache<Integer, Person> cache = ...

// Create a ContinuousQuery instance on the cache.
ContinuousQuery<Integer, Person> continuousQuery = Search.getContinuousQuery(cache);

// Define a query.
// In this example, we search for Person instances under 21 years of age.
QueryFactory queryFactory = Search.getQueryFactory(cache);
Query query = queryFactory.create("FROM Person p WHERE p.age < 21");

final Map<Integer, Person> matches = new ConcurrentHashMap<Integer, Person>();

// Define the ContinuousQueryListener.
ContinuousQueryListener<Integer, Person> listener = new ContinuousQueryListener<Integer, Person>() {
    @Override
    public void resultJoining(Integer key, Person value) {
        matches.put(key, value);
    }

    @Override
    public void resultUpdated(Integer key, Person value) {
        // We do not process this event.
    }

    @Override
    public void resultLeaving(Integer key) {
        matches.remove(key);
    }
};

// Add the listener and the query.
continuousQuery.addContinuousQueryListener(query, listener);

[...]

// Remove the listener to stop receiving notifications.
continuousQuery.removeContinuousQueryListener(listener);

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.