[jboss-svn-commits] JBL Code SVN: r29598 - in labs/jbossrules/trunk: drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 13 21:13:50 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-10-13 21:13:50 -0400 (Tue, 13 Oct 2009)
New Revision: 29598

Added:
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/NamedXstreamLookupStrategy.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlVsmTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamResolverStrategy.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamToXmlVsmTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/ToXmlNodeTransformer.java
Modified:
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamTransformerProviderImpl.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
   labs/jbossrules/trunk/drools-simulator/src/main/java/org/drools/simulation/impl/Simulator.java
Log:
JBRULES-2269 Virtual Service Manager
-now works for xstream
-split into remote/local

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/NamedXstreamLookupStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/NamedXstreamLookupStrategy.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/NamedXstreamLookupStrategy.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -0,0 +1,23 @@
+/**
+ * 
+ */
+package org.drools.runtime.pipeline.impl;
+
+import java.util.Map;
+
+import com.thoughtworks.xstream.XStream;
+
+public class NamedXstreamLookupStrategy
+    implements
+    XStreamResolverStrategy {
+    private Map<String, XStream> xstreams;
+    
+    public NamedXstreamLookupStrategy(Map<String, XStream> xstreams) {
+        this.xstreams = xstreams;
+    }
+
+    public XStream lookup(String name) {
+        return this.xstreams.get( name );
+    }
+    
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java	2009-10-14 01:09:08 UTC (rev 29597)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlTransformer.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -14,7 +14,7 @@
 import com.thoughtworks.xstream.XStream;
 
 public class XStreamFromXmlTransformer extends BaseEmitter
-    implements
+    implements  
     Transformer {
     private XStream                    xstream;   
 
@@ -47,4 +47,8 @@
         emit( result,
               context );
     }
+    
+    public void sniff(Reader reader) {
+        
+    }
 }

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlVsmTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlVsmTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamFromXmlVsmTransformer.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -0,0 +1,78 @@
+/**
+ * 
+ */
+package org.drools.runtime.pipeline.impl;
+
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.Transformer;
+import org.drools.vsm.ServiceManager;
+import org.w3c.dom.Document;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomReader;
+
+public class XStreamFromXmlVsmTransformer extends BaseEmitter
+    implements
+    Transformer {
+
+    private XStreamResolverStrategy strategy;
+
+    public XStreamFromXmlVsmTransformer(XStreamResolverStrategy strategy) {
+        this.strategy = strategy;
+    }
+    
+    public void receive(Object object,
+                        PipelineContext context) {            
+        Object payload = null;
+        try {
+            Document d = ( Document ) object;
+            
+            String name = d.getDocumentElement().getAttribute( "lookup" );            
+            
+            XStream xstream = this.strategy.lookup( name );
+            
+            if ( xstream == null ) {
+                throw new IllegalArgumentException( "Unable to lookup XStream parser using name '" + name + "'" );
+            }
+            
+            ServiceManagerPipelineContextImpl vsmContext = ( ServiceManagerPipelineContextImpl ) context;            
+            ServiceManager sm = vsmContext.getServiceManager();
+            CommandExecutor executor  = sm.lookup( name );
+            
+            if ( executor == null ) {
+                throw new IllegalArgumentException( "Unable to lookup CommandExecutor using name '" + name + "'" );
+            }            
+            
+            vsmContext.setCommandExecutor( executor );
+            
+            ClassLoader cl = null;
+            if ( executor instanceof StatefulKnowledgeSessionImpl ) {
+                cl = ((ReteooRuleBase)(( StatefulKnowledgeSessionImpl ) executor).getRuleBase()).getRootClassLoader();
+                xstream.setClassLoader( cl );
+            } else if ( executor instanceof StatelessKnowledgeSessionImpl ) {
+                cl = ((ReteooRuleBase)(( StatelessKnowledgeSessionImpl ) executor).getRuleBase()).getRootClassLoader();
+                
+            } else {
+                throw new IllegalArgumentException( "Unable to set ClassLoader on " + executor );
+            }
+            
+            xstream.setClassLoader( cl );
+            vsmContext.setClassLoader( cl );
+            
+            payload = xstream.unmarshal( new DomReader( d ) );  
+            
+            context.getProperties().put( "xstream-instance", xstream );
+            
+        } catch ( Exception e ) {
+            handleException( this,
+                             object,
+                             e );
+        }
+        emit( payload,
+              context );
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamResolverStrategy.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamResolverStrategy.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamResolverStrategy.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -0,0 +1,10 @@
+/**
+ * 
+ */
+package org.drools.runtime.pipeline.impl;
+
+import com.thoughtworks.xstream.XStream;
+
+public interface XStreamResolverStrategy {
+    XStream lookup(String name);
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamToXmlVsmTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamToXmlVsmTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamToXmlVsmTransformer.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -0,0 +1,39 @@
+/**
+ * 
+ */
+package org.drools.runtime.pipeline.impl;
+
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.Transformer;
+import org.drools.vsm.ServiceManager;
+import org.w3c.dom.Document;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomReader;
+
+public class XStreamToXmlVsmTransformer extends BaseEmitter
+    implements
+    Transformer {
+    
+    public void receive(Object object,
+                        PipelineContext context) { 
+        XStream xstream = ( XStream ) context.getProperties().get( "xstream-instance" );
+        xstream.setClassLoader( context.getClassLoader() );
+        
+        Object result = null;
+        try {
+            result = xstream.toXML( object );
+        } catch ( Exception e ) {
+            handleException( this,
+                             object,
+                             e );
+        }
+        
+        emit( result,
+              context );
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamTransformerProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamTransformerProviderImpl.java	2009-10-14 01:09:08 UTC (rev 29597)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/main/java/org/drools/runtime/pipeline/impl/XStreamTransformerProviderImpl.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -7,7 +7,7 @@
 import org.drools.runtime.pipeline.XStreamTransformerProvider;
 
 import com.thoughtworks.xstream.XStream;
-
+ 
 public class XStreamTransformerProviderImpl implements XStreamTransformerProvider {
     public Transformer newXStreamFromXmlTransformer(XStream xstream) {
         return new XStreamFromXmlTransformer( xstream );

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/ToXmlNodeTransformer.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/ToXmlNodeTransformer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/ToXmlNodeTransformer.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -0,0 +1,52 @@
+package org.drools.runtime.pipeline.impl;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.drools.io.Resource;
+import org.drools.runtime.pipeline.PipelineContext;
+import org.drools.runtime.pipeline.Transformer;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+public class ToXmlNodeTransformer extends BaseEmitter
+    implements
+    Transformer {
+
+    public void receive(Object object,
+                        PipelineContext context) {
+        // 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 );
+        }
+
+        emit( d,
+              context );
+
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	2009-10-14 01:09:08 UTC (rev 29597)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -53,6 +53,8 @@
 import org.drools.runtime.rule.FactHandle;
 import org.drools.runtime.rule.QueryResults;
 import org.drools.runtime.rule.QueryResultsRow;
+import org.drools.vsm.ServiceManager;
+import org.drools.vsm.local.ServiceManagerLocalClient;
 import org.xml.sax.SAXException;
 
 import com.thoughtworks.xstream.XStream;
@@ -1797,7 +1799,74 @@
         outXml = (String) resultHandler.getObject();
         assertTrue( outXml.indexOf( "<price>30</price>" ) > -1 );
     }
+    
+    public void testVmsPipeline() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "end\n";
 
+        String inXml = "";
+        inXml += "<batch-execution lookup=\"ksession\" >";
+        inXml += "  <insert out-identifier='outStilton'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        ServiceManager sm = new ServiceManagerLocalClient();
+        
+        StatefulKnowledgeSession ksession = getVmsSessionStateful( sm, ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        
+        sm.register( "ksession1", ksession );
+        
+        XStreamResolverStrategy xstreamStrategy = new XStreamResolverStrategy() {
+            public XStream lookup(String name) {
+                return BatchExecutionHelper.newXStreamMarshaller();
+            }
+            
+        };
+        
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+        getPipelineVms( sm, xstreamStrategy ).insert( inXml, resultHandler );
+        String outXml = (String) resultHandler.getObject();
+
+        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        Cheese stilton = (Cheese) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
+        stilton = (Cheese) ksession.getObject( factHandle );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <result identifier=\"outStilton\">\n";
+        expectedXml += "    <org.drools.Cheese>\n";
+        expectedXml += "      <type>stilton</type>\n";
+        expectedXml += "      <oldPrice>0</oldPrice>\n";
+        expectedXml += "      <price>30</price>\n";
+        expectedXml += "    </org.drools.Cheese>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <fact-handle identifier=\"outStilton\" externalForm=\"" + ((InternalFactHandle) result.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+    }    
+
     private Pipeline getPipeline(StatelessKnowledgeSession ksession) {
         Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
 
@@ -1818,7 +1887,35 @@
 
         return pipeline;
     }
+    
+    private Pipeline getPipelineVms(ServiceManager vsm, XStreamResolverStrategy xstreamResolverStrategy) {
+        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
 
+        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+        assignResult.setReceiver( executeResultHandler );
+
+        //Transformer outTransformer = PipelineFactory.newXStreamToXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+        Transformer outTransformer = new XStreamToXmlVsmTransformer();
+        outTransformer.setReceiver( assignResult );
+
+        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newCommandExecutor();
+        batchExecution.setReceiver( outTransformer );
+
+        //Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+        Transformer inTransformer = new XStreamFromXmlVsmTransformer( xstreamResolverStrategy );
+        inTransformer.setReceiver( batchExecution ); 
+        
+        Transformer domTransformer = new ToXmlNodeTransformer();
+        domTransformer.setReceiver( inTransformer );
+        
+        //Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
+        Pipeline pipeline = new ServiceManagerPipelineImpl(vsm);
+        
+        pipeline.setReceiver( domTransformer );
+
+        return pipeline;
+    }    
+
     private Pipeline getPipelineStateful(StatefulKnowledgeSession ksession) {
         Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
 
@@ -1893,5 +1990,25 @@
 
         return session;
     }
+    
+    private StatefulKnowledgeSession getVmsSessionStateful(ServiceManager sm, Resource resource) throws Exception {
+        KnowledgeBuilder kbuilder = sm.getKnowledgeBuilderFactory().newKnowledgeBuilder();
+        kbuilder.add( resource,
+                      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;
+    }    
+
 }

Modified: labs/jbossrules/trunk/drools-simulator/src/main/java/org/drools/simulation/impl/Simulator.java
===================================================================
--- labs/jbossrules/trunk/drools-simulator/src/main/java/org/drools/simulation/impl/Simulator.java	2009-10-14 01:09:08 UTC (rev 29597)
+++ labs/jbossrules/trunk/drools-simulator/src/main/java/org/drools/simulation/impl/Simulator.java	2009-10-14 01:13:50 UTC (rev 29598)
@@ -148,6 +148,10 @@
         return this.contexts.get( identifier );
     }
     
+    public Context getDefaultContext() {
+        return this.root;
+    }
+    
     public Simulation getSimulation() {
         return this.simulation;
     }



More information about the jboss-svn-commits mailing list