@Override public Map<K, V> getAll(Set<K> keys) { Set<Data> keySet = new HashSet(keys.size()); Map<K, V> result = new HashMap<K, V>(); for (Object key : keys) { keySet.add(toData(key)); } if (nearCache != null) { final Iterator<Data> iterator = keySet.iterator(); while (iterator.hasNext()) { Data key = iterator.next(); Object cached = nearCache.get(key); if (cached != null && !ClientNearCache.NULL_OBJECT.equals(cached)) { result.put((K) toObject(key), (V) cached); iterator.remove(); } } } if (keys.isEmpty()) { return result; } MapGetAllRequest request = new MapGetAllRequest(name, keySet); MapEntrySet mapEntrySet = invoke(request); Set<Entry<Data, Data>> entrySet = mapEntrySet.getEntrySet(); for (Entry<Data, Data> dataEntry : entrySet) { final V value = (V) toObject(dataEntry.getValue()); final K key = (K) toObject(dataEntry.getKey()); result.put(key, value); if (nearCache != null) { nearCache.put(dataEntry.getKey(), value); } } return result; }
@Override public Future<V> getAsync(final K key) { final Data keyData = toData(key); if (nearCache != null) { Object cached = nearCache.get(keyData); if (cached != null && !ClientNearCache.NULL_OBJECT.equals(cached)) { return new CompletedFuture( getContext().getSerializationService(), cached, getContext().getExecutionService().getAsyncExecutor()); } } final MapGetRequest request = new MapGetRequest(name, keyData); try { final ICompletableFuture future = getContext().getInvocationService().invokeOnKeyOwner(request, keyData); return new DelegatingFuture<V>(future, getContext().getSerializationService()); } catch (Exception e) { throw ExceptionUtil.rethrow(e); } }