Class Trigger<T>

All Implemented Interfaces:
Serializable, Runnable, Consumer<T>, ArooaContextAware, ArooaSessionAware, Outbound<T>, Forceable, PropertyChangeNotifier, Iconic, LogEnabled, Resettable, Stateful, Stoppable, Structural

public class Trigger<T> extends EventJobBase<T>
Author:
Rob Gordon.
See Also:

Description

Trigger on an event. This is a work in progress replacement for Trigger. The intention being that it has the ability to fire off any event, not just a state change.

The job has two children; the first being the source of the event that causes the trigger, and the second is the job that is run as the result of the trigger firing.

Example

A trigger expression based on the state of some jobs.
<oddjob>

    <job>

        <sequential name="Trigger on Two Things">

            <jobs>

                <bean class="org.oddjob.events.Trigger" id="trigger">

                    <jobs>

                        <bean class="org.oddjob.state.expr.StateExpressionType">

thing1 is success and thing2 is success and not (thing3 is success or thing4 is success)

                        </bean>

                        <echo id="notify" name="Triggered Job">You ran two things!</echo>

                    </jobs>

                </bean>

                <folder name="A Folder of Jobs">

                    <jobs>

                        <echo id="thing1" name="Run me!">Thank you</echo>

                        <echo id="thing2" name="Run me!">Thank you</echo>

                        <echo id="thing3" name="Don't Run me!">Uh oh!</echo>

                        <echo id="thing4" name="Don't Run me!">Uh oh!</echo>

                    </jobs>

                </folder>

            </jobs>

        </sequential>

    </job>

</oddjob>
A trigger as a destination in Bean Bus. The queue is required to keep the bus open while the triggered job completes. Using just a bus driver would cause the bus to be closed when the driver completes and this might not give time for the triggered job to complete because it happens asynchronously. The solution is to make Trigger flushable and not let flush complete until the triggered job completes.
<oddjob>

    <job>

        <parallel>

            <jobs>

                <bus:queue id="queue" xmlns:bus="oddjob:beanbus"/>

                <bus:bus xmlns:bus="oddjob:beanbus">

                    <of>

                        <bus:driver>

                            <values>

                                <value value="${queue}"/>

                            </values>

                        </bus:driver>

                        <bus:filter id="filter">

                            <predicate>

                                <bean class="org.oddjob.events.TriggerTest$OnlyApple"/>

                            </predicate>

                        </bus:filter>

                        <events:trigger beDestination="true" id="trigger" xmlns:events="oddjob:events">

                            <jobs>

                                <sequential>

                                    <jobs>

                                        <echo id="result">

                                            Result: ${trigger.trigger}

                                        </echo>

                                        <stop job="${queue}" name="Stop Queue"/>

                                    </jobs>

                                </sequential>

                            </jobs>

                        </events:trigger>

                    </of>

                </bus:bus>

                <folder>

                    <jobs>

                        <set id="put1" name="Put Banana">

                            <values>

                                <value key="queue.put" value="banana"/>

                            </values>

                        </set>

                        <set id="put2" name="Put Apple">

                            <values>

                                <value key="queue.put" value="Apple"/>

                            </values>

                        </set>

                    </jobs>

                </folder>

            </jobs>

        </parallel>

    </job>

</oddjob>
Trigger with the first result of a Bean Bus pipeline.
<oddjob>

    <job>

        <events:trigger id="trigger" xmlns:events="oddjob:events">

            <jobs>

                <bus:driver xmlns:bus="oddjob:beanbus">

                    <values>

                        <list>

                            <values>

                                <value value="foo"/>

                            </values>

                        </list>

                    </values>

                </bus:driver>

                <echo id="echo">

                    ${trigger.trigger}

                </echo>

            </jobs>

        </events:trigger>

    </job>

</oddjob>
  • Constructor Details

    • Trigger

      public Trigger()
  • Method Details

    • onReset

      protected void onReset()
      Description copied from class: StructuralJob
      Allow sub classes to do something on reset.
      Overrides:
      onReset in class StructuralJob<Object>
    • onImmediateEvent

      protected void onImmediateEvent(T value)
      Description copied from class: EventJobBase
      Do something with an event received immediately before the subscribe method has returned.
      Specified by:
      onImmediateEvent in class EventJobBase<T>
      Parameters:
      value - The event.
    • onSubscriptionStarted

      protected void onSubscriptionStarted(Object job, Executor executor)
      Description copied from class: EventJobBase
      Called once the subscription has started.
      Specified by:
      onSubscriptionStarted in class EventJobBase<T>
      Parameters:
      job - The job to execute if any.
      executor - The executor to use to execute the job.
    • onLaterEvent

      protected void onLaterEvent(T value, Object job, Executor executor)
      Description copied from class: EventJobBase
      Called when an event is received after subscription. There is no guarantee that this will be called after the EventJobBase.onSubscriptionStarted(Object, Executor) method, implementors are responsible for their own synchronisation if required.
      Specified by:
      onLaterEvent in class EventJobBase<T>
      Parameters:
      value - The event.
    • stateOnChildComplete

      protected StateListener stateOnChildComplete()
      Description copied from class: EventJobBase
      Used by subclasses to provide a state listener to be added to the child job.
      Specified by:
      stateOnChildComplete in class EventJobBase<T>
      Returns:
      A State Listener. Must not be null.