Class DefaultEventManager

    • Field Detail

      • subjects

        protected final Map<EventSubject,​org.apache.cayenne.event.DispatchQueue> subjects
      • eventQueue

        protected final List<org.apache.cayenne.event.DefaultEventManager.Dispatch> eventQueue
      • singleThread

        protected final boolean singleThread
      • dispatchThreads

        protected final List<org.apache.cayenne.event.DefaultEventManager.DispatchThread> dispatchThreads
      • stopped

        protected volatile boolean stopped
    • Constructor Detail

      • DefaultEventManager

        public DefaultEventManager()
        Creates a multithreaded EventManager using default thread count.
      • DefaultEventManager

        public DefaultEventManager​(int dispatchThreadCount)
        Creates an EventManager starting the specified number of threads for multithreaded dispatching. To create a single-threaded EventManager, use thread count of zero or less.
    • Method Detail

      • isStopped

        public boolean isStopped()
        Returns true if the EventManager was stopped via shutdown() method.
        Since:
        3.1
      • isSingleThreaded

        public boolean isSingleThreaded()
        Returns true if this EventManager is single-threaded. If so it will throw an exception on any attempt to register an unblocking listener or dispatch a non-blocking event.
        Specified by:
        isSingleThreaded in interface EventManager
        Since:
        1.2
      • shutdown

        @BeforeScopeEnd
        public void shutdown()
        Stops event threads. After the EventManager is stopped, it can not be restarted and should be discarded.
        Since:
        3.0
      • addListener

        public void addListener​(Object listener,
                                String methodName,
                                Class<?> eventParameterClass,
                                EventSubject subject,
                                Object sender)
        Register an EventListener for events sent by a specific sender.
        Specified by:
        addListener in interface EventManager
        Parameters:
        listener - the object to be notified about events
        methodName - the name of the listener method to be invoked
        eventParameterClass - the class of the single event argument passed to methodName
        subject - the event subject that the listener is interested in
        sender - the object whose events the listener is interested in; null means 'any sender'.
        Throws:
        RuntimeException - if methodName is not found
      • removeListener

        public boolean removeListener​(Object listener)
        Unregister the specified listener from all event subjects handled by this manager instance.
        Specified by:
        removeListener in interface EventManager
        Parameters:
        listener - the object to be unregistered
        Returns:
        true if listener could be removed for any existing subjects, else returns false.
      • removeListener

        public boolean removeListener​(Object listener,
                                      EventSubject subject)
        Unregister the specified listener for the events about the given subject.
        Specified by:
        removeListener in interface EventManager
        Parameters:
        listener - the object to be unregistered
        subject - the subject from which the listener is to be unregistered
        Returns:
        true if listener could be removed for the given subject, else returns false.
      • removeListener

        public boolean removeListener​(Object listener,
                                      EventSubject subject,
                                      Object sender)
        Unregister the specified listener for the events about the given subject and the given sender.
        Specified by:
        removeListener in interface EventManager
        Parameters:
        listener - the object to be unregistered
        subject - the subject from which the listener is to be unregistered
        sender - the object whose events the listener was interested in; null means 'any sender'.
        Returns:
        true if listener could be removed for the given subject, else returns false.
      • postEvent

        public void postEvent​(EventObject event,
                              EventSubject subject)
        Sends an event to all registered objects about a particular subject. Event is sent synchronously, so the sender thread is blocked until all the listeners finish processing the event.
        Specified by:
        postEvent in interface EventManager
        Parameters:
        event - the event to be posted to the observers
        subject - the subject about which observers will be notified
        Throws:
        IllegalArgumentException - if event or subject are null
      • postNonBlockingEvent

        public void postNonBlockingEvent​(EventObject event,
                                         EventSubject subject)
        Sends an event to all registered objects about a particular subject. Event is queued by EventManager, releasing the sender thread, and is later dispatched in a separate thread.
        Specified by:
        postNonBlockingEvent in interface EventManager
        Parameters:
        event - the event to be posted to the observers
        subject - the subject about which observers will be notified
        Throws:
        IllegalArgumentException - if event or subject are null
        Since:
        1.1