001    package com.hammurapi.eventbus;
002    
003    /**
004     * Inference policy defines how new events (conclusions) posted by handlers are dispatched.
005     * Different policies provide different levels of serialization/concurrency of event processing.
006     * @author Pavel Vlasov
007     *
008     */
009    public enum InferencePolicy {
010            
011            /**
012             * New events (conclusions) are dispatched immediately when they are posted.
013             * IMPORTANT: Use of this policy with join handlers may lead to ConcurrentModificationException if 
014             * posted events match the same join handlers and inference commands are executed in 
015             * the same thread.
016             */
017            IMMEDIATELY,
018            
019            /**
020             * Conclusions are accumulated during handler execution and are posted to the
021             * bus after the handler successfully finishes execution (without exception). 
022             */
023            AFTER_HANDLER,
024            
025            /**
026             * Conclusions are accumulated during event dispatching and are posted to the 
027             * bus after all handlers for the current event finish execution.
028             */
029            AFTER_EVENT,
030            
031            /**
032             * "Root event" is an event which is posted to the bus by the client code (not by a handler) through
033             * EventBus.post() method. With this inference policy conclusions are accumulated and get posted 
034             * to the bus after all handlers for the root event and previously posted conclusions finish execution.
035             */
036            AFTER_ROOT_EVENT,
037            
038            /**
039             * Only one event at a time is dispatched by the bus. Handlers and predicates still execute in parallel by 
040             * the executor service.   
041             */
042            EXCLUSIVE
043    
044    }