All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.cache.ICache Maven / Gradle / Ivy

/*
 * Copyright (c) 2008-2018, Hazelcast, Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.hazelcast.cache;

import com.hazelcast.cache.impl.event.CachePartitionLostListener;
import com.hazelcast.core.ICompletableFuture;
import com.hazelcast.core.PrefixedDistributedObject;

import javax.cache.Cache;
import javax.cache.expiry.ExpiryPolicy;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * This {@link com.hazelcast.cache.ICache} interface is the {@link javax.cache.Cache} extension offered by
 * Hazelcast JCache.
* In addition to the standard set of JCache methods defined in the JSR 107 specification, Hazelcast provides * additional operations to support a broader range of programing styles.

* * There are three different types of extensions methods provided: *

    *
  • asynchronous version of typical blocking cache operations (due to remote calls),
  • *
  • typical cache operations, providing a custom {@link javax.cache.expiry.ExpiryPolicy} parameter * to apply a special expiration to that specific operation, and
  • *
  • common collection-like operations (e.g. {@link #size()}) or typical Hazelcast-list additions * (e.g. {@link #destroy()}).
  • *

* * To take advantage of the methods of this interface, the {@link javax.cache.Cache} instance needs to be * unwrapped as defined in the JSR 107 standard ({@link javax.cache.Cache#unwrap(Class)}) by providing the * {@link com.hazelcast.cache.ICache} interface parameter. *

 *   ICache<Key , Value> unwrappedCache =  cache.unwrap( ICache.class );
 * 
* The unwrapped cache instance can now be used for both ICache and Cache operations.

* * Asynchronous operations:
* For most of the typical operations, Hazelcast provides asynchronous versions to program in a more reactive * styled way. All asynchronous operations follow the same naming pattern: the operation's name from JCache * extended by the term Async; for example, the asynchronous version of {@link javax.cache.Cache#get(Object)} * is {@link #getAsync(Object)}.
* These methods return an {@link com.hazelcast.core.ICompletableFuture} that can be used to get the result by * either implementing a callback based on {@link com.hazelcast.core.ExecutionCallback}, or waiting for the operation to be * completed in a blocking fashion {@link java.util.concurrent.Future#get()} or * {@link java.util.concurrent.Future#get(long, java.util.concurrent.TimeUnit)}.

* In a reactive way: *

 *   ICompletableFuture<Value> future = unwrappedCache.getAsync( "key-1" ) ;
 *   future.andThen( new ExecutionCallback() {
 *     public void onResponse( Value value ) {
 *         System.out.println( value );
 *     }
 *
 *     public void onFailure( Throwable throwable ) {
 *         throwable.printStackTrace();
 *     }
 *   } );
 * 
* Or in a blocking way: *
 *   ICompletableFuture<Value> future = unwrappedCache.getAsync( "key-1" ) ;
 *   Value value = future.get();
 *   System.out.println( value );
 * 

* * Custom ExpirePolicy:
* For most of the typical operations, Hazelcast provides overloaded versions with an additional * {@link javax.cache.expiry.ExpiryPolicy} parameter to configure a different expiration policy from the * default one set in the {@link javax.cache.configuration.CompleteConfiguration} passed to the cache * creation. Therefore the {@link javax.cache.Cache#put(Object, Object)} operation has an overload * {@link com.hazelcast.cache.ICache#put(Object, Object, javax.cache.expiry.ExpiryPolicy)} to pass in the * special policy.

* Important: The overloads use an instance of {@link javax.cache.expiry.ExpiryPolicy}, not * a {@link javax.cache.configuration.Factory} instance as is used in the configuration. *

 *   unwrappedCache.put( "key", "value", new AccessedExpiryPolicy( Duration.ONE_DAY ) );
 * 
* *

* Split-brain *

* Behaviour of {@link ICache} under split-brain scenarios should be taken into account when using this * data structure. During a split, each partitioned cluster will either create a brand new {@link ICache} * or it will continue to use the primary or back-up version. *

* As a defensive mechanism against such inconsistency, consider using the in-built * * split-brain protection for {@link ICache}. Using this functionality it is possible to restrict operations in smaller * partitioned clusters. It should be noted that there is still an inconsistency window between the time of * the split and the actual detection. Therefore using this reduces the window of inconsistency but can never * completely eliminate it. *

* * @param the type of key. * @param the type of value. * @see javax.cache.Cache * @since 3.3.1 */ public interface ICache extends javax.cache.Cache, PrefixedDistributedObject { /** * Asynchronously retrieves the mapped value of the given key using a custom * {@link javax.cache.expiry.ExpiryPolicy}. If no mapping exists null is returned. *

* If the cache is configured for read-through operation mode, the underlying * configured {@link javax.cache.integration.CacheLoader} might be called to retrieve * the value of the key from any kind of external resource. *

* The resulting {@link com.hazelcast.core.ICompletableFuture} instance may throw a * {@link java.lang.ClassCastException} as the operations result if the {@link javax.cache.Cache} * is configured to perform runtime-type-checking, and the key or value types are incompatible * with those that have been configured for the {@link javax.cache.Cache}. * * @param key The key whose associated value is to be returned. * @return ICompletableFuture retrieve the value assigned to the given key. * @throws java.lang.NullPointerException if given key is null * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()} * @see javax.cache.Cache#get(K) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture getAsync(K key); /** * Asynchronously gets an entry from cache using a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* If the cache is configured for read-through operation mode, the underlying * configured {@link javax.cache.integration.CacheLoader} might be called to retrieve * the value of the key from any kind of external resource. *

* The resulting {@link com.hazelcast.core.ICompletableFuture} instance may throw a * {@link java.lang.ClassCastException} as the operations result if the {@link javax.cache.Cache} * is configured to perform runtime-type-checking, and the key or value types are incompatible * with those that have been configured for the {@link javax.cache.Cache}. * * @param key The key whose associated value is to be returned. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #getAsync(Object)}. * @return ICompletableFuture retrieve the value assigned to the given key. * @throws java.lang.NullPointerException if given key is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @see javax.cache.Cache#get(K) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture getAsync(K key, ExpiryPolicy expiryPolicy); /** * Asynchronously associates the specified value with the specified key in the cache. *

* In case a previous assignment already exists, the previous value is overridden by * the new given value. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose associated value is to be returned. * @param value The value to be associated with the specified key. * @return ICompletableFuture notify when the operation succeeds. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#put(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture putAsync(K key, V value); /** * Asynchronously associates the specified value with the specified key in the cache using * a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* In case a previous assignment already exists, the previous value is overridden by * the new given value. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose associated value is to be returned. * @param value The value to be associated with the specified key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #putAsync(Object, Object)}. * @return ICompletableFuture notify when the operation succeeds. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#put(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture putAsync(K key, V value, ExpiryPolicy expiryPolicy); /** * Asynchronously associates the specified key with the given value if and only if there is not yet * a mapping defined for the specified key. *

* This is equivalent to: *

     *   if (!cache.containsKey(key)) {}
     *     cache.put(key, value);
     *     return true;
     *   } else {
     *     return false;
     *   }
     * 
* except that the action is performed atomically. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key that is associated with the specified value. * @param value The value to which the specified key is associated. * @return ICompletableFuture notify if a previous value was assigned with the key * @throws java.lang.NullPointerException if the given key or value is null * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()} * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache} * @see javax.cache.Cache#putIfAbsent(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture putIfAbsentAsync(K key, V value); /** * Asynchronously associates the specified key with the given value if and only if there is not yet * a mapping defined for the specified key. * using a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* This is equivalent to: *

     *   if (!cache.containsKey(key)) {}
     *     cache.put(key, value);
     *     return true;
     *   } else {
     *     return false;
     *   }
     * 
* except that the action is performed atomically. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key that is associated with the specified value. * @param value The value to which the specified key is associated. * @param expiryPolicy custom expiry policy for this operation, * a null value is equivalent to * {@link #putIfAbsentAsync(Object, Object)} * @return ICompletableFuture notify if a previous value was assigned with the key * @throws java.lang.NullPointerException if the given key or value is null * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()} * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache} * @see javax.cache.Cache#putIfAbsent(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture putIfAbsentAsync(K key, V value, ExpiryPolicy expiryPolicy); /** * Asynchronously associates the specified value with the specified key in this cache, * returning an existing value if one existed. *

* In case a previous assignment already exists, the previous value is overridden by * the new given value and the previous value is returned to the caller. This is * equivalent to the {@link java.util.Map#put(Object, Object)} operation. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose associated value is to be returned. * @param value The value that is associated with the specified key. * @return ICompletableFuture retrieve a possible previously assigned value for the given key. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#getAndPut(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture getAndPutAsync(K key, V value); /** * Asynchronously associates the specified value with the specified key in this cache, * returning an existing value if one existed using a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* In case a previous assignment already exists, the previous value is overridden by * the new given value and the previous value is returned to the caller. This is * equivalent to the {@link java.util.Map#put(Object, Object)} operation. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose associated value is to be returned. * @param value The value to associate with the specified key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #getAndPutAsync(Object, Object)}. * @return ICompletableFuture retrieve a possible previously assigned value for the given key. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#getAndPut(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture getAndPutAsync(K key, V value, ExpiryPolicy expiryPolicy); /** * Asynchronously removes the mapping for a key from this cache if it is present. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. *

* The resulting {@link com.hazelcast.core.ICompletableFuture} instance may throw a * {@link java.lang.ClassCastException} as the operations result if the {@link javax.cache.Cache} * is configured to perform runtime-type-checking, and the key or value types are incompatible * with those that have been configured for the {@link javax.cache.Cache}. * * @param key The key whose mapping is to be removed. * @return ICompletableFuture notify if mapping could be removed or not. * @throws java.lang.NullPointerException if the given key is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @see javax.cache.Cache#remove(K) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture removeAsync(K key); /** * Asynchronously removes the mapping for the given key if and only if the * currently mapped value equals to the value of oldValue. *

* This is equivalent to: *

     *   if (cache.containsKey(key) && equals(cache.get(key), oldValue) {
     *     cache.remove(key);
     *     return true;
     *   } else {
     *     return false;
     *   }
     * 
* except that the action is performed atomically. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. *

* The resulting {@link com.hazelcast.core.ICompletableFuture} instance may throw a * {@link java.lang.ClassCastException} as the operations result if the {@link javax.cache.Cache} * is configured to perform runtime-type-checking, and the key or value types are incompatible * with those that have been configured for the {@link javax.cache.Cache}. * * @param key The key whose mapping is to be removed if the mapped value is oldValue. * @param oldValue The value expected to be associated with the specified key. * @return ICompletableFuture notify if mapping could be removed or not. * @throws java.lang.NullPointerException if the given key or oldValue is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @see javax.cache.Cache#remove(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture removeAsync(K key, V oldValue); /** * Asynchronously removes the entry for a key and returns the previously assigned value or null * if no value was assigned. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. *

* The resulting {@link com.hazelcast.core.ICompletableFuture} instance may throw a * {@link java.lang.ClassCastException} as the operations result if the {@link javax.cache.Cache} * is configured to perform runtime-type-checking, and the key or value types are incompatible * with those that have been configured for the {@link javax.cache.Cache}. * * @param key The key to be removed and whose associated value is to be returned. * @return ICompletableFuture retrieve a possible previously assigned value for the removed key. * @throws java.lang.NullPointerException if the given key is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @see javax.cache.Cache#getAndRemove(K) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture getAndRemoveAsync(K key); /** * Asynchronously replaces the assigned value of the given key by the specified value. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose associated value is to be replaced. * @param value The new value to be associated with the specified key. * @return ICompletableFuture notify if the operation succeeds or not. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#replace(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture replaceAsync(K key, V value); /** * Asynchronously replaces the assigned value of the given key by the specified value * using a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose assigned value is replaced by the specified value. * @param value The specified value to be associated with the given key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #replaceAsync(Object, Object)} * @return ICompletableFuture notify if the operation succeeds or not. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#replace(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture replaceAsync(K key, V value, ExpiryPolicy expiryPolicy); /** * Asynchronously replaces the currently assigned value for the given key with the specified * newValue if and only if the currently assigned value equals the value of * oldValue. *

* This is equivalent to: *

     *   if (cache.containsKey(key) && equals(cache.get(key), oldValue) {
     *     cache.put(key, newValue);
     *     return true;
     *   } else {
     *     return false;
     *   }
     * 
* except that the action is performed atomically. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. *

* The resulting {@link com.hazelcast.core.ICompletableFuture} instance may throw a * {@link java.lang.ClassCastException} as the operations result if the {@link javax.cache.Cache} * is configured to perform runtime-type-checking, and the key or value types are incompatible * with those that have been configured for the {@link javax.cache.Cache}. * * @param key The key that will have its assigned value replaced. * @param oldValue The old value expected to be associated with the specified key. * @param newValue The new value to be associated with the specified key. * @return ICompletableFuture notify if the operation succeeds or not. * @throws java.lang.NullPointerException if the given key, oldValue or newValue is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()} * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache} * @see javax.cache.Cache#replace(K, V, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture replaceAsync(K key, V oldValue, V newValue); /** * Asynchronously replaces the currently assigned value for the given key with the specified * newValue if and only if the currently assigned value equals the value of * oldValue using a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* This is equivalent to: *

     *   if (cache.containsKey(key) && equals(cache.get(key), oldValue) {
     *     cache.put(key, newValue);
     *     return true;
     *   } else {
     *     return false;
     *   }
     * 
* except that the action is performed atomically. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. *

* The resulting {@link com.hazelcast.core.ICompletableFuture} instance may throw a * {@link java.lang.ClassCastException} as the operations result if the {@link javax.cache.Cache} * is configured to perform runtime-type-checking, and the key or value types are incompatible * with those that have been configured for the {@link javax.cache.Cache}. * * @param key The key that will have its assigned value replaced. * @param oldValue The old value expected to be associated with the specified key. * @param newValue The new value to be associated with the specified key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #replaceAsync(Object, Object, Object)}. * @return ICompletableFuture to get notified if the operation succeed or not. * @throws java.lang.NullPointerException if the given key, oldValue or newValue is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#replace(K, V, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture replaceAsync(K key, V oldValue, V newValue, ExpiryPolicy expiryPolicy); /** * Asynchronously replaces the assigned value of the given key by the specified value and returns * the previously assigned value. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose value is replaced. * @param value The new value to be associated with the specified key. * @return ICompletableFuture to retrieve a possible previously assigned value for the given key. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#getAndReplace(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture getAndReplaceAsync(K key, V value); /** * Asynchronously replaces the assigned value of the given key by the specified value using a * custom {@link javax.cache.expiry.ExpiryPolicy} and returns the previously assigned value. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose value is replaced. * @param value The new value to be associated with the specified key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #getAndReplace(Object, Object)} * @return ICompletableFuture to retrieve a possible previously assigned value for the given key. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#getAndReplace(K, V) * @see com.hazelcast.core.ICompletableFuture */ ICompletableFuture getAndReplaceAsync(K key, V value, ExpiryPolicy expiryPolicy); /** * Retrieves the mapped value of the given key using a custom {@link javax.cache.expiry.ExpiryPolicy}. * If no mapping exists null is returned. *

* If the cache is configured for read-through operation mode, the underlying * configured {@link javax.cache.integration.CacheLoader} might be called to retrieve * the value of the key from any kind of external resource. * * @param key The key whose mapped value is to be returned. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #get(Object)}. * @return The value assigned to the given key, or null if not assigned. * @throws java.lang.NullPointerException if the given key is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache} * @see javax.cache.Cache#get(K) */ V get(K key, ExpiryPolicy expiryPolicy); /** * Gets a collection of entries from the cache with custom expiry policy, returning them as * {@link Map} of the values associated with the set of keys requested. *

* If the cache is configured for read-through operation mode, the underlying * configured {@link javax.cache.integration.CacheLoader} might be called to retrieve * the values of the keys from any kind of external resource. * * @param keys The keys whose associated values are to be returned. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #getAll(java.util.Set)}. * @return A map of entries that were found for the given keys. Keys not found * in the cache are not in the returned map. * @throws java.lang.NullPointerException if the given keys are null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()} * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#getAll(java.util.Set) */ Map getAll(Set keys, ExpiryPolicy expiryPolicy); /** * Associates the specified value with the specified key in the cache using a custom {@link javax.cache.expiry.ExpiryPolicy}. * * @param key The key that has the specified value associated with it. * @param value The value to be associated with the key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #put(Object, Object)}. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#put(K, V) */ void put(K key, V value, ExpiryPolicy expiryPolicy); /** * Associates the specified value with the specified key in this cache using a custom {@link javax.cache.expiry.ExpiryPolicy}, * returning an existing value if one existed. * * @param key The key that has the specified value associated with it. * @param value The value to be associated with the key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #getAndPut(Object, Object)}. * @return The value previously assigned to the given key, or null if not assigned. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#getAndPut(K, V) */ V getAndPut(K key, V value, ExpiryPolicy expiryPolicy); /** * Copies all of the entries from the given map to the cache using a custom * {@link javax.cache.expiry.ExpiryPolicy}. *

* Puts of single entries happen atomically but there is no transactional guarantee over * the complete putAll operation. If other concurrent operations modify or remove * all or single values of the provided map, the result is undefined. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the values of the keys to any kind of external resource. * * @param map The mappings to be stored in this cache. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #putAll(java.util.Map)}. * @throws java.lang.NullPointerException if the given map is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#putAll(java.util.Map) */ void putAll(java.util.Map map, ExpiryPolicy expiryPolicy); /** * Associates the specified key with the given value if and only if there is not yet * a mapping defined for the specified key. *

* This is equivalent to: *

     *   if (!cache.containsKey(key)) {}
     *     cache.put(key, value);
     *     return true;
     *   } else {
     *     return false;
     *   }
     * 
* except that the action is performed atomically. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key that is associated with the specified value. * @param value The value that has the specified key associated with it. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #putIfAbsent(Object, Object)}. * @return true if a value was set, false otherwise. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#putIfAbsent(K, V) */ boolean putIfAbsent(K key, V value, ExpiryPolicy expiryPolicy); /** * Atomically replaces the currently assigned value for the given key with the specified * newValue if and only if the currently assigned value equals the value of * oldValue using a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* This is equivalent to: *

     *   if (cache.containsKey(key) && equals(cache.get(key), oldValue) {
     *     cache.put(key, newValue);
     *     return true;
     *   } else {
     *     return false;
     *   }
     * 
* except that the action is performed atomically. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key with the value to be replaced. * @param oldValue The old value expected to be associated with the specified key. * @param newValue The new value to be associated with the specified key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #replace(Object, Object, Object)}. * @return true if a value was replaced, false otherwise. * @throws java.lang.NullPointerException if given key, oldValue or newValue is null * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#replace(K, V, V) */ boolean replace(K key, V oldValue, V newValue, ExpiryPolicy expiryPolicy); /** * Atomically replaces the assigned value of the given key by the specified value * using a custom {@link javax.cache.expiry.ExpiryPolicy}. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose value is replaced. * @param value The new value to be associated with the specified key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #replace(Object, Object)} * @return true if a value was replaced, false otherwise. * @throws java.lang.NullPointerException if the given key, oldValue or newValue is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#replace(K, V) */ boolean replace(K key, V value, ExpiryPolicy expiryPolicy); /** * Atomically replaces the assigned value of the given key by the specified value using a * custom {@link javax.cache.expiry.ExpiryPolicy} and returns the previously assigned value. *

* If the cache is configured for write-through operation mode, the underlying * configured {@link javax.cache.integration.CacheWriter} might be called to store * the value of the key to any kind of external resource. * * @param key The key whose value is replaced. * @param value The new value to be associated with the specified key. * @param expiryPolicy The custom expiry policy for this operation, * a null value is equivalent to {@link #getAndReplace(Object, Object)}. * @return The old value previously assigned to the given key. * @throws java.lang.NullPointerException if the given key or value is null. * @throws javax.cache.CacheException if any exception * happens while invoking the request, other exceptions are wrapped. * @throws IllegalStateException if the cache is {@link #isClosed()}. * @throws ClassCastException if the implementation is configured to perform * runtime-type-checking, and the key or value * types are incompatible with those that have been * configured for the {@link javax.cache.Cache}. * @see javax.cache.Cache#getAndReplace(K, V) */ V getAndReplace(K key, V value, ExpiryPolicy expiryPolicy); /** * Total entry count. * * @return total entry count */ int size(); /** * Closes the cache. Clears the internal content and releases any resource. * * @see javax.cache.CacheManager#destroyCache(String) */ void destroy(); /** * Determines whether this Cache instance has been destroyed. * * @return true if this Cache instance is destroyed; false if it is still open. */ boolean isDestroyed(); /** * Directly access local Cache Statistics. * * @return CacheStatistics instance or an empty statistics if not enabled. */ CacheStatistics getLocalCacheStatistics(); /** * Adds a CachePartitionLostListener. *

* The addPartitionLostListener returns a registration ID. This ID is needed to remove the * CachePartitionLostListener using the * {@link #removePartitionLostListener(String)} method. *

* There is no check for duplicate registrations, so if you register the listener twice, it will get events twice. * IMPORTANT: Please @see com.hazelcast.partition.PartitionLostListener for weaknesses. * IMPORTANT: Listeners registered from HazelcastClient may miss some of the cache partition lost events due * to design limitations. * * @param listener the added CachePartitionLostListener. * @return returns the registration ID for the CachePartitionLostListener. * @throws java.lang.NullPointerException if listener is null. * @see #removePartitionLostListener(String) */ String addPartitionLostListener(CachePartitionLostListener listener); /** * Removes the specified cache partition lost listener. * Returns silently if there is no such listener added before. * * @param id ID of registered listener. * @return true if registration is removed, false otherwise. * @throws java.lang.NullPointerException if the given ID is null. */ boolean removePartitionLostListener(String id); /** *

* Creates and returns a cluster wide iterator * to iterate on all entries owned by this cache. *

*

* The ordering of iteration over entries is undefined. *

*

* During iteration, any entries that are: *

    *
  • read will have their appropriate CacheEntryReadListeners notified.
  • *
  • removed will have their appropriate CacheEntryRemoveListeners notified.
  • *
*

* {@link java.util.Iterator#next()} may return null if the entry is no * longer present, has expired or has been evicted. * * @param fetchSize size for fetching keys in bulk. * This size can be thought of as page size for iteration. * But notice that at every fetch, only keys are retrieved, not values. * Values are retrieved on each iterate. * @throws IllegalStateException if the cache is {@link #isClosed()} * @see #iterator() */ Iterator> iterator(int fetchSize); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy