Drools rules based on ESB Message property
dbuttery Feb 24, 2012 10:32 AMHi all,
After much consternation and fruitless tail-chasing I am hoping to find a clear-cut, to-the-point example of writing Drools rules based on a property of a ESB message.
Here is the snippet from my jboss-esb.xml that defines the CBR action:
<!-- Route to different service based on message property -->
<action class="org.jboss.soa.esb.actions.ContentBasedRouter" name="ContentBasedRouter">
<property name="ruleSet" value="META-INF/MyCBRRules.drl"/>
<property name="ruleReload" value="true"/>
<property name="destinations">
<route-to destination-name="service1" service-category="Cat1" service-name="Svc1"/>
<route-to destination-name="service2" service-category="Cat2" service-name="Svc2"/>
<route-to destination-name="service3" service-category="Cat3" service-name="Svc3"/>
</property>
<property name="object-paths">
<object-path esb="properties.DestService" />
</property>
</action>
It is my understanding that using the <object-paths> in this way would present the 'DestService' property of my ESB message to the rules set.
So... My question is what exactly is the syntax to be used in the .drl file to allow for rule matching on the value of the ESB property?
Sample .drl file below:
#===================================================
# Routing rules for ESB messages.
#===================================================
package com.jboss.soa.esb.routing.cbr
#list any import classes here.
import org.jboss.soa.esb.message.Message;
#declare any global variables here
global java.util.List destinations;
rule "Service 1 Routing Rule"
when
???? Syntax here to match against ESB property value ????
then
System.out.println("Routing to Service 1");
destinations.add("service1");
end
rule "Service 2 Routing Rule"
when
???? Syntax here to match against ESB property value ????
then
System.out.println("Routing to Service 2");
destinations.add("service2");
end
rule "Service 3 Routing Rule"
when
???? Syntax here to match against ESB property value ????
then
System.out.println("Routing to Service 3");
destinations.add("service3");
end
Thanks!
-Dennis