[Index]

events:trigger


Trigger on an event. This is a work in progress replacement for scheduling: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.


Property Summary

beDestination  
eventSource The source of events.
jobs The child jobs.
name A name, can be any text.
stop Read only view of the internal stop flag.
to Provide the event to a Bean Bus style consumer.
trigger The trigger event.

Example Summary

Example 1 A trigger expression based on the state of some jobs.
Example 2 A trigger as a destination in Bean Bus.
Example 3 Trigger with the first result of a Bean Bus pipeline.

Property Detail

beDestination

Configured ByATTRIBUTE
AccessREAD_WRITE

eventSource

Configured ByELEMENT
AccessREAD_WRITE
RequiredNo.

The source of events. If this is not set the first child component is assumed to be the Event Source.

jobs

Configured ByELEMENT
AccessWRITE_ONLY
RequiredNo, but pointless if missing.

The child jobs.

name

Configured ByATTRIBUTE
AccessREAD_WRITE
RequiredNo.

A name, can be any text.

stop

AccessREAD_ONLY

Read only view of the internal stop flag. This flag is cleared with a reset.

to

Configured ByELEMENT
AccessREAD_WRITE
RequiredNo.

Provide the event to a Bean Bus style consumer.

trigger

AccessREAD_ONLY
RequiredRead only.

The trigger event.


Examples

Example 1

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>

Example 2

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>

Example 3

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>


(c) R Gordon Ltd 2005 - Present