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.
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 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. |
Configured By | ATTRIBUTE |
Access | READ_WRITE |
Configured By | ELEMENT |
Access | READ_WRITE |
Required | No. |
The source of events. If this is not set the first child component is assumed to be the Event Source.
Configured By | ELEMENT |
Access | WRITE_ONLY |
Required | No, but pointless if missing. |
The child jobs.
Configured By | ATTRIBUTE |
Access | READ_WRITE |
Required | No. |
A name, can be any text.
Access | READ_ONLY |
Read only view of the internal stop flag. This flag is cleared with a reset.
Configured By | ELEMENT |
Access | READ_WRITE |
Required | No. |
Provide the event to a Bean Bus style consumer.
Access | READ_ONLY |
Required | Read only. |
The trigger event.
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>