[jboss-svn-commits] JBL Code SVN: r30357 - in labs/jbossrules/trunk/drools-pipeline: drools-camel and 15 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Nov 26 15:53:22 EST 2009
Author: salaboy21
Date: 2009-11-26 15:53:22 -0500 (Thu, 26 Nov 2009)
New Revision: 30357
Added:
labs/jbossrules/trunk/drools-pipeline/drools-camel/
labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/resources/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/
labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml
Log:
JBRULES-2347 Drools Pipeline integration with Camel
- Initial commit of Camel integration
Property changes on: labs/jbossrules/trunk/drools-pipeline/drools-camel
___________________________________________________________________
Name: svn:ignore
+ target
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/pom.xml 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>drools-pipeline</artifactId>
+ <groupId>org.drools</groupId>
+ <version>5.1.0.SNAPSHOT</version>
+ </parent>
+
+ <artifactId>drools-camel</artifactId>
+ <name>Drools :: Pipeline :: Camel </name>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-compiler</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-vsm</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-transformer-xstream</artifactId>
+ <version>5.1.0.SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ <version>2.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-spring</artifactId>
+ <version>2.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>2.5.5</version>
+ </dependency>
+ <dependency>
+ <groupId>xmlunit</groupId>
+ <artifactId>xmlunit</artifactId>
+ <version>1.2</version>
+
+ </dependency>
+
+ </dependencies>
+</project>
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/AssignResultProcessor.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.impl.AssignObjectAsResult;
+
+/**
+ *
+ * @author salaboy
+ */
+public class AssignResultProcessor implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ AssignObjectAsResult assignResult = (AssignObjectAsResult) PipelineFactory.newAssignObjectAsResult();
+ assignResult.assignResult((PipelineContext) exchange.getProperty("drools-context"), exchange.getIn().getBody());
+
+ }
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/BatchExecutorProcessor.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.impl.ExecutorStage;
+
+/**
+ *
+ * @author salaboy
+ */
+public class BatchExecutorProcessor implements Processor{
+
+ public BatchExecutorProcessor() {
+ }
+
+
+ public void process(Exchange exchange) {
+ ExecutorStage batchExecution = (ExecutorStage) PipelineFactory.newCommandExecutor();
+ ExecutionResults results = batchExecution.execute(exchange.getIn().getBody(), (PipelineContext) exchange.getProperty("drools-context"));
+ exchange.getIn().setBody(results);
+ }
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelServiceManagerPipelineImpl.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.drools.pipeline.camel;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.drools.runtime.pipeline.Pipeline;
+import org.drools.runtime.pipeline.Receiver;
+import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.pipeline.StageExceptionHandler;
+import org.drools.runtime.pipeline.impl.ServiceManagerPipelineContextImpl;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+import org.drools.vsm.ServiceManager;
+
+/**
+ *
+ * @author salaboy
+ */
+public class CamelServiceManagerPipelineImpl implements Pipeline {
+
+ private ServiceManager sm;
+ private CamelContext camelContext;
+ private ProducerTemplate template;
+
+
+ public CamelServiceManagerPipelineImpl(ServiceManager sm, CamelContext context) {
+ this.sm = sm;
+ this.camelContext = context;
+ this.template = camelContext.createProducerTemplate();
+
+ }
+
+
+ public void startCamel() throws Exception{
+ this.camelContext.start();
+ this.template.start();
+ }
+
+ public void insert(Object object, ResultHandler resultHandler) {
+
+ template.sendBodyAndProperty("direct:start", (String)object,"drools-context",new ServiceManagerPipelineContextImpl(sm,null,resultHandler));
+ }
+
+ public void setStageExceptionHandler(StageExceptionHandler exceptionHandler) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public void setReceiver(Receiver receiver) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public Receiver getReceiver() {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ public CamelContext getCamelContext() {
+ return camelContext;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamFromXmlVsmTransformer.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,44 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.pipeline.impl.XStreamFromXmlVsmTransformer;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+import org.drools.vsm.ServiceManager;
+
+/**
+ *
+ * @author salaboy
+ */
+public class CamelXStreamFromXmlVsmTransformer implements Processor{
+
+ private XStreamFromXmlVsmTransformer transformer;
+
+
+
+ public CamelXStreamFromXmlVsmTransformer(XStreamResolverStrategy xstreamStrategy) {
+
+
+ this.transformer = new XStreamFromXmlVsmTransformer(xstreamStrategy);
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ this.transformer.processPayload(exchange.getIn().getBody(), (PipelineContext)exchange.getProperty("drools-context"));
+ exchange.getIn().setBody(this.transformer.getPayload());
+ exchange.setProperty("drools-context",this.transformer.getContext() );
+ }
+
+
+
+
+
+
+
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/CamelXStreamToXmlVsmTransformer.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,31 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.impl.XStreamToXmlVsmTransformer;
+
+/**
+ *
+ * @author salaboy
+ */
+class CamelXStreamToXmlVsmTransformer implements Processor {
+ private XStreamToXmlVsmTransformer transformer;
+
+ public CamelXStreamToXmlVsmTransformer() {
+
+ this.transformer = new XStreamToXmlVsmTransformer();
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ Object result = this.transformer.transform((PipelineContext)exchange.getProperty("drools-context"), exchange.getIn().getBody());
+ exchange.getIn().setBody(result);
+
+ }
+
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ExecuteResultProcessor.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.pipeline.camel;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.impl.ExecuteResultHandler;
+
+/**
+ *
+ * @author salaboy
+ */
+public class ExecuteResultProcessor implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ ExecuteResultHandler executeResult = (ExecuteResultHandler) PipelineFactory.newExecuteResultHandler();
+ executeResult.handleResult((PipelineContext) exchange.getProperty("drools-context"), exchange.getIn().getBody());
+
+ }
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/ToXmlNodeTransformer.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,62 @@
+package org.drools.pipeline.camel;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.drools.io.Resource;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.Transformer;
+import org.drools.runtime.pipeline.impl.BaseEmitter;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+public class ToXmlNodeTransformer extends BaseEmitter
+ implements
+ Transformer, Processor {
+
+ public void receive(Object object,
+ PipelineContext context) {
+ Document d = processTranslate(object);
+
+ emit( d,
+ context );
+
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ Document d = processTranslate(exchange.getIn().getBody());
+ exchange.getIn().setBody(d);
+ }
+
+ private Document processTranslate(Object object) {
+ // Create a DOM builder and parse the fragment
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ Document d = null;
+ try {
+ d = factory.newDocumentBuilder().parse((InputSource) null);
+ } catch (Exception e) {
+ }
+ try {
+ if (object instanceof String) {
+ d = factory.newDocumentBuilder().parse(new InputSource(new StringReader((String) object)));
+ } else if (object instanceof Reader) {
+ d = factory.newDocumentBuilder().parse(new InputSource((Reader) object));
+ } else if (object instanceof InputStream) {
+ d = factory.newDocumentBuilder().parse((InputStream) object);
+ } else if (object instanceof Resource) {
+ d = factory.newDocumentBuilder().parse(new InputSource(((Resource) object).getReader()));
+ } else {
+ throw new IllegalArgumentException("signal object must be instance of InputStream or Resource");
+ }
+ } catch (Exception e) {
+ handleException(this, object, e);
+ }
+ return d;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/main/java/org/drools/pipeline/camel/helper/MyXstreamLookupStrategy.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.pipeline.camel.helper;
+
+import com.thoughtworks.xstream.XStream;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+
+/**
+ *
+ * @author salaboy
+ */
+public class MyXstreamLookupStrategy implements XStreamResolverStrategy {
+
+ public MyXstreamLookupStrategy() {
+ }
+
+ public XStream lookup(String name) {
+ return BatchExecutionHelper.newXStreamMarshaller();
+ }
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/CamelPipelineTest.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2009 salaboy.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.drools.pipeline.camel;
+
+import com.thoughtworks.xstream.XStream;
+import java.util.Collection;
+import junit.framework.TestCase;
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spring.SpringCamelContext;
+import org.custommonkey.xmlunit.Diff;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
+import org.drools.common.InternalFactHandle;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.pipeline.Pipeline;
+import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.pipeline.impl.XStreamResolverStrategy;
+import org.drools.vsm.ServiceManager;
+import org.drools.vsm.local.ServiceManagerLocalClient;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ *
+ * @author salaboy
+ * @author lucaz
+ */
+public class CamelPipelineTest extends TestCase {
+
+ CamelContext camel = null;
+ private ClassPathXmlApplicationContext springCtx;
+
+ public CamelPipelineTest(String testName) {
+ super(testName);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ protected void setUp() throws Exception {
+ XMLUnit.setIgnoreComments(true);
+ XMLUnit.setIgnoreWhitespace(true);
+ XMLUnit.setIgnoreAttributeOrder(true);
+ XMLUnit.setNormalizeWhitespace(true);
+ XMLUnit.setNormalize(true);
+ springCtx = new ClassPathXmlApplicationContext("applicationContext.xml");
+ }
+
+ public void testCamelPipelineWithVSM() throws Exception {
+
+ String inXml = "";
+ inXml += "<batch-execution lookup=\"ksession1\" >";
+ inXml += " <insert out-identifier='salaboy'>";
+ inXml += " <org.drools.pipeline.camel.Person>";
+ inXml += " <name>salaboy</name>";
+ inXml += " </org.drools.pipeline.camel.Person>";
+ inXml += " </insert>";
+ inXml += " <fire-all-rules />";
+ inXml += "</batch-execution>";
+
+ String rule = "";
+ rule += "package org.drools.pipeline.camel;\n" +
+ "import org.drools.pipeline.camel.Person;\n" +
+ "rule 'Check for Person'\n" +
+ " when\n" +
+ " $p: Person()\n" +
+ " then\n" +
+ " System.out.println(\"Person Name: \" + $p.getName());\n" +
+ "end\n";
+
+
+ ServiceManager sm = new ServiceManagerLocalClient();
+
+ StatefulKnowledgeSession ksession = getVmsSessionStateful(sm, rule);
+
+ sm.register("ksession1",
+ ksession);
+
+ XStreamResolverStrategy xstreamStrategy = new XStreamResolverStrategy() {
+
+ public XStream lookup(String name) {
+ return BatchExecutionHelper.newXStreamMarshaller();
+ }
+ };
+
+ ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+ getCamelPipelineVms(sm,
+ xstreamStrategy).insert(inXml,
+ resultHandler);
+
+
+
+ String outXml = (String) resultHandler.getObject();
+
+ ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(outXml);
+ Person person = (Person) result.getValue("salaboy");
+ assertEquals("salaboy",
+ person.getName());
+
+ FactHandle factHandle = (FactHandle) result.getFactHandle("salaboy");
+ person = (Person) ksession.getObject(factHandle);
+ assertEquals("salaboy",
+ person.getName());
+
+ String expectedXml = "";
+ expectedXml += "<execution-results>\n";
+ expectedXml += " <result identifier=\"salaboy\">\n";
+ expectedXml += " <org.drools.pipeline.camel.Person>\n";
+ expectedXml += " <name>salaboy</name>\n";
+ expectedXml += " </org.drools.pipeline.camel.Person>\n";
+ expectedXml += " </result>\n";
+ expectedXml += " <fact-handle identifier=\"salaboy\" externalForm=\"" + ((InternalFactHandle) result.getFactHandle("salaboy")).toExternalForm() + "\" /> \n";
+ expectedXml += "</execution-results>\n";
+
+ assertXMLEqual(expectedXml,
+ outXml);
+
+
+
+
+ }
+
+ public void testCamelPipelineWithVSMAndSpring() throws Exception {
+
+ String inXml = "";
+ inXml += "<batch-execution lookup=\"ksession1\" >";
+ inXml += " <insert out-identifier='salaboy'>";
+ inXml += " <org.drools.pipeline.camel.Person>";
+ inXml += " <name>salaboy</name>";
+ inXml += " </org.drools.pipeline.camel.Person>";
+ inXml += " </insert>";
+ inXml += " <fire-all-rules />";
+ inXml += "</batch-execution>";
+
+ String rule = "";
+ rule += "package org.drools.pipeline.camel;\n" +
+ "import org.drools.pipeline.camel.Person;\n" +
+ "rule 'Check for Person'\n" +
+ " when\n" +
+ " $p: Person()\n" +
+ " then\n" +
+ " System.out.println(\"Person Name: \" + $p.getName());\n" +
+ "end\n";
+
+ ServiceManager sm = new ServiceManagerLocalClient();
+
+ StatefulKnowledgeSession ksession = getVmsSessionStateful(sm, rule);
+
+ sm.register("ksession1",
+ ksession);
+
+
+ ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+
+ getCamelPipelineVmsSpring(sm).insert(inXml, resultHandler);
+ String outXml = (String) resultHandler.getObject();
+
+ ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(outXml);
+ Person person = (Person) result.getValue("salaboy");
+ assertEquals("salaboy",
+ person.getName());
+
+ FactHandle factHandle = (FactHandle) result.getFactHandle("salaboy");
+ person = (Person) ksession.getObject(factHandle);
+ assertEquals("salaboy",
+ person.getName());
+
+ String expectedXml = "";
+ expectedXml += "<execution-results>\n";
+ expectedXml += " <result identifier=\"salaboy\">\n";
+ expectedXml += " <org.drools.pipeline.camel.Person>\n";
+ expectedXml += " <name>salaboy</name>\n";
+ expectedXml += " </org.drools.pipeline.camel.Person>\n";
+ expectedXml += " </result>\n";
+ expectedXml += " <fact-handle identifier=\"salaboy\" externalForm=\"" + ((InternalFactHandle) result.getFactHandle("salaboy")).toExternalForm() + "\" /> \n";
+ expectedXml += "</execution-results>\n";
+
+ assertXMLEqual(expectedXml,
+ outXml);
+
+
+ }
+
+ private StatefulKnowledgeSession getVmsSessionStateful(ServiceManager sm,
+ String rule) throws Exception {
+ KnowledgeBuilder kbuilder = sm.getKnowledgeBuilderFactory().newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule.getBytes()),
+ ResourceType.DRL);
+
+ if (kbuilder.hasErrors()) {
+ System.out.println(kbuilder.getErrors());
+ }
+
+ assertFalse(kbuilder.hasErrors());
+ Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
+ KnowledgeBase kbase = sm.getKnowledgeBaseFactory().newKnowledgeBase();
+
+ kbase.addKnowledgePackages(pkgs);
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+ return session;
+ }
+
+ private Pipeline getCamelPipelineVms(ServiceManager vsm, XStreamResolverStrategy xstreamStrategy) throws Exception {
+
+ Pipeline pipeline = new CamelServiceManagerPipelineImpl(vsm, new DefaultCamelContext());
+
+ ((CamelServiceManagerPipelineImpl) pipeline).getCamelContext().addRoutes(new PipelineRouteBuilder(vsm, xstreamStrategy));
+
+ ((CamelServiceManagerPipelineImpl) pipeline).startCamel();
+
+
+
+ return pipeline;
+ }
+
+ private Pipeline getCamelPipelineVmsSpring(ServiceManager vsm) throws Exception {
+
+ Pipeline pipeline = new CamelServiceManagerPipelineImpl(vsm, (SpringCamelContext) springCtx.getBean("camelContext"));
+
+ ((CamelServiceManagerPipelineImpl) pipeline).startCamel();
+
+
+
+ return pipeline;
+ }
+
+ public static class ResultHandlerImpl
+ implements
+ ResultHandler {
+
+ Object object;
+
+ public void handleResult(Object object) {
+ this.object = object;
+ }
+
+ public Object getObject() {
+ return this.object;
+ }
+ }
+
+ private void assertXMLEqual(String expectedXml,
+ String resultXml) {
+ try {
+ Diff diff = new Diff(expectedXml,
+ resultXml);
+ diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
+ XMLAssert.assertXMLEqual(diff,
+ true);
+ } catch (Exception e) {
+ throw new RuntimeException("XML Assertion failure",
+ e);
+ }
+ }
+}
+
+class PipelineRouteBuilder extends RouteBuilder {
+
+ private XStreamResolverStrategy xstreamStrategy;
+
+ public PipelineRouteBuilder(ServiceManager vsm, XStreamResolverStrategy xstreamStrategy) {
+
+ this.xstreamStrategy = xstreamStrategy;
+
+
+ }
+
+ public void configure() {
+ // START SNIPPET: example
+ from("direct:start").process(new ToXmlNodeTransformer()).to("direct:xstreamTransformer");
+
+ from("direct:xstreamTransformer").process(new CamelXStreamFromXmlVsmTransformer(xstreamStrategy)).to("direct:executor");
+ from("direct:executor").process(new BatchExecutorProcessor()).to("direct:xstreamTransformerResult");
+
+ from("direct:xstreamTransformerResult").process(new CamelXStreamToXmlVsmTransformer()).to("direct:finalResult");
+
+ from("direct:finalResult").process(new AssignResultProcessor()).to("direct:executeResult");
+
+ from("direct:executeResult").process(new ExecuteResultProcessor());
+
+ }
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/java/org/drools/pipeline/camel/Person.java 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,29 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.drools.pipeline.camel;
+
+/**
+ *
+ * @author salaboy
+ */
+public class Person {
+ private String name;
+ //private Address address;
+
+ public Person() {
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+}
Added: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml 2009-11-26 20:53:22 UTC (rev 30357)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:camel="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <bean id="xmlNodeTransformer" class="org.drools.pipeline.camel.ToXmlNodeTransformer" />
+
+ <bean id="xstreamStrategy" class="org.drools.pipeline.camel.helper.MyXstreamLookupStrategy" />
+ <bean id="camelXStreamFromXmlVsmTransformer" class="org.drools.pipeline.camel.CamelXStreamFromXmlVsmTransformer" >
+ <constructor-arg ref="xstreamStrategy" />
+ </bean>
+
+ <bean id="batchExecutorProcessor" class="org.drools.pipeline.camel.BatchExecutorProcessor" />
+
+ <bean id="camelXStreamToXmlVsmTransformer" class="org.drools.pipeline.camel.CamelXStreamToXmlVsmTransformer" />
+
+ <bean id="assignResultProcessor" class="org.drools.pipeline.camel.AssignResultProcessor" />
+
+ <bean id="executeResultProcessor" class="org.drools.pipeline.camel.ExecuteResultProcessor" />
+
+ <camel:camelContext id="camelContext">
+ <camel:route>
+ <camel:from uri="direct:start" />
+ <camel:process ref="xmlNodeTransformer" />
+ <camel:to uri="direct:xstreamTransformer" />
+ </camel:route>
+ <camel:route>
+ <camel:from uri="direct:xstreamTransformer" />
+ <camel:process ref="camelXStreamFromXmlVsmTransformer" />
+ <camel:to uri="direct:executor" />
+ </camel:route>
+ <camel:route>
+ <camel:from uri="direct:executor" />
+ <camel:process ref="batchExecutorProcessor" />
+ <camel:to uri="direct:xstreamTransformerResult" />
+ </camel:route>
+ <camel:route>
+ <camel:from uri="direct:xstreamTransformerResult" />
+ <camel:process ref="camelXStreamToXmlVsmTransformer" />
+ <camel:to uri="direct:finalResult" />
+ </camel:route>
+ <camel:route>
+ <camel:from uri="direct:finalResult" />
+ <camel:process ref="assignResultProcessor" />
+ <camel:to uri="direct:executeResult" />
+ </camel:route>
+ <camel:route>
+ <camel:from uri="direct:executeResult" />
+ <camel:process ref="executeResultProcessor" />
+ </camel:route>
+ </camel:camelContext>
+
+
+
+</beans>
Property changes on: labs/jbossrules/trunk/drools-pipeline/drools-camel/src/test/resources/applicationContext.xml
___________________________________________________________________
Name: svn:executable
+ *
More information about the jboss-svn-commits
mailing list