package org.radargun.service; import com.hazelcast.core.BaseMap; import com.hazelcast.core.IMap; import com.hazelcast.core.TransactionalMap; /** * Functionally same as {@link HazelcastOperations} but the interfaces have changed a bit * and in order to support transactions we have to adapt. * * @author Radim Vansa <rvansa@redhat.com> */ public class Hazelcast36Operations extends HazelcastOperations { public Hazelcast36Operations() { } public Hazelcast36Operations(Hazelcast36Service service) { super(service); } @Override public <K, V> HazelcastCache<K, V> getCache(String cacheName) { return new Cache<K, V>(service.<K, V>getMap(cacheName)); } protected static class Cache<K, V> implements HazelcastCache<K, V> { protected final BaseMap<K, V> map; protected final IMap<K, V> clearMap; public Cache(IMap<K, V> map) { this.map = map; this.clearMap = map; } public Cache(TransactionalMap<K, V> map) { this.map = map; this.clearMap = null; } @Override public V get(K key) { return map.get(key); } @Override public boolean containsKey(K key) { return map.containsKey(key); } @Override public void put(K key, V value) { map.set(key, value); } @Override public V getAndPut(K key, V value) { return map.put(key, value); } @Override public boolean remove(K key) { return map.remove(key) != null; } @Override public V getAndRemove(K key) { return map.remove(key); } @Override public boolean replace(K key, V value) { return map.replace(key, value) != null; } @Override public V getAndReplace(K key, V value) { return map.replace(key, value); } @Override public void clear() { if (clearMap == null) { throw new UnsupportedOperationException("Cannot clear in transaction."); } else { clearMap.clear(); } } @Override public boolean putIfAbsent(K key, V value) { return map.putIfAbsent(key, value) == null; } @Override public boolean remove(K key, V oldValue) { return map.remove(key, oldValue); } @Override public boolean replace(K key, V oldValue, V newValue) { return map.replace(key, oldValue, newValue); } } }