remove Listener.java and use listener.rb
remove sentinel loop.
use more abstract interface.
use AtomicReference instead of ConcurrentHashMap for lazy loading cache.