Coherence for C++ APIのドキュメントは、『Oracle Coherence C++ APIリファレンス』、およびCoherence for C++のdoc
ディレクトリで参照できます。
この章の内容は次のとおりです。
CacheFactory
は、NamedCache
インスタンスを取得および解放する静的メソッドを提供します。NamedCache
は、クラスタのメンバー間で共有しているリソースのマップです。QueryMap
は、Map
クラスに問合せ機能を追加して拡張したものと考えることができます。 ObservableMap
は、キャッシュの変更をリスニングする機能をアプリケーションに提供します。InvocableMap
は、エントリ別処理と集計操作の両方の起動対象とすることができるキャッシュです。Filter
APIは、結果をフィルタ処理し、指定の基準に一致するオブジェクトのみを返す機能を提供します。InvocableMap
にあるエントリの一部のサブセットに対して実行し、集計結果を得るように指定できる処理を表します。親トピック: C++ Extendクライアントの作成
CacheFactory
は、NamedCache
インスタンスを取得および解放する静的メソッドを提供します。
NamedCache::Handle getCache(String::View vsName)
: 指定の名前を持ち、リモートCoherenceクラスタで稼働しているNamedCache
に対応するNamedCache
実装を取得します。
void releaseCache(NamedCache::Handle hCache)
: キャッシュの指定のインスタンスに関連付けられているローカル・リソースをすべて解放します。解放したキャッシュは使用できなくなります。ただし、そのキャッシュの内容は影響を受けません。
void destroyCache(NamedCache::Handle hCache)
: Coherenceクラスタ全体にある指定のキャッシュを破棄します。
この項には次のトピックが含まれます:
NamedCache
は、クラスタのメンバー間で共有しているリソースのマップです。NamedCache
は、キャッシュおよびサービスの名前の取得とキャッシュの解放または破棄に使用する、次のメソッドを提供します。String::View getCacheName()
: キャッシュの名前をString
として返します。
CacheService::Handle getCacheService()
: このNamedCache
が属するCacheService
へのハンドルを返します。
bool isActive()
: このNamedCache
がアクティブかどうかを指定します。
void release()
: NamedCache
のこのインスタンスに関連付けられているローカル・リソースを解放します。リソースを解放したキャッシュは使用できなくなりますが、その内容は影響を受けません。
void destroy()
: NamedCache
のこのインスタンスを解放し、破棄します。
NamedCache
インタフェースは、QueryMap
、InvocableMap
、ConcurrentMap
、CacheMap
、ObservableMap
の各インタフェースの拡張でもあります。
QueryMap
は、Map
クラスに問合せ機能を追加して拡張したものと考えることができます。 この機能により、様々なフィルタを使用してキャッシュを問い合せることができます。「Filter」を参照してください。Set::View
keySet(Filter::View vFilter)
: このマップにあるキーのうち、フィルタで指定した基準を満足するエントリを対象とした一連のキーを返します。
Set::View entrySet(Filter::View vFilter)
: このマップにあるエントリのうち、フィルタで指定した基準を満足する一連のエントリを返します。返されたセットにある各要素は、Map::Entry
オブジェクトです。
Set::View entrySet(Filter::View vFilter, Comparator::View vComparator)
: このマップにあるエントリのうち、フィルタで指定した基準を満足する一連のエントリを返します。返されたセットにある各要素は、Map::Entry
オブジェクトです。このentrySet
を使用すると、指定のComparator
または自然の順番でソートされたエントリ値に基づいて、イテレータがこのセットを昇順で確認していることがより確実となります。
さらに、QueryMap
クラスには、索引の追加機能と削除機能があります。索引を使用すると、キャッシュに格納されている値とそれに対応するキーが関連付けられます。また、keySet
メソッドとentrySet
メソッドのパフォーマンスが大幅に向上します。
void
addIndex
(ValueExtractor::View vExtractor, boolean_t fOrdered, Comparator::View vComparator)
: このQueryMap
に索引を追加します。索引により、この索引付きのMap
に格納されている値(またはそれらの値の属性)と、同じMap
の中でそれらの値に対応するキーを関連付けることができ、keySet
メソッドとentrySet
メソッドのパフォーマンスが向上します。
void removeIndex(ValueExtractor::View vExtractor)
: このQueryMap
から索引を削除します。
「キャッシュの問合せ(C++)」および「単純な問合せの実行」を参照してください。
ObservableMap
は、キャッシュの変更をリスニングする機能をアプリケーションに提供します。ObservableMap
を実装したアプリケーションでは、キーとフィルタのリスナーを追加して、あらゆるキャッシュで発生したイベントを受信できます。これは、そのキャッシュがローカル、パーティション、ニア、レプリケーションのいずれであっても可能であり、またリードスルー、ライトスルー、ライトビハインド、オーバーフロー、ディスク記憶域などを使用しているかどうかに関係なく可能です。ObservableMap
には、これらのリスナーを削除するメソッドもあります。void addKeyListener(MapListener::Handle hListener, Object::View vKey, bool fLite)
: 特定のキーのマップ・リスナーを追加します。
void removeKeyListener(MapListener::Handle hListener, Object::View vKey)
: 特定のキーに関するイベントに以前サインアップしたマップ・リスナーを削除します。
void addFilterListener(MapListener::Handle hListener, Filter::View vFilter = NULL, bool fLite = false)
: フィルタによる評価に基づいてイベントを受信するマップ・リスナーを追加します。
void removeFilterListener(MapListener::Handle hListener, Filter::View vFilter = NULL)
: フィルタによる評価に基づいてイベントに以前サインアップしたマップ・リスナーを削除します。
「すべてのイベントのサインアップ」を参照してください。
InvocableMap
は、エントリ別処理と集計操作の両方の起動対象とすることができるキャッシュです。キャッシュの内容に対する操作は、キャッシュによって(したがって、特定の領域に制限されたキャッシュの内容の中で)実行できます。このメソッドは処理を特定の領域に制限できるため、分散環境で特に効率的です。つまり、キャッシュの内容に対する処理を、その処理の対象となるエントリを管理している場所に移動できます。「入力プロセッサ」および「エントリ・アグリゲータ」を参照してください。Object::Holder invoke(Object::View vKey, EntryProcessor::Handle hAgent)
: 渡されたキーで指定されたエントリ(Entry
)を対象として、渡されたプロセッサ(EntryProcessor
)を起動し、その起動の結果を返します。
Map::View invokeAll(Collection::View vCollKeys, EntryProcessor::Handle hAgent)
: 渡されたキーで指定された複数のエントリ(Entry
オブジェクト)のそれぞれを対象として、渡されたプロセッサ(EntryProcessor
)を起動し、それぞれの起動の結果を返します。
Map::View invokeAll(Filter::View vFilter, EntryProcessor::Handle hAgent)
: 指定したフィルタで選択された複数のエントリ(Entry
オブジェクト)のそれぞれを対象として、渡されたプロセッサ(EntryProcessor
)を起動し、それぞれの起動の結果を返します。
Object::Holder aggregate(Collection::View vCollKeys, EntryAggregator::Handle hAgent)
: 渡されたキーで指定されたエントリを対象として集計操作を実行します。
Object::Holder aggregate(Filter::View vFilter, EntryAggregator::Handle hAgent)
: 指定したフィルタで選択されたエントリを対象として集計操作を実行します。
Filter
APIは、結果をフィルタ処理し、指定の基準に一致するオブジェクトのみを返す機能を提供します。すべてのフィルタではFilterを実装する必要があります。多くの場合、フィルタをQueryMap
APIとともに使用して、指定の基準に一致するエントリをキャッシュに問い合せます。「QueryMap」を参照してください。bool evaluate(Object::View v)
: 指定のオブジェクトにテストを適用し、テストに合格した場合はtrue、不合格の場合はfalseを返します。
Coherence for C++では、coherence::util::filter
ネームスペースに、実用的なFilter
実装が数多く用意されています。使用頻度が高いフィルタを次にいくつか示します。
EqualsFilter
は、等価性のテストに使用します。次の例では、オブジェクトが5に等しいことをテストするEqualsFilter
を作成します。
EqualsFilter::View vEqualsFilter = EqualsFilter::create(IdentityExtractor::getInstance(), Integer32::valueOf(5));
GreaterEqualsFilter
は、「以上」条件のテストに使用します。次の例では、オブジェクトの値 >=
55
であることをテストするGreaterEqualsFilter
を作成します。
GreaterEqualsFilter::View vGreaterEqualsFilter = GreaterEqualsFilter::create(IdentityExtractor::getInstance(), Integer32::valueOf(55));
LikeFilter
は、パターンの照合に使用します。次の例では、オブジェクトの文字列表現が"Belg
"で始まることをテストするLikeFilter
を作成します。
LikeFilter::View vLikeFilter = LikeFilter::create(IdentityExtractor::getInstance(), "Belg%");
フィルタの中には、2つを組み合せることで複合条件を作成できるものがあります。AndFilter
は、2つのフィルタを組み合せて「AND
」条件を作成する場合に使用します。次の例では、オブジェクトの値が10より大きく20より小さいことをテストするAndFilter
を作成します。
AndFilter::View vAndFilter = AndFilter::create( GreaterFilter::create(IdentityExtractor::getInstance(), Integer32::valueOf(10)), LessFilter::create(IdentityExtractor::getInstance(), Integer32::valueOf(20)));
OrFilter
は、2つのフィルタを組み合せてOR
条件を作成します。次の例では、オブジェクトの値が10
より小さいか、または20
より大きいことをテストするOrFilter
を作成します。
OrFilter::View vOrFilter = OrFilter::create( LessFilter::create(IdentityExtractor::getInstance(), Integer32::valueOf(10)), GreaterFilter::create(IdentityExtractor::getInstance(), Integer32::valueOf(20)));
すべてのエクストラクタではValueExtractor
を実装する必要があります。
注意:
実用的なすべてのエクストラクタ実装では、オブジェクトのシリアル化可能な状態のみに基づくようにhashCode
関数とequals
関数を明示的に実装することも必要です。
Object::Holder extract(Object::Holder ohTarget)
: 渡されたオブジェクトから値を抽出します。
bool equals(Object::View v)
: ValueExtractor
と別のオブジェクトを比較し、両方が等価かどうかを判断します。2つのValueExtractor
オブジェクトであるve1
とve2
は、v
のあらゆる値について、ve1
->extract(v)
とve2->extract(v)
が等しい場合にのみ、等価であると見なされます。
size32_t hashCode()
: 一般的なObject#hashCode()
の規定に従って、ValueExtractor
オブジェクトのハッシュ値を決定します。
Coherence for C++には次のエクストラクタがあります。
ChainedExtractor
: エクストラクタの配列に基づく複合的なValueExtractor
実装です。配列内のエクストラクタは左から右に順次適用され、前のエクストラクタの結果が次のエクストラクタのターゲット・オブジェクトとなります。
ComparisonValueExtractor
: 同じターゲットから抽出した2つの値の比較結果を返します。
IdentityExtractor
: 渡された値から何も抽出せず、その値そのものを返す単純な実装です。
KeyExtractor
: 値ではなく主要なオブジェクトに対して問合せを実行する必要があることを示す、特殊な目的の実装です。
MultiExtractor
: エクストラクタの配列に基づく複合的なValueExtractor実装です。配列内のエクストラタはすべて、同じターゲット・オブジェクトに適用され、抽出した値のリストが抽出結果となります。
ReflectionExtractor
: 指定したオブジェクトのプロパティから値を抽出します。
「問合せの概念の理解」にあるC++の例を参照してください。
入力プロセッサは、キャッシュ内のエントリ・オブジェクトに対して作動するエージェントです。
すべての入力プロセッサではEntryProcessor
を実装する必要があります。
Object::Holder process(InvocableMap::Entry::Handle hEntry)
: 指定したエントリを処理します。
Map::View processAll(Set::View vSetEntries)
: エントリのコレクションを処理します。
Coherence for C++では、coherence::util::processor
ネームスペースに、EntryProcessor
実装がいくつか用意されています。
Coherence Javaディストリビューションの一部であるC++の例を参照してください。
InvocableMap
にあるエントリの一部のサブセットに対して実行し、集計結果を得るように指定できる処理を表します。集計の一般的な例として、最小、最大、合計、平均などの関数があります。ただし、集計の概念は、エントリのグループを評価して1つの答えを算出する必要のある任意のプロセスに適用されます。集計は、分散環境などで並列に実行する機能を明示的に備えています。すべてのアグリゲータではEntryAggregator
インタフェースを実装する必要があります。
Object::Holder aggregate(Collection::View vCollKeys)
: エントリのコレクションを処理して集計結果を生成します。
Coherence for C++では、coherence::util::aggregator
ネームスペースに、EntryAggregator
実装がいくつか用意されています。
注意:
キャッシュした値オブジェクト同様、Filter
、ValueExtractor
、EntryProcessor
およびEntryAggregator
のすべてのカスタム実装クラスは、C++アプリケーションのPOFコンテキストおよびクライアントが接続されているクラスタ側ノードのPOFコンテキストに正しく登録する必要があります。したがって、カスタムのC++型の対応するJava実装を、クラスタ側ノードで作成、コンパイルおよびデプロイする必要があります。このようなカスタム型を実際に実行するのは、C++の実装ではなくJavaの実装であることに注意してください。「統合オブジェクトの構築(C++)」を参照してください。