[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