[jboss-svn-commits] JBL Code SVN: r33977 - in labs/jbossrules/trunk: drools-pipeline and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 16 22:51:46 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-07-16 22:51:46 -0400 (Fri, 16 Jul 2010)
New Revision: 33977

Added:
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Action.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Emitter.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Expression.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JaxbTransformerProvider.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JmsMessengerProvider.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Join.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JxlsTransformerProvider.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/KnowledgeRuntimeCommand.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Pipeline.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineContext.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Receiver.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandler.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandlerFactory.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Service.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ServiceExceptionHandler.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/SmooksTransformerProvider.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Splitter.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Stage.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StageExceptionHandler.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatefulKnowledgeSessionPipelineContext.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Transformer.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/XStreamTransformerProvider.java
   labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/package.html
Modified:
   labs/jbossrules/trunk/drools-pipeline/
   labs/jbossrules/trunk/drools-pipeline/pom.xml
   labs/jbossrules/trunk/pom.xml
Log:
JBRULES-2347 Camel
-merging all the pipelien modueles, to simplify the build, as they are only kept around now for legacy users.




Property changes on: labs/jbossrules/trunk/drools-pipeline
___________________________________________________________________
Name: svn:ignore
   - *.iml
*.ipr
*.iws
.metadata
.settings
.wtpmodules
local
nbproject
target

   + *.iml
*.ipr
*.iws
.metadata
.settings
.wtpmodules
local
nbproject
target
activemq-data


Modified: labs/jbossrules/trunk/drools-pipeline/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/pom.xml	2010-07-17 02:50:17 UTC (rev 33976)
+++ labs/jbossrules/trunk/drools-pipeline/pom.xml	2010-07-17 02:51:46 UTC (rev 33977)
@@ -15,17 +15,24 @@
   
    <dependencies>
       <dependency>
+      	<groupId>org.drools</groupId>
+      	<artifactId>drools-api</artifactId>
+      </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-grid-core</artifactId>
+      </dependency>
+	  
+      <dependency>
          <groupId>com.thoughtworks.xstream</groupId>
          <artifactId>xstream</artifactId>
       </dependency>     
@@ -34,16 +41,9 @@
          <artifactId>xmlunit</artifactId>
          <scope>test</scope>
       </dependency>
+
+
       <dependency>
-      	<groupId>org.drools</groupId>
-      	<artifactId>drools-grid-core</artifactId>
-      	<version>${project.version}</version>
-      </dependency>
-    <dependency>
-      <groupId>javax.xml.bind</groupId>
-      <artifactId>jaxb-api</artifactId>
-    </dependency>
-      <dependency>
          <groupId>org.codehaus.jettison</groupId>
          <artifactId>jettison</artifactId>
       </dependency>
@@ -51,9 +51,8 @@
       <dependency>
          <groupId>net.sf.jxls</groupId>
          <artifactId>jxls-reader</artifactId>
-         <version>0.9.6</version>
       </dependency>  
-
+	  
     <dependency>
       <groupId>javax.xml.bind</groupId>
       <artifactId>jaxb-api</artifactId>
@@ -62,32 +61,24 @@
 		<groupId>com.sun.xml.bind</groupId>
 		<artifactId>jaxb-xjc</artifactId>
 	</dependency>
+
       <dependency>
-      	<groupId>org.drools</groupId>
-      	<artifactId>drools-api</artifactId>
-      	<version>${project.version}</version>
-      </dependency>
-      <dependency>
       	<groupId>xalan</groupId>
 		<artifactId>xalan</artifactId>
-		<version>2.7.1</version>
 	</dependency>
 	
       <dependency>
          <groupId>org.apache.activemq</groupId>
          <artifactId>activemq-core</artifactId>
-         <version>5.3.1</version>
       </dependency>
       <dependency>
          <groupId>simple-jndi</groupId>
          <artifactId>simple-jndi</artifactId>
-         <version>0.11.4</version>
         </dependency>	
 	  
         <dependency>
           <groupId>org.milyn</groupId>
           <artifactId>milyn-smooks-javabean</artifactId>
-          <version>1.1</version>
         </dependency>     
 	</dependencies>
    

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Action.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Action.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Action.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Action.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,12 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ */
+public interface Action
+    extends
+    Emitter,
+    Receiver,
+    Stage {
+
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,54 @@
+package org.drools.runtime.pipeline;
+
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ */
+public interface CorePipelineProvider {
+
+    Pipeline newStatefulKnowledgeSessionPipeline(StatefulKnowledgeSession ksession);
+
+    Pipeline newStatefulKnowledgeSessionPipeline(StatefulKnowledgeSession ksession,
+                                                 String entryPointName);
+
+    Pipeline newStatelessKnowledgeSessionPipeline(StatelessKnowledgeSession ksession);
+    
+    KnowledgeRuntimeCommand newCommandExecutor();
+    
+    KnowledgeRuntimeCommand newInsertObjectCommand();
+    
+    KnowledgeRuntimeCommand newInsertElementsCommand();
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionInsert();
+
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionGetGlobal();
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionSetGlobal();
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionGetObject();
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionSetGlobal(String identifier);
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionSignalEvent(String eventType);
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionSignalEvent(String eventType,
+                                                                   long id);
+
+    KnowledgeRuntimeCommand newStatefulKnowledgeSessionStartProcess(String id);
+
+    Action newAssignObjectAsResult();
+
+    Action newExecuteResultHandler();
+
+    Action newMvelAction(String action);
+
+    Expression newMvelExpression(String expression);
+
+    Splitter newIterateSplitter();
+
+    Join newListCollectJoin();
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Emitter.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Emitter.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Emitter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Emitter.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,12 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * 
+ *<p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ */
+public interface Emitter {
+    void setReceiver(Receiver receiver);
+
+    Receiver getReceiver();
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Expression.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Expression.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Expression.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Expression.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,13 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * 
+ *<p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ */
+public interface Expression
+    extends
+    Emitter,
+    Receiver,
+    Stage {
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JaxbTransformerProvider.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/JaxbTransformerProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JaxbTransformerProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JaxbTransformerProvider.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,15 @@
+package org.drools.runtime.pipeline;
+
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface JaxbTransformerProvider {
+    Transformer newJaxbFromXmlTransformer(Unmarshaller unmarshaller);
+
+    Transformer newJaxbToXmlTransformer(Marshaller marshaller);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JmsMessengerProvider.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/JmsMessengerProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JmsMessengerProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JmsMessengerProvider.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,17 @@
+package org.drools.runtime.pipeline;
+
+import java.util.Properties;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface JmsMessengerProvider {
+    Service newJmsMessenger(Pipeline pipeline,
+                            Properties properties,
+                            String destinationName,
+                            ResultHandlerFactory resultHandlerFactory);
+
+    Action newJmsUnwrapMessageObject();
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Join.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Join.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Join.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Join.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,14 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface Join
+    extends
+    Emitter,
+    Receiver,
+    Stage {
+    void completed(PipelineContext context);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JxlsTransformerProvider.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/JxlsTransformerProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JxlsTransformerProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/JxlsTransformerProvider.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,13 @@
+package org.drools.runtime.pipeline;
+
+import net.sf.jxls.reader.XLSReader;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface JxlsTransformerProvider {
+    Transformer newJxlsTransformer(XLSReader reader,
+                                   String text);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/KnowledgeRuntimeCommand.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/KnowledgeRuntimeCommand.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/KnowledgeRuntimeCommand.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/KnowledgeRuntimeCommand.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,14 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface KnowledgeRuntimeCommand
+    extends
+    Stage,
+    Emitter,
+    Receiver {
+
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Pipeline.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Pipeline.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Pipeline.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Pipeline.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,14 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface Pipeline
+    extends
+    Stage,
+    Emitter {
+    void insert(Object object,
+                ResultHandler resultHandler);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineContext.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineContext.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,26 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+import java.util.Map;
+
+import org.drools.runtime.CommandExecutor;
+
+public interface PipelineContext {
+
+    ClassLoader getClassLoader();
+
+    Map<String, Object> getProperties();
+
+    void setResult(Object result);
+
+    Object getResult();
+
+    ResultHandler getResultHandler();
+    
+    CommandExecutor getCommandExecutor();
+
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,696 @@
+package org.drools.runtime.pipeline;
+
+import java.util.Properties;
+
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+import net.sf.jxls.reader.XLSReader;
+
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.milyn.Smooks;
+
+import com.thoughtworks.xstream.XStream;
+
+/**
+ * <p>
+ * The PipelineFactory and associated classes are there to help with the automation of getting information
+ * into and out of Drools, especially when using services, such as JMS, and non pojo data sources. Transformers for 
+ * Smooks, JAXB, Xstream and Jxls are povided. Smooks is an ETL tooling and can work with a variety of data sources,
+ * JAXB is a Java standard aimed at working with XSDs, while XStream is a simple and fast xml serialisation framework and finally
+ * Jxls allows for loading of pojos from an excel decision table. minimal information on these technologies will be provided here
+ * and it is expected for the user to consult the relevant user guide for each.
+ * </p>
+ * 
+ * <p>
+ * Pipeline is not meant as a replacement for products like the more powerful Camel, but is aimed as a complimentary
+ * framework that ultimately can be integrated into more powerful pipeline frameworks. Instead it is a simple framework aimed at
+ * the specific Drools use cases.
+ * </p>
+ * 
+ * <p>
+ * In Drools a pipeline is a series of stages that operate on and propagate a given payload. Typically this starts with a Pipeline instance which is 
+ * responsible for taking the payload, creating a PipelineContext for it and propagating that to the first Receiver stage.  Two types of Pipelines
+ * are provided, both requiring a different PipelineContexts. StatefulKnowledgeSessionPipeline and StatelessKnowledgeSessionPipeline. Notice that both
+ * factory methods take the relevant session as an argument.
+ * </p>
+ * <pre>
+ * Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
+ * pipeline.setReceiver( receiver );
+ * </pre> 
+ * 
+ * <p>
+ * A pipeline is then made up of a chain of Stages that can implement both the Emitter and the Receiver interfaces. The Emitter interface means the stage
+ * can propagate a payload and the Receiver interface means it can receive a payload. This is why the Pipeline interface only implements Emitter and Stage
+ * and not Receiver, as it is the first instance in the chain. The Stage interface allows a custom exception handler to be set on the stage.
+ * </p>
+ * <pre>
+ * Transformer transformer = PipelineFactory.newXStreamFromXmlTransformer( xstream );
+ * transformer.setStageExceptionHandler( new StageExceptionHandler() { .... } );
+ * </pre>
+ * 
+ * <p>
+ * The Transformer interface above extends both Stage, Emitter and Receiver, other than providing those interface methods as a single type, it's other role
+ * is that of a marker interface that indicates the role of the instance that implements it. We have several other marker interfaces such as Expression and
+ * Action,  both of which also extend Stage, Emitter and Receiver. One of the stages should be responsible for setting a result value on the PipelineContext. It is the role of the ResultHandler interface, that
+ * the user implements that is responsible for executing on these results or simply setting them an object that the user can retrieve them from.
+ * </p>
+ * <pre>
+ * ResultHandler resultHandler = new ResultHandlerImpl();
+ * pipeline.insert( factHandle, resultHandler );  
+ * System.out.println( resultHandler );
+ * ...
+ * public class ResultHandlerImpl implements ResultHandler {
+ *     Object result;
+ *
+ *     public void handleResult(Object result) {
+ *         this.result = result;
+ *     }
+ *
+ *     public Object getResult() {
+ *         return this.result;
+ *     }
+ * }   
+ * </pre>
+ * 
+ * <p>
+ * while the above example shows a simple handler that simply assigns the result to a field that the user can access, it could do more complex work
+ * like sending the object as a message.
+ * </p>
+ * 
+ * <p>
+ * Pipeline is provides an adapter to insert the payload and internally create the correct PipelineContext. Two types of Pipelines
+ * are provided, both requiring a different PipelineContext. StatefulKnowledgeSessionPipeline and StatelessKnowledgeSessionPipeline.
+ * Pipeline itself implements both Stage and Emitter, this means it's a Stage in a pipeline and emits the payload to a receiver. It does
+ * not implement Receiver itself, as it the start adapter for the pipeline. PipelineFactory provides methods to create both of the two
+ * Pipeline. StatefulKnowledgeSessionPipeline is constructed as below, with the receiver set
+ * </p>
+ * 
+ * <p>
+ * In general it easier to construct the pipelines in reverse, for example the following one handles loading xml data from disk, 
+ * transforming it with xstream and then inserting the object:
+ * </p
+ * <pre>
+ * // Make the results, in this case the FactHandles, available to the user 
+ * Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+ *
+ * // Insert the transformed object into the session associated with the PipelineContext
+ * KnowledgeRuntimeCommand insertStage = PipelineFactory.newStatefulKnowledgeSessionInsert();
+ * insertStage.setReceiver( executeResultHandler );
+ *       
+ * // Create the transformer instance and create the Transformer stage, where we are going from Xml to Pojo.
+ * XStream xstream = new XStream();
+ * Transformer transformer = PipelineFactory.newXStreamFromXmlTransformer( xstream );
+ * transformer.setReceiver( insertStage );
+ *
+ * // Create the start adapter Pipeline for StatefulKnowledgeSessions
+ * Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
+ * pipeline.setReceiver( transformer );
+ *
+ * // Instantiate a simple result handler and load and insert the XML
+ * ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+ * pipeline.insert( ResourceFactory.newClassPathResource( "path/facts.xml", getClass() ),
+ *                  resultHandler );
+ * </pre>
+ * 
+ * <p>
+ * While the above example is for loading a resource from disk it is also possible to work from a running messaging service. Drools currently
+ * provides a single Service for JMS, called JmsMessenger.  Support for other Services will be added later. Below shows part of a unit test which 
+ * illustrates part of the JmsMessenger in action
+ * </p>
+ * 
+ * <pre>
+ * // as this is a service, it's more likely the results will be logged or sent as a return message 
+ * Action resultHandlerStage = PipelineFactory.newExecuteResultHandler();
+ *
+ * // Insert the transformed object into the session associated with the PipelineContext
+ * KnowledgeRuntimeCommand insertStage = PipelineFactory.newStatefulKnowledgeSessionInsert();
+ * insertStage.setReceiver( resultHandlerStage );
+ *
+ * // Create the transformer instance and create the Transformer stage, where we are going from Xml to Pojo. Jaxb needs an array of the available classes
+ * JAXBContext jaxbCtx = KnowledgeBuilderHelper.newJAXBContext( classNames,
+ *                                                              kbase );
+ * Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
+ * Transformer transformer = PipelineFactory.newJaxbFromXmlTransformer( unmarshaller );
+ * transformer.setReceiver( insertStage );
+ *
+ * // payloads for JMS arrive in a Message wrapper, we need to unwrap this object
+ * Action unwrapObjectStage = PipelineFactory.newJmsUnwrapMessageObject();
+ * unwrapObjectStage.setReceiver( transformer );
+ *
+ * // Create the start adapter Pipeline for StatefulKnowledgeSessions
+ * Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
+ * pipeline.setReceiver( unwrapObjectStage );
+ *
+ * // Services, like JmsMessenger take a ResultHandlerFactory implementation, this is because a result handler must be created for each incoming message.
+ * ResultHandleFactoryImpl factory = new ResultHandleFactoryImpl();
+ * Service messenger = PipelineFactory.newJmsMessenger( pipeline,
+ *                                                      props,
+ *                                                      destinationName,
+ *                                                      factory );
+ * messenger.start();
+ * </pre>
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ */
+
+public class PipelineFactory {
+
+    private static CorePipelineProvider       corePipelineProvider;
+
+    private static JaxbTransformerProvider    jaxbPipelineProvider;
+
+    private static SmooksTransformerProvider  smooksPipelineProvider;
+
+    private static XStreamTransformerProvider xstreamPipelineProvider;
+
+    private static JxlsTransformerProvider    jxlsPipelineProvider;
+
+    private static JmsMessengerProvider       jmsMessengerProvider;
+
+    /**
+     * Construct a new Pipeline to be used when interacting with a StatefulKnowledgeSession.
+     * It assumes that the default entry point will be used for any insertions.
+     * 
+     * @param ksession
+     * @return
+     */
+    public static Pipeline newStatefulKnowledgeSessionPipeline(StatefulKnowledgeSession ksession) {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionPipeline( ksession );
+    }
+
+    /**
+     * Construct a new Pipeline to be used when interacting with a StatefulKnowledgeSession. The entry point
+     * to be used is specified as s String.
+     * 
+     * @param ksession
+     * @param entryPointName
+     * @return
+     */
+    public static Pipeline newStatefulKnowledgeSessionPipeline(StatefulKnowledgeSession ksession,
+                                                               String entryPointName) {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionPipeline( ksession,
+                                                                              entryPointName );
+    }
+
+    /**
+     * Construct a new Pipeline to be used when interacting with StatelessKnowledgeSessions.
+     * @param ksession
+     * @return
+     */
+    public static Pipeline newStatelessKnowledgeSessionPipeline(StatelessKnowledgeSession ksession) {
+        return getCorePipelineProvider().newStatelessKnowledgeSessionPipeline( ksession );
+    }
+    
+    
+    public static KnowledgeRuntimeCommand newCommandExecutor() {
+        return getCorePipelineProvider().newCommandExecutor();
+    }    
+
+    
+    public static KnowledgeRuntimeCommand newInsertElementsCommand() {
+        return getCorePipelineProvider().newInsertElementsCommand();
+    }
+
+    public static KnowledgeRuntimeCommand newInsertObjectCommand() {
+        return getCorePipelineProvider().newInsertObjectCommand();
+    }    
+    
+    /**
+     * Insert the payload into the StatefulKnowledgeSesssion referenced in the context. This stage
+     * expects the returned FactHandles to be stored in a HashMap of the PipelineContext result property.
+     * @return
+     */
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionInsert() {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionInsert();
+    }
+
+    /**
+     * The payload here is expected to be a String and the global will be set on the PipelineContext result property. The propagating
+     * object will also be switched to the results.
+     * @return
+     */
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionGetGlobal() {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionGetGlobal();
+    }
+
+    /**
+     * Expects the payload to be a Map<String, Object> which it will iterate and set each global on the StatefulKnowledgeSession
+     * .
+     * @return
+     */
+    
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionSetGlobal() {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionSetGlobal();
+    }
+
+    /**
+     * Expects the payload to be a FactHandle, the associated insert object will be set on the PipelineContext result property and
+     * the result itself will also be propagated.
+     * @return
+     */
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionGetObject() {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionGetObject();
+    }
+
+    /**
+     * Expects the payload to be any object, that object will be set as a global using the given identifier.
+     * @param identifier
+     * @return
+     */
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionSetGlobal(String identifier) {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionSetGlobal( identifier );
+    }
+
+    /**
+     * The payload is inserted as a Signal of a given event type.
+     * 
+     * @param eventType
+     * @return
+     */
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionSignalEvent(String eventType) {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionSignalEvent( eventType );
+    }
+
+    /**
+     * The payload is inserted as a Signal of a given event type for a specific process instance.
+     * @param eventType
+     * @param id
+     * @return
+     */
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionSignalEvent(String eventType,
+                                                                                 long id) {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionSignalEvent( eventType,
+                                                                                 id );
+    }
+
+    /**
+     * Start a process of the given id. The payload is expected to be a Map and is used for the process variables.
+     * @param id
+     * @return
+     */
+    public static KnowledgeRuntimeCommand newStatefulKnowledgeSessionStartProcess(String id) {
+        return getCorePipelineProvider().newStatefulKnowledgeSessionStartProcess( id );
+    }
+
+    /**
+     * This assigns the propagating payload object to the PipelineContext.result property
+     * @return
+     */
+    public static Action newAssignObjectAsResult() {
+        return getCorePipelineProvider().newAssignObjectAsResult();
+    }
+
+    /**
+     * When inserting into a Pipeline a ResultHandler may be passed. This stage will execute the user implemented class.
+     * @return
+     */
+    public static Action newExecuteResultHandler() {
+        return getCorePipelineProvider().newExecuteResultHandler();
+    }
+
+    /**
+     * Create a new MVEL action
+     * @param action
+     * @return
+     */
+    public static Action newMvelAction(String action) {
+        return getCorePipelineProvider().newMvelAction( action );
+    }
+
+    /**
+     * Creat a new MVEL expression, the payload will be set to the results of the expression.
+     * @param expression
+     * @return
+     */
+    public static Expression newMvelExpression(String expression) {
+        return getCorePipelineProvider().newMvelExpression( expression );
+    }
+
+    /**
+     * Iterates the Iterable object and propagate each element in turn.
+     * @return
+     */
+    public static Splitter newIterateSplitter() {
+        return getCorePipelineProvider().newIterateSplitter();
+    }
+
+    /**
+     * Collect each propagated item into a list, this is used as part of a Splitter.
+     * The Join should be set on the splitter using the setJoin method, this allows the Splitter
+     * to signal the join when it has propagated all the elements of the Iterable object.
+     * @return
+     */
+    public static Join newListCollectJoin() {
+        return getCorePipelineProvider().newListCollectJoin();
+    }
+
+    /**
+     * Creates a new JmsMessenger which runs as a service in it's own thread. It expects an existing JNDI entry for "ConnectionFactory"
+     * Which will be used to create the MessageConsumer which will feed into the specified pipeline.
+     * 
+     * <pre>
+     * // as this is a service, it's more likely the results will be logged or sent as a return message 
+     * Action resultHandlerStage = PipelineFactory.newExecuteResultHandler();
+     *
+     * // Insert the transformed object into the session associated with the PipelineContext
+     * KnowledgeRuntimeCommand insertStage = PipelineFactory.newStatefulKnowledgeSessionInsert();
+     * insertStage.setReceiver( resultHandlerStage );
+     *
+     * // Create the transformer instance and create the Transformer stage, where we are going from Xml to Pojo. Jaxb needs an array of the available classes
+     * JAXBContext jaxbCtx = KnowledgeBuilderHelper.newJAXBContext( classNames,
+     *                                                              kbase );
+     * Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
+     * Transformer transformer = PipelineFactory.newJaxbFromXmlTransformer( unmarshaller );
+     * transformer.setReceiver( insertStage );
+     *
+     * // payloads for JMS arrive in a Message wrapper, we need to unwrap this object
+     * Action unwrapObjectStage = PipelineFactory.newJmsUnwrapMessageObject();
+     * unwrapObjectStage.setReceiver( transformer );
+     *
+     * // Create the start adapter Pipeline for StatefulKnowledgeSessions
+     * Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
+     * pipeline.setReceiver( unwrapObjectStage );
+     *
+     * // Services, like JmsMessenger take a ResultHandlerFactory implementation, this is because a result handler must be created for each incoming message.
+     * ResultHandleFactoryImpl factory = new ResultHandleFactoryImpl();
+     * Service messenger = PipelineFactory.newJmsMessenger( pipeline,
+     *                                                      props,
+     *                                                      destinationName,
+     *                                                      factory );
+     * messenger.start();
+     * </pre>
+     * @param pipeline
+     * @param properties
+     * @param destinationName
+     * @param resultHandlerFactory
+     * @return
+     */
+    public static Service newJmsMessenger(Pipeline pipeline,
+                                          Properties properties,
+                                          String destinationName,
+                                          ResultHandlerFactory resultHandlerFactory) {
+        return getJmsMessengerProvider().newJmsMessenger( pipeline,
+                                                          properties,
+                                                          destinationName,
+                                                          resultHandlerFactory );
+    }
+
+    /**
+     * Unwrap the payload from the JMS Message and propagate it as the payload object.
+     * @return
+     */
+    public static Action newJmsUnwrapMessageObject() {
+        return getJmsMessengerProvider().newJmsUnwrapMessageObject();
+    }
+
+    /**
+     * <p>
+     * Transforms from Source to Pojo using Smooks, the resulting pojo is set as the propagating object. 
+     * </p>
+     * 
+     * <pre>
+     * // Instantiate Smooks with the config...
+     * Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
+     *
+     * Transformer transformer = PipelineFactory.newSmooksFromSourceTransformer( smooks,
+     *                                                                           "orderItem" );
+     * transformer.setReceiver( insertStage );
+     * </pre>
+     * 
+     * @param smooks
+     * @param rootId
+     * @return
+     */
+    public static Transformer newSmooksFromSourceTransformer(Smooks smooks,
+                                                             String rootId) {
+        return getSmooksPipelineProvider().newSmooksFromSourceTransformer( smooks,
+                                                                           rootId );
+    }
+
+    /**
+     * <p>
+     * Transforms from Pojo to Source using Smooks, the resulting Source is set as the propagating object
+     * </p>
+     * 
+     * <pre>
+     * // Instantiate Smooks with the config...
+     * Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
+     *
+     * Transformer transformer = PipelineFactory.newSmooksToSourceTransformer( smooks );
+     * transformer.setReceiver( receiver );
+     * </pre>
+     * 
+     * @param smooks
+     * @param rootId
+     * @return
+     */    
+    public static Transformer newSmooksToSourceTransformer(Smooks smooks) {
+        return getSmooksPipelineProvider().newSmooksToSourceTransformer( smooks );
+    }
+
+    /**
+     * Transforms from XML to Pojo using JAXB, the resulting pojo is set as the propagating object. 
+     * 
+     * <pre>
+     * JAXBContext jaxbCtx = KnowledgeBuilderHelper.newJAXBContext( classNames,
+     *                                                                kbase );
+     * Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
+     * Transformer transformer = PipelineFactory.newJaxbFromXmlTransformer( unmarshaller );
+     * transformer.setReceiver( receiver );
+     * </pre>
+     *
+     * Don't forget the XSD model must be generated, using XJC at runtime into the KnowledgeBase first,
+     * Using KnowledgeBuilderHelper.addXsdModel:
+     * <pre>
+     * Options xjcOpts = new Options();
+     * xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
+     * KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+     *
+     * String[] classNames = KnowledgeBuilderHelper.addXsdModel( ResourceFactory.newClassPathResource( "order.xsd",
+     *                                                                                                 getClass() ),
+     *                                                           kbuilder,
+     *                                                           xjcOpts,
+     *                                                           "xsd" );
+     * </pre>
+     * @param unmarshaller
+     * @return
+     */
+    public static Transformer newJaxbFromXmlTransformer(Unmarshaller unmarshaller) {
+        return getJaxbPipelineProvider().newJaxbFromXmlTransformer( unmarshaller );
+    }
+
+    /**
+     * Transforms from Pojo to XML using JAXB, the resulting XML is set as the propagating object. 
+     * <pre>
+     *  JAXBContext jaxbCtx = KnowledgeBuilderHelper.newJAXBContext( classNames,
+     *                                                               kbase );
+     *  Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
+     *  Transformer transformer = PipelineFactory.newJaxbFromXmlTransformer( unmarshaller );
+     *  transformer.setReceiver( receiver );
+     *
+     * 
+     * @param marshaller
+     * @return
+     */
+    public static Transformer newJaxbToXmlTransformer(Marshaller marshaller) {
+        return getJaxbPipelineProvider().newJaxbToXmlTransformer( marshaller );
+    }
+
+    /**
+     * <p>
+     * Transforms from XML to Pojo using XStream, the resulting Pojo is set as the propagating object. 
+     * </p>
+     * 
+     * <pre>
+     * Marshaller marshaller = jaxbCtx.createMarshaller();
+     * Transformer transformer = PipelineFactory.newJaxbToXmlTransformer( marshaller );
+     * transformer.setReceiver( receiver );
+     * </pre>
+     * 
+     * <p>
+     * The BatchExecutionHelper factory provides a pre-configured XStream instance used for marshalling Commands, specifically
+     * the BatchExecutionCommand and the ExecutionResults. It also contains docs on the xml formant and on how to use the pipeline 
+     * for marshalling BatchExecutionCommand and ExecutionResults.
+     * </p>
+     * 
+     * @param xstream
+     * @return
+     */
+    public static Transformer newXStreamFromXmlTransformer(XStream xstream) {
+        return getXStreamTransformerProvider().newXStreamFromXmlTransformer( xstream );
+    }
+
+    /**
+     * <p>
+     * Transforms from Pojo to XML using XStream, the resulting XML is set as the propagating object. 
+     * </p>
+     * 
+     * <pre>
+     * XStream xstream = new XStream();
+     * Transformer transformer = PipelineFactory.newXStreamToXmlTransformer( xstream );
+     * transformer.setReceiver( receiver );
+     * </pre>
+     * 
+     * <p>
+     * The BatchExecutionHelper factory provides a pre-configured XStream instance used for marshalling Commands, specifically
+     * the BatchExecutionCommand and the ExecutionResults. It also contains docs on the xml formant and on how to use the pipeline 
+     * for marshalling BatchExecutionCommand and ExecutionResults.
+     * </p>
+     * @param xstream
+     * @return
+     */    
+    public static Transformer newXStreamToXmlTransformer(XStream xstream) {
+        return getXStreamTransformerProvider().newXStreamToXmlTransformer( xstream );
+    }
+
+    /**
+     * Transforms from an Excel spread to a Map of pojos pojos using jXLS, the resulting map is set as the propagating object.
+     * You may need to use splitters and MVEL expressions to split up the transformation to insert individual pojos.
+     * 
+     * Note you must provde an XLSReader, which references the mapping file and also an MVEL string which will instantiate the map.
+     * The mvel expression is pre-compiled but executedon each usage of the transformation.
+     * 
+     * <pre>
+     * XLSReader mainReader = ReaderBuilder.buildFromXML( ResourceFactory.newClassPathResource( "departments.xml", getClass() ).getInputStream() );
+     * Transformer transformer = PipelineFactory.newJxlsTransformer(mainReader, "[ 'departments' : new java.util.ArrayList(), 'company' : new org.drools.runtime.pipeline.impl.Company() ]");
+     * </pre>
+     * 
+     * @param xlsReader
+     * @param text
+     * @return
+     */
+    public static Transformer newJxlsTransformer(XLSReader xlsReader,
+                                                 String text) {
+        return getJxlsTransformerProvider().newJxlsTransformer( xlsReader,
+                                                                text );
+    }
+
+    private static synchronized void setCorePipelineProvider(CorePipelineProvider provider) {
+        PipelineFactory.corePipelineProvider = provider;
+    }
+
+    private static synchronized CorePipelineProvider getCorePipelineProvider() {
+        if ( corePipelineProvider == null ) {
+            loadCorePipelineProvider();
+        }
+        return corePipelineProvider;
+    }
+
+    private static void loadCorePipelineProvider() {
+        try {
+            Class<CorePipelineProvider> cls = (Class<CorePipelineProvider>) Class.forName( "org.drools.runtime.pipeline.impl.CorePipelineProviderImpl" );
+            setCorePipelineProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new RuntimeException( "org.drools.runtime.pipeline.impl.CorePipelineProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }
+
+    private static synchronized void setJaxbTransformerProvider(JaxbTransformerProvider provider) {
+        PipelineFactory.jaxbPipelineProvider = provider;
+    }
+
+    private static synchronized JaxbTransformerProvider getJaxbPipelineProvider() {
+        if ( jaxbPipelineProvider == null ) {
+            loadJaxbTransformerProvider();
+        }
+        return jaxbPipelineProvider;
+    }
+
+    private static void loadJaxbTransformerProvider() {
+        try {
+            Class<JaxbTransformerProvider> cls = (Class<JaxbTransformerProvider>) Class.forName( "org.drools.runtime.pipeline.impl.JaxbTransformerProviderImpl" );
+            setJaxbTransformerProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new RuntimeException( "Provider org.drools.runtime.pipeline.impl.JaxbTransformerProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }
+
+    private static synchronized void setSmooksTransformerProvider(SmooksTransformerProvider provider) {
+        PipelineFactory.smooksPipelineProvider = provider;
+    }
+
+    private static synchronized SmooksTransformerProvider getSmooksPipelineProvider() {
+        if ( smooksPipelineProvider == null ) {
+            loadSmooksTransformerProvider();
+        }
+        return smooksPipelineProvider;
+    }
+
+    private static void loadSmooksTransformerProvider() {
+        try {
+            Class<SmooksTransformerProvider> cls = (Class<SmooksTransformerProvider>) Class.forName( "org.drools.runtime.pipeline.impl.SmooksTransformerProviderImpl" );
+            setSmooksTransformerProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new RuntimeException( "Provider org.drools.runtime.pipeline.impl.SmooksTransformerProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }
+
+    private static synchronized void setXStreamTransformerProvider(XStreamTransformerProvider provider) {
+        PipelineFactory.xstreamPipelineProvider = provider;
+    }
+
+    private static synchronized XStreamTransformerProvider getXStreamTransformerProvider() {
+        if ( xstreamPipelineProvider == null ) {
+            loadXStreamTransformerProvider();
+        }
+        return xstreamPipelineProvider;
+    }
+
+    private static void loadXStreamTransformerProvider() {
+        try {
+            Class<XStreamTransformerProvider> cls = (Class<XStreamTransformerProvider>) Class.forName( "org.drools.runtime.pipeline.impl.XStreamTransformerProviderImpl" );
+            setXStreamTransformerProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new RuntimeException( "Provider org.drools.runtime.pipeline.impl.XStreamTransformerProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }
+
+    private static synchronized void setJxlsTransformerProvider(JxlsTransformerProvider provider) {
+        PipelineFactory.jxlsPipelineProvider = provider;
+    }
+
+    private static synchronized JxlsTransformerProvider getJxlsTransformerProvider() {
+        if ( jxlsPipelineProvider == null ) {
+            loadJxlsTransformerProvider();
+        }
+        return jxlsPipelineProvider;
+    }
+
+    private static void loadJxlsTransformerProvider() {
+        try {
+            Class<JxlsTransformerProvider> cls = (Class<JxlsTransformerProvider>) Class.forName( "org.drools.runtime.pipeline.impl.JxlsTransformer$JxlsTransformerProviderImpl" );
+            setJxlsTransformerProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new RuntimeException( "Provider org.drools.runtime.pipeline.impl.JxlsTransformer$JxlsTransformerProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }
+
+    private static synchronized void setJmsMessengerProvider(JmsMessengerProvider provider) {
+        PipelineFactory.jmsMessengerProvider = provider;
+    }
+
+    private static synchronized JmsMessengerProvider getJmsMessengerProvider() {
+        if ( jmsMessengerProvider == null ) {
+            loadJmsMessengerProvider();
+        }
+        return jmsMessengerProvider;
+    }
+
+    private static void loadJmsMessengerProvider() {
+        try {
+            Class<JmsMessengerProvider> cls = (Class<JmsMessengerProvider>) Class.forName( "org.drools.runtime.pipeline.impl.JmsMessengerProviderImpl" );
+            setJmsMessengerProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new RuntimeException( "Provider org.drools.runtime.pipeline.impl.JmsMessengerProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Receiver.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Receiver.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Receiver.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Receiver.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,12 @@
+package org.drools.runtime.pipeline;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface Receiver {
+    void receive(Object object,
+                 PipelineContext context);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandler.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/ResultHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandler.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,10 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface ResultHandler {
+    public void handleResult(Object object);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandlerFactory.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/ResultHandlerFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandlerFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ResultHandlerFactory.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,10 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface ResultHandlerFactory {
+    ResultHandler newResultHandler();
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Service.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Service.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Service.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Service.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,20 @@
+package org.drools.runtime.pipeline;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface Service {
+    void start();
+
+    void stop();
+
+    void setServiceExceptionHandler(ServiceExceptionHandler exceptionHandler);
+
+    void handleException(Service service,
+                         Object object,
+                         Exception exception);
+
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ServiceExceptionHandler.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/ServiceExceptionHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ServiceExceptionHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/ServiceExceptionHandler.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,13 @@
+package org.drools.runtime.pipeline;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface ServiceExceptionHandler {
+    public void handleException(Service service,
+                                Object object,
+                                Exception exception);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/SmooksTransformerProvider.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/SmooksTransformerProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/SmooksTransformerProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/SmooksTransformerProvider.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,16 @@
+package org.drools.runtime.pipeline;
+
+import org.milyn.Smooks;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface SmooksTransformerProvider {
+    Transformer newSmooksFromSourceTransformer(Smooks smooks,
+                                               String rootId);
+
+    Transformer newSmooksToSourceTransformer(Smooks smooks);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Splitter.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Splitter.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Splitter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Splitter.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,15 @@
+package org.drools.runtime.pipeline;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface Splitter
+    extends
+    Emitter,
+    Receiver,
+    Stage {
+    void setJoin(Join join);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Stage.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Stage.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Stage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Stage.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,10 @@
+package org.drools.runtime.pipeline;
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface Stage {
+    public void setStageExceptionHandler(StageExceptionHandler exceptionHandler);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StageExceptionHandler.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/StageExceptionHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StageExceptionHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StageExceptionHandler.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,13 @@
+package org.drools.runtime.pipeline;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface StageExceptionHandler {
+    public void handleException(Stage stage,
+                                Object object,
+                                Exception exception);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatefulKnowledgeSessionPipelineContext.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/StatefulKnowledgeSessionPipelineContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatefulKnowledgeSessionPipelineContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatefulKnowledgeSessionPipelineContext.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,15 @@
+package org.drools.runtime.pipeline;
+
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface StatefulKnowledgeSessionPipelineContext
+    extends
+    PipelineContext {
+    StatefulKnowledgeSession getStatefulKnowledgeSession();
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,18 @@
+package org.drools.runtime.pipeline;
+
+import org.drools.runtime.StatelessKnowledgeSession;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface StatelessKnowledgeSessionPipelineContext
+    extends
+    PipelineContext {
+
+    StatelessKnowledgeSession getStatelessKnowledgeSession();
+
+
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Transformer.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/Transformer.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Transformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/Transformer.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,15 @@
+package org.drools.runtime.pipeline;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface Transformer
+    extends
+    Emitter,
+    Receiver,
+    Stage {
+
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/XStreamTransformerProvider.java (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/XStreamTransformerProvider.java)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/XStreamTransformerProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/XStreamTransformerProvider.java	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,15 @@
+package org.drools.runtime.pipeline;
+
+import com.thoughtworks.xstream.XStream;
+
+
+/**
+ * 
+ * <p>This api is experimental and thus the classes and the interfaces returned are subject to change.</p>
+ *
+ */
+public interface XStreamTransformerProvider {
+    Transformer newXStreamFromXmlTransformer(XStream xstream);
+
+    Transformer newXStreamToXmlTransformer(XStream xstream);
+}

Copied: labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/package.html (from rev 33970, labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/package.html)
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/package.html	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/src/main/java/org/drools/runtime/pipeline/package.html	2010-07-17 02:51:46 UTC (rev 33977)
@@ -0,0 +1,9 @@
+<body>
+ <p>
+ The PipelineFactory and associated classes are there to help with the automation of getting information
+ into and out of Drools. 
+ </p>
+ <p>
+ Please see PipelineFactory for more detailed information.
+ </p>
+</body>
\ No newline at end of file

Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml	2010-07-17 02:50:17 UTC (rev 33976)
+++ labs/jbossrules/trunk/pom.xml	2010-07-17 02:51:46 UTC (rev 33977)
@@ -1484,7 +1484,24 @@
             <version>${camel-version}</version>
             <type>test-jar</type>
             <scope>test</scope>
-        </dependency>		
+        </dependency>
+
+      <dependency>
+      	<groupId>xalan</groupId>
+		<artifactId>xalan</artifactId>
+		<version>2.7.1</version>
+	</dependency>
+	
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-core</artifactId>
+         <version>5.3.1</version>
+      </dependency>
+      <dependency>
+         <groupId>simple-jndi</groupId>
+         <artifactId>simple-jndi</artifactId>
+         <version>0.11.4</version>
+        </dependency>			
 		
       </dependencies>
    </dependencyManagement>



More information about the jboss-svn-commits mailing list