Advertisement
tpeierls

AsyncTtlIMaps.java

May 31st, 2011
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 2.86 KB | None | 0 0
  1. package com.hazelcast.util;
  2.  
  3. import com.hazelcast.core.Hazelcast;
  4. import com.hazelcast.core.HazelcastInstance;
  5. import com.hazelcast.core.IMap;
  6. import com.hazelcast.core.LifecycleEvent;
  7. import com.hazelcast.core.LifecycleListener;
  8. import com.hazelcast.core.LifecycleService;
  9.  
  10. import java.util.concurrent.Callable;
  11. import java.util.concurrent.Executors;
  12. import java.util.concurrent.ExecutorService;
  13. import java.util.concurrent.Future;
  14. import java.util.concurrent.TimeUnit;
  15.  
  16.  
  17. /**
  18.  * For creating AsyncTtlIMaps, given (optional) HazelcastInstance, a map
  19.  * name, and an (optional) ExecutorService. If ExecutorService is passed,
  20.  * specify whether it should be shutdown with the HazelcastInstance.
  21.  */
  22. public final class AsyncTtlIMaps {
  23.  
  24.     public static <K, V> AsyncTtlIMap<K, V> getMap(String name) {
  25.         return getMap(Hazelcast.getDefaultInstance(), name);
  26.     }
  27.  
  28.     public static <K, V> AsyncTtlIMap<K, V> getMap(
  29.             String name,
  30.             final ExecutorService exec,
  31.             boolean shutdownWithHazelcast) {
  32.         return getMap(Hazelcast.getDefaultInstance(), name, exec, shutdownWithHazelcast);
  33.     }
  34.  
  35.     public static <K, V> AsyncTtlIMap<K, V> getMap(
  36.             HazelcastInstance hazelcast,
  37.             String name) {
  38.         ExecutorService exec = Executors.newSingleThreadExecutor();
  39.         return getMap(hazelcast, name, exec, true);
  40.     }
  41.  
  42.     public static <K, V> AsyncTtlIMap<K, V> getMap(
  43.             HazelcastInstance hazelcast,
  44.             String name,
  45.             final ExecutorService exec,
  46.             boolean shutdownWithHazelcast) {
  47.  
  48.         if (shutdownWithHazelcast) {
  49.             hazelcast.getLifecycleService().addLifecycleListener(new LifecycleListener() {
  50.                 public void stateChanged(LifecycleEvent event) {
  51.                     switch (event.getState()) {
  52.                         case SHUTDOWN:
  53.                             exec.shutdown();
  54.                             break;
  55.                         default:
  56.                             break;
  57.                     }
  58.                 }
  59.             });
  60.         }
  61.  
  62.         IMap<K, V> map = hazelcast.getMap(name);
  63.         return new Impl<K, V>(map, exec);
  64.     }
  65.  
  66.  
  67.     static class Impl<K, V> extends ForwardingIMap<K, V> implements AsyncTtlIMap<K, V> {
  68.  
  69.         Impl(IMap<K, V> map, ExecutorService exec) {
  70.             super(map);
  71.             this.exec = exec;
  72.         }
  73.  
  74.         @Override public Future<V> putAsync(final K key, final V value,
  75.                                             final long ttl, final TimeUnit timeunit) {
  76.             return exec.submit(new Callable<V>() {
  77.                 public V call() {
  78.                     return delegate().put(key, value, ttl, timeunit);
  79.                 }
  80.             });
  81.         }
  82.  
  83.         private final ExecutorService exec;
  84.     }
  85.  
  86.     private AsyncTtlIMaps() { /* uninstantiable */ }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement