Example Java Semantics RulesHere is a simple trouble-ticket escalation example. The driver for this example is Escalation.java and the trouble-ticket class is TroubleTicket.java . <rules xmlns="http://drools.org/rules"> <semantics module="org.drools.semantics.java"/> <rule-set name="Escalation Rules" xmlns:java="http://drools.org/semantics/java"> <rule name="Escalate Immediately If Bob"> <parameter identifier="ticket"> <java:class type="escalation.TroubleTicket"/> </parameter> <condition> <java:condition>ticket.getSubmitter().equals( "bob" )</java:condition> </condition> <condition> <java:condition>ticket.getStatus() == escalation.TroubleTicket.NEW</java:condition> </condition> <consequence> <java:consequence> import java.util.Date; import java.text.DateFormat; System.err.println( DateFormat.getTimeInstance( DateFormat.LONG ).format( new Date() ) ); System.err.println( "** Escalating trouble ticket for bob, because he's special" ); ticket.setStatus( escalation.TroubleTicket.NOTIFIED ); modifyObject( ticket ); </java:consequence> </consequence> </rule> <rule name="Escalate New Tickets"> <parameter identifier="ticket"> <java:class type="escalation.TroubleTicket"/> </parameter> <condition> <java:condition>ticket.getStatus() == escalation.TroubleTicket.NEW</java:condition> </condition> <duration> <fixed-duration seconds="2"/> </duration> <consequence> <java:consequence> import java.util.Date; import java.text.DateFormat; System.err.println( "----------------------------------------" ); System.err.println( DateFormat.getTimeInstance( DateFormat.LONG ).format( new Date() ) ); System.err.println( "** ticket == " + ticket ); ticket.setStatus( escalation.TroubleTicket.NOTIFIED ); System.err.println( "** Escalating trouble ticket from NEW to NOTIFIED after 2 seconds" ); System.err.println( "** ticket == " + ticket ); System.err.println( "----------------------------------------" ); modifyObject( ticket ); </java:consequence> </consequence> </rule> <rule name="Escalate Notified Tickets"> <parameter identifier="ticket"> <java:class type="escalation.TroubleTicket"/> </parameter> <condition> <java:condition>ticket.getStatus() == escalation.TroubleTicket.NOTIFIED</java:condition> </condition> <duration> <fixed-duration seconds="5"/> </duration> <consequence> <java:consequence> import java.util.Date; import java.text.DateFormat; System.err.println( "----------------------------------------" ); System.err.println( DateFormat.getTimeInstance( DateFormat.LONG ).format( new Date() ) ); System.err.println( "** ticket == " + ticket ); ticket.setStatus( escalation.TroubleTicket.NULL ); System.err.println( "** Escalating trouble ticket from NOTIFIED to /dev/null after 5 seconds" ); System.err.println( "** ticket == " + ticket ); System.err.println( "----------------------------------------" ); modifyObject( ticket ); </java:consequence> </consequence> </rule> </rule-set> </rules> |