JBoss.org Community Documentation

- Prev
- Next

## Chapter 12. Apache Camel Integration

## 12.1. Camel

Camel provides a light weight bus framework for getting information into and out of Drools.

Drools introduces two elements to make easy integration.

- Drools Policy

  Augments any JAXB or XStream data loaders. For JAXB it adds drools related paths ot the contextpath, for XStream it adds custom converters and aliases for Drools classes. It also handles setting the ClassLoader to the targeted ksession.

- Drools Endpoint

  Executes the payload against the specified drools session

Drools can be configured like any normal camel component, but notice the policy that wraps the drools related segments. This will route all payloads to ksession1

Example 12.1. Drools EndPoint configured with the CXFRS producer

    <bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">

       <route>

          <from uri="cxfrs://bean://rsServer"/>

             <policy ref="droolsPolicy">

                <unmarshal ref="xstream" />

                <to uri="drools:node1/ksession1" />

                <marshal ref="xstream" />

           </policy>

        </route>

It is possible to not specify the session in the drools endpoint uri, and instead "multiplex" based on an attribute or header. In this example the policy will check either the header field "DroolsLookup" for the named session to execute and if that isn't specified it'll check the "lookup" attribute on the incoming payload. It then attempts to "lookup" the session from the execution-node context and execute against it.

Example 12.2. Drools EndPoint configured with the CXFRS producer

    <bean id="droolsPolicy" class="org.drools.camel.component.DroolsPolicy" />

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">

       <route>

          <from uri="cxfrs://bean://rsServer"/>

             <policy ref="droolsPolicy">

                <unmarshal ref="xstream" />

                <to uri="drools:node1" />

                <marshal ref="xstream" />

           </policy>

        </route>

Example 12.3. Java Code to execute against Route from a Spring and Camel Context

    public class MyTest extends CamelSpringTestSupport {

        @Override
        protected AbstractXmlApplicationContext createApplicationContext() {
            return new ClassPathXmlApplicationContext("org/drools/camel/component/CxfRsSpring.xml");
        }

        public void test1() throws Exception {
            String cmd = "";
            cmd += "<batch-execution lookup=\"ksession1\">\n";
            cmd += "  <insert out-identifier=\"salaboy\">\n";
            cmd += "      <org.drools.pipeline.camel.Person>\n";
            cmd += "         <name>salaboy</name>\n";
            cmd += "      </org.drools.pipeline.camel.Person>\n";
            cmd += "   </insert>\n";
            cmd += "   <fire-all-rules/>\n";
            cmd += "</batch-execution>\n";

            Object object = this.context.createProducerTemplate().requestBody("direct://client", cmd);
            System.out.println( object );
        }

The following urls show sample script examples for jaxb, xstream and json marshalling using:

- http://fisheye.jboss.org/browse/JBossRules/trunk/drools-camel/src/test/resources/org/drools/camel/component/jaxb.mvt?r=HEAD

- http://fisheye.jboss.org/browse/JBossRules/trunk/drools-camel/src/test/resources/org/drools/camel/component/jaxb.mvt?r=HEAD

- http://fisheye.jboss.org/browse/JBossRules/trunk/drools-camel/src/test/resources/org/drools/camel/component/xstream.mvt?r=HEAD

- PrevChapter 11. Integration with Spring
- Top of page
- Front page
- NextChapter 13. Drools Camel Server