com.ibm.di.server
Class ThreadSafeListenableImpl<ListenerT>

java.lang.Object
  extended by com.ibm.di.server.ThreadSafeListenableImpl<ListenerT>
Type Parameters:
ListenerT - Type of listener.
All Implemented Interfaces:
Listenable<ListenerT>

public class ThreadSafeListenableImpl<ListenerT>
extends Object
implements Listenable<ListenerT>

This class is for internal use only. Users must not rely on it.

Thread safe container for listeners. Relies on double-dispatch via visitors instead of using event objects.

Since:
7.0

Nested Class Summary
static interface ThreadSafeListenableImpl.ThrowingVisitor<ListenerT>
          Visitor of listeners.
static interface ThreadSafeListenableImpl.Visitor<ListenerT>
          Visitor of listeners.
 
Constructor Summary
ThreadSafeListenableImpl()
           
 
Method Summary
 void addListener(ListenerT listener)
          Register new listener.
 ListenerT removeListener(ListenerT listener)
          Unregister listener.
 void visitListeners(ThreadSafeListenableImpl.ThrowingVisitor<ListenerT> visitor)
          Visit registered listeners with the specified visitor.
 void visitListeners(ThreadSafeListenableImpl.Visitor<ListenerT> visitor)
          Visit registered listeners with the specified visitor.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ThreadSafeListenableImpl

public ThreadSafeListenableImpl()
Method Detail

addListener

public void addListener(ListenerT listener)
Register new listener.

Specified by:
addListener in interface Listenable<ListenerT>
Parameters:
listener - Listener.

removeListener

public ListenerT removeListener(ListenerT listener)
Unregister listener. Due to implementation specifics, the listener may get notified a few more times after it is unregistered. It is guaranteed that the listener will not get notified after it is removed, if you have only one notification thread ( visitListeners(ThrowingVisitor) is called always by the same thread) and removal happens on that notification thread.

Specified by:
removeListener in interface Listenable<ListenerT>
Parameters:
listener - Registered listener.
Returns:
the actual listener being registered. This is useful when the passed in instance is only used for identification and the actual listener needs to be properly disposed of.

visitListeners

public void visitListeners(ThreadSafeListenableImpl.ThrowingVisitor<ListenerT> visitor)
                    throws Exception
Visit registered listeners with the specified visitor.

Parameters:
visitor - Visitor.
Throws:
Exception - Error thrown by the visitor.

visitListeners

public void visitListeners(ThreadSafeListenableImpl.Visitor<ListenerT> visitor)
Visit registered listeners with the specified visitor.

Parameters:
visitor - Visitor.