3.2. RemoteCache API
コレクションメソッド keySet
、entrySet
、および values
はリモートキャッシュによってサポートされます。つまり、すべてのメソッドが RemoteCache
に戻されるということです。これは、さまざまなキー、エントリー、または値を遅延して取得でき、ユーザーが望まない場合にそれらすべてを一度にクライアントメモリーに保存する必要がないため便利です。
これらのコレクションは、add
および addAll
はサポートされていませんが、他のすべてのメソッドはサポートされているという Map
仕様に準拠しています。
注記の 1 つとして、Iterator.remove
メソッドおよび Set.remove
メソッドまたは Collection.remove
メソッドには、操作するサーバーに 1 つ以上のラウンドトリップが必要です。RemoteCache Javadoc を参照して、これらのメソッドおよび他のメソッドの詳細を確認できます。
イテレーターの使用
これらのコレクションの iterator メソッドは、以下で説明されている retrieveEntries
を内部で使用します。retrieveEntries
がバッチサイズの引数を取る場合。これをイテレータに提供する方法はありません。そのため、バッチサイズは、システムプロパティー infinispan.client.hotrod.batch_size
で設定するか、または RemoteCacheManager
の設定時に ConfigurationBuilder で設定することができます。
また、返される retrieveEntries
イテレーターは Closeable
です。keySet
、entrySet
、および values
からのイテレーターは AutoCloseable
バリアントを返します。したがって、これらの Iterator の使用が終了したら、常に閉じる必要があります。
try (CloseableIterator<Map.Entry<K, V>> iterator = remoteCache.entrySet().iterator()) { }
バッキングコレクションではなく、ディープコピーが必要な場合
以前のバージョンの RemoteCache
では、keySet
のディープコピーの取得が許可されました。これは新しいバッキングマップでも可能です。コンテンツを自分でコピーするだけです。また、これまでサポートしていなかった entrySet
および values
を使用してこれを行うこともできます。
Set<K> keysCopy = remoteCache.keySet().stream().collect(Collectors.toSet());
3.2.1. サポートされていないメソッド
Data Grid の RemoteCache
API は、Cache
API で利用可能なすべてのメソッドをサポートしておらず、サポート対象外のメソッドが呼び出されると UnsupportedOperationException
を出力します。
これらのメソッドのほとんどはリモートキャッシュ (リスナー管理操作など) では意味を持ちません。または、ローカルキャッシュでサポートされていないメソッドにも対応しません (例: containsValue)。
ConcurrentMap
から継承された特定のアトミック操作も、RemoteCache
API ではサポートされていません。以下に例を示します。
boolean remove(Object key, Object value); boolean replace(Object key, Object value); boolean replace(Object key, Object oldValue, Object value);
ただし、RemoteCache
は、値オブジェクト全体ではなく、ネットワーク経由でバージョン識別子を送信する、これらのアトミック操作の代替バージョンメソッドを提供します。