[jboss-svn-commits] JBL Code SVN: r23831 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools/runtime and 10 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Nov 11 22:35:41 EST 2008
Author: mark.proctor at jboss.com
Date: 2008-11-11 22:35:41 -0500 (Tue, 11 Nov 2008)
New Revision: 23831
Added:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java
Log:
JBRULES-1734 Drools API
-Parameters now work for StatelessKnowledgeSessions
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -6,6 +6,7 @@
import org.drools.event.knowledgebase.KnowledgeBaseEventManager;
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
public interface KnowledgeBase extends KnowledgeBaseEventManager {
@@ -22,5 +23,8 @@
StatefulKnowledgeSession newStatefulKnowledgeSession();
+ StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf);
+ StatelessKnowledgeSession newStatelessKnowledgeSession();
+
}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,12 @@
+package org.drools.runtime;
+
+import java.util.Collection;
+import java.util.Map;
+
+public interface FactParams {
+ void setIn(Map<String, ?> in);
+
+ void setOut(Collection<String> out);
+
+ void setInOut(Map<String, ?> inOut);
+}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,17 @@
+package org.drools.runtime;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ *
+ * @author mproctor
+ *
+ */
+public interface GlobalParams {
+ void setIn(Map<String, ?> in);
+
+ void setOut(Collection<String> out);
+
+ void setInOut(Map<String, ?> inOut);
+}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalResolver.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+public interface GlobalResolver {
+ public Object resolveGlobal(String identifier);
+
+ public void setGlobal(String identifier, Object value);
+}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+public interface Parameters {
+ GlobalParams getGlobalParams();
+
+ FactParams getFactParams();
+}
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -8,6 +8,12 @@
void setGlobal(String identifier,
Object object);
+
+ /**
+ * Delegate used to resolve any global names not found in the global map.
+ * @param globalResolver
+ */
+ void setGlobalResolver(GlobalResolver globalResolver);
KnowledgeBase getKnowledgeBase();
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -1,8 +1,22 @@
package org.drools.runtime;
+import org.drools.event.process.ProcessEventManager;
+import org.drools.event.rule.WorkingMemoryEventManager;
import org.drools.runtime.process.StatelessProcessSession;
import org.drools.runtime.rule.StatelessRuleSession;
-public interface StatelessKnowledgeSession extends StatelessRuleSession, StatelessProcessSession {
-
+public interface StatelessKnowledgeSession extends StatelessRuleSession, StatelessProcessSession, WorkingMemoryEventManager, ProcessEventManager {
+
+ /**
+ * Delegate used to resolve any global names not found in the global map.
+ * @param globalResolver
+ */
+ void setGlobalResolver(GlobalResolver globalResolver);
+
+ /**
+ * Sets a global value
+ * @param identifer
+ * @param value
+ */
+ void setGlobal(String identifer, Object value);
}
Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSessionResults.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,9 @@
+package org.drools.runtime;
+
+import java.util.Collection;
+
+public interface StatelessKnowledgeSessionResults {
+ Collection<String> getIdentifiers();
+
+ Object getValue(String identifier);
+}
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -1,5 +1,14 @@
package org.drools.runtime.rule;
+import org.drools.runtime.Parameters;
+import org.drools.runtime.StatelessKnowledgeSessionResults;
+
public interface StatelessRuleSession {
-
+ void executeObject(Object object);
+ void executeIterable(Iterable<?> objects);
+
+ StatelessKnowledgeSessionResults executeObjectWithParameters(Object object, Parameters parameters);
+ StatelessKnowledgeSessionResults executeIterableWithParameters(Iterable<?> objects, Parameters parameters);
+
+ Parameters newParameters();
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RuleDescr.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -263,4 +263,8 @@
public String getParentName() {
return parentName;
}
+
+ public String toString() {
+ return "[Rule name='" + this.name + "']";
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -2,12 +2,18 @@
import java.io.InputStreamReader;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import junit.framework.TestCase;
import org.drools.Cheese;
import org.drools.Cheesery;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseFactory;
@@ -16,8 +22,16 @@
import org.drools.base.CopyIdentifiersGlobalExporter;
import org.drools.base.MapGlobalResolver;
import org.drools.base.ReferenceOriginalGlobalExporter;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeType;
import org.drools.compiler.PackageBuilder;
+import org.drools.definition.KnowledgePackage;
+import org.drools.impl.ParametersImpl;
import org.drools.rule.Package;
+import org.drools.runtime.Parameters;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSessionResults;
import org.drools.spi.GlobalResolver;
public class StatelessSessionTest extends TestCase {
@@ -38,108 +52,212 @@
}
public void testSingleObjectAssert() throws Exception {
- StatelessSession session = getSession();
+ StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
final Cheese stilton = new Cheese( "stilton",
5 );
- session.execute( stilton );
+ session.executeObject( stilton );
assertEquals( "stilton",
list.get( 0 ) );
}
public void testArrayObjectAssert() throws Exception {
- StatelessSession session = getSession();
+ StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
final Cheese stilton = new Cheese( "stilton",
5 );
- session.execute( new Object[]{stilton} );
+ session.executeIterable( Arrays.asList( new Object[]{stilton} ) );
assertEquals( "stilton",
list.get( 0 ) );
}
public void testCollectionObjectAssert() throws Exception {
- StatelessSession session = getSession();
+ StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
final Cheese stilton = new Cheese( "stilton",
5 );
List collection = new ArrayList();
collection.add( stilton );
- session.execute( collection );
+ session.executeIterable( collection );
assertEquals( "stilton",
list.get( 0 ) );
}
public void testSingleObjectAssertWithResults() throws Exception {
- StatelessSession session = getSession();
+ StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
// notice I don't export Cheessery
- session.setGlobalExporter( new CopyIdentifiersGlobalExporter( new String[]{"list"} ) );
+ Parameters parameters = session.newParameters();
+ parameters.getGlobalParams().setOut( Arrays.asList( new String[]{"list"} ) );
final Cheese stilton = new Cheese( "stilton",
5 );
- StatelessSessionResult result = session.executeWithResults( stilton );
+ StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+ parameters );
+
+ assertEquals( 1, results.getIdentifiers().size() );
+ assertTrue( results.getIdentifiers().contains( "list" ));
- assertSame( stilton,
- result.iterateObjects().next() );
-
assertEquals( "stilton",
- ((List) result.getGlobal( "list" )).get( 0 ) );
+ ((List) results.getValue( "list" )).get( 0 ) );
// cheesery should be null
- assertNull( result.getGlobal( "cheesery" ) );
+ assertNull( results.getValue( "cheesery" ) );
}
public void testArrayObjectAssertWithResults() throws Exception {
- StatelessSession session = getSession();
+ StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
// notice I don't export Cheessery
- session.setGlobalExporter( new CopyIdentifiersGlobalExporter( new String[]{"list"} ) );
+ Parameters parameters = session.newParameters();
+ parameters.getGlobalParams().setOut( Arrays.asList( new String[]{"list"} ) );
final Cheese stilton = new Cheese( "stilton",
5 );
- StatelessSessionResult result = session.executeWithResults( new Object[]{stilton} );
+ StatelessKnowledgeSessionResults results = session.executeIterableWithParameters( Arrays.asList( new Object[]{stilton} ),
+ parameters );
- assertSame( stilton,
- result.iterateObjects().next() );
+ assertEquals( 1, results.getIdentifiers().size() );
+ assertTrue( results.getIdentifiers().contains( "list" ));
assertEquals( "stilton",
- ((List) result.getGlobal( "list" )).get( 0 ) );
+ ((List) results.getValue( "list" )).get( 0 ) );
// cheesery should be null
- assertNull( result.getGlobal( "cheesery" ) );
+ assertNull( results.getValue( "cheesery" ) );
}
public void testCollectionObjectAssertWithResults() throws Exception {
- StatelessSession session = getSession();
+ StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
// notice I don't export Cheessery
- session.setGlobalExporter( new CopyIdentifiersGlobalExporter( new String[]{"list"} ) );
+ Parameters parameters = session.newParameters();
+ parameters.getGlobalParams().setOut( Arrays.asList( new String[]{"list"} ) );
final Cheese stilton = new Cheese( "stilton",
5 );
List collection = new ArrayList();
- collection.add( stilton );
- StatelessSessionResult result = session.executeWithResults( collection );
+ collection.add( stilton );
+ StatelessKnowledgeSessionResults results = session.executeIterableWithParameters( collection,
+ parameters );
- assertSame( stilton,
- result.iterateObjects().next() );
+ assertEquals( 1, results.getIdentifiers().size() );
+ assertTrue( results.getIdentifiers().contains( "list" ));
assertEquals( "stilton",
- ((List) result.getGlobal( "list" )).get( 0 ) );
+ ((List) results.getValue( "list" )).get( 0 ) );
// cheesery should be null
- assertNull( result.getGlobal( "cheesery" ) );
+ assertNull( results.getValue( "cheesery" ) );
}
+
+ public void testInAndOutParams() throws Exception {
+ StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
+
+ final Cheese stilton = new Cheese( "stilton",
+ 5 );
+
+ final Cheese cheddar = new Cheese( "cheddar",
+ 25 );
+
+ // notice I don't export Cheessery
+ Parameters parameters = session.newParameters();
+ Map<String, Object> globalsIn = new HashMap<String, Object>();
+ globalsIn.put( "inString", "string" );
+ parameters.getGlobalParams().setIn( globalsIn );
+ parameters.getGlobalParams().setOut( Arrays.asList( new String[]{"list"} ) );
+
+ Map<String, Object> factIn = new HashMap<String, Object>();
+ factIn.put( "inCheese", cheddar );
+ parameters.getFactParams().setIn( factIn );
+ parameters.getFactParams().setOut( Arrays.asList( new String[]{ "outCheese"} ) );
+
+ StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+ parameters );
+
+ assertEquals( 2, results.getIdentifiers().size() );
+ assertTrue( results.getIdentifiers().contains( "list" ));
+ assertTrue( results.getIdentifiers().contains( "outCheese" ));
+
+ assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
+
+ assertEquals( "rule1 cheddar",
+ ((List) results.getValue( "list" )).get( 0 ) );
+
+ assertEquals( "rule2 stilton",
+ ((List) results.getValue( "list" )).get( 1 ) );
+
+ assertEquals( "rule3 brie",
+ ((List) results.getValue( "list" )).get( 2 ) );
+
+ assertEquals( "rule4 string",
+ ((List) results.getValue( "list" )).get( 3 ) );
+
+ // cheesery should be null
+ assertNull( results.getValue( "cheesery" ) );
+
+ }
+
+ public void testInOutAndOutParams() throws Exception {
+ StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
+
+
+ final Cheese stilton = new Cheese( "stilton",
+ 5 );
+
+ final Cheese cheddar = new Cheese( "cheddar",
+ 25 );
+
+ // notice I don't export Cheessery
+ Parameters parameters = session.newParameters();
+ Map<String, Object> globalsInOut = new HashMap<String, Object>();
+ globalsInOut.put( "inString", "string" );
+ parameters.getGlobalParams().setInOut( globalsInOut );
+ parameters.getGlobalParams().setOut( Arrays.asList( new String[]{"list"} ) );
+
+ Map<String, Object> factInOut = new HashMap<String, Object>();
+ factInOut.put( "inCheese", cheddar );
+ parameters.getFactParams().setInOut( factInOut );
+ parameters.getFactParams().setOut( Arrays.asList( new String[]{ "outCheese"} ) );
+
+ StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+ parameters );
+
+ assertEquals( 4, results.getIdentifiers().size() );
+ assertTrue( results.getIdentifiers().contains( "list" ));
+ assertTrue( results.getIdentifiers().contains( "inString" ));
+ assertTrue( results.getIdentifiers().contains( "inCheese" ));
+ assertTrue( results.getIdentifiers().contains( "outCheese" ));
+
+ assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
+
+ assertEquals( "rule1 cheddar",
+ ((List) results.getValue( "list" )).get( 0 ) );
+
+ assertEquals( "rule2 stilton",
+ ((List) results.getValue( "list" )).get( 1 ) );
+
+ assertEquals( "rule3 brie",
+ ((List) results.getValue( "list" )).get( 2 ) );
+
+ assertEquals( "rule4 string",
+ ((List) results.getValue( "list" )).get( 3 ) );
+
+ // cheesery should be null
+ assertNull( results.getValue( "cheesery" ) );
+
+ }
+
public void testAsynSingleOjbectcAssert() throws Exception {
StatelessSession session = getSession();
@@ -273,4 +391,32 @@
this.cheesery );
return session;
}
+
+ private StatelessKnowledgeSession getSession2(String fileName) throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.addResource( new InputStreamReader( getClass().getResourceAsStream( fileName ) ), KnowledgeType.DRL );
+
+ if (kbuilder.hasErrors() ) {
+ System.out.println( kbuilder.getErrors() );
+ }
+
+ assertFalse( kbuilder.hasErrors() );
+ Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+
+ kbase.addKnowledgePackages( pkgs );
+ kbase = SerializationHelper.serializeObject( kbase );
+ StatelessKnowledgeSession session = kbase.newStatelessKnowledgeSession();
+
+// session = SerializationHelper.serializeObject(session);
+ session.setGlobalResolver( this.globalResolver );
+
+ session.setGlobal( "list",
+ this.list );
+ session.setGlobal( "cheesery",
+ this.cheesery );
+ return session;
+ }
}
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/testStatelessKnowledgeSessionInOutParams.drl 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,48 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+import org.drools.Cheesery
+
+global java.util.List list;
+global Cheesery cheesery;
+
+global String inString
+global Cheese inCheese;
+global Cheese outCheese;
+
+// test Fact in Parameter
+rule "rule1"
+ salience 10
+ when
+ Cheese( this == inCheese, $type : type )
+ then
+ list.add( "rule1 " + $type );
+end
+
+// test Global in Parameter
+rule "rule2"
+ salience 5
+ when
+ Cheese( $type : type == "stilton" )
+ then
+ list.add( "rule2 " + $type );
+end
+
+// test Global out Parameter
+rule "rule3"
+ salience 3
+ when
+ then
+ Cheese brie = new Cheese("brie", 50);
+ insert( brie );
+ list.add( "rule3 brie" );
+ drools.getWorkingMemory().setGlobal("outCheese", brie);
+end
+
+// test Global in Parameter
+rule "rule4"
+ salience 0
+ when
+ then
+ list.add( "rule4 " + inString );
+end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/MapGlobalResolver.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -1,5 +1,6 @@
package org.drools.base;
+import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
@@ -11,7 +12,8 @@
public class MapGlobalResolver
implements
- GlobalResolver {
+ GlobalResolver,
+ Externalizable {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -35,6 +35,7 @@
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.RuleBaseConfiguration;
import org.drools.WorkingMemory;
import org.drools.spi.Activation;
@@ -915,7 +916,7 @@
e );
} else if ( this.consequenceExceptionHandler != null ) {
this.consequenceExceptionHandler.handleException( activation,
- new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) this.workingMemory ),
+ new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) this.workingMemory ),
e );
} else {
throw new RuntimeException( e );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/process/impl/ProcessEventImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -9,6 +9,7 @@
import org.drools.event.process.ProcessEvent;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.runtime.process.ProcessInstance;
public class ProcessEventImpl extends KnowledgeRuntimeEventImpl implements ProcessEvent {
@@ -16,7 +17,7 @@
private ProcessInstance processInstance;
public ProcessEventImpl(org.drools.event.ProcessEvent event, WorkingMemory workingMemory) {
- super( new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) workingMemory ));
+ super( new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) workingMemory ));
processInstance = event.getProcessInstance();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectInsertedEventImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -7,6 +7,7 @@
import org.drools.event.rule.ObjectInsertedEvent;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.FactHandle;
import org.drools.runtime.rule.WorkingMemory;
@@ -17,7 +18,7 @@
private Object object;
public ObjectInsertedEventImpl(org.drools.event.ObjectInsertedEvent event) {
- super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) event.getWorkingMemory() ), event.getPropagationContext() );
+ super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) event.getWorkingMemory() ), event.getPropagationContext() );
factHandle = event.getFactHandle();
object = event.getObject();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectRetractedEventImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -7,6 +7,7 @@
import org.drools.event.rule.ObjectRetractedEvent;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.FactHandle;
import org.drools.runtime.rule.WorkingMemory;
@@ -15,7 +16,7 @@
private Object oldbOject;
public ObjectRetractedEventImpl( org.drools.event.ObjectRetractedEvent event) {
- super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) event.getWorkingMemory() ), event.getPropagationContext() );
+ super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) event.getWorkingMemory() ), event.getPropagationContext() );
factHandle = event.getFactHandle();
oldbOject = event.getOldObject();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/rule/impl/ObjectUpdatedEventImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -7,6 +7,7 @@
import org.drools.event.rule.ObjectUpdatedEvent;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.FactHandle;
import org.drools.runtime.rule.WorkingMemory;
@@ -16,7 +17,7 @@
private Object oldObject;
public ObjectUpdatedEventImpl(org.drools.event.ObjectUpdatedEvent event) {
- super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) event.getWorkingMemory() ), event.getPropagationContext() );
+ super( (WorkingMemory) new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) event.getWorkingMemory() ), event.getPropagationContext() );
factHandle = event.getFactHandle();
object = event.getObject();
object = event.getOldObject();
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,37 @@
+package org.drools.impl;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.runtime.FactParams;
+
+public class FactParamsImpl implements FactParams {
+ Map<String, ? > in;
+ Map<String, ? > inOut;
+ Collection<String> out;
+
+ public void setIn(Map<String, ? > in) {
+ this.in = in;
+ }
+
+ public Map<String, ? > getIn() {
+ return in;
+ }
+
+ public void setInOut(Map<String, ? > inOut) {
+ this.inOut = inOut;
+ }
+
+ public Map<String, ? > getInOut() {
+ return inOut;
+ }
+
+ public void setOut(Collection<String> out) {
+ this.out = out;
+ }
+
+ public Collection<String> getOut() {
+ return out;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,37 @@
+package org.drools.impl;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.runtime.GlobalParams;
+
+public class GlobalParamsImpl implements GlobalParams {
+ Map<String, ? > in;
+ Map<String, ? > inOut;
+ Collection<String> out;
+
+ public void setIn(Map<String, ? > in) {
+ this.in = in;
+ }
+
+ public Map<String, ? > getIn() {
+ return in;
+ }
+
+ public void setInOut(Map<String, ? > inOut) {
+ this.inOut = inOut;
+ }
+
+ public Map<String, ? > getInOut() {
+ return inOut;
+ }
+
+ public void setOut(Collection<String> out) {
+ this.out = out;
+ }
+
+ public Collection<String> getOut() {
+ return out;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -15,6 +15,7 @@
import org.drools.RuleBase;
import org.drools.SessionConfiguration;
import org.drools.StatefulSession;
+import org.drools.common.InternalRuleBase;
import org.drools.definition.KnowledgePackage;
import org.drools.event.AfterFunctionRemovedEvent;
import org.drools.event.AfterPackageAddedEvent;
@@ -52,6 +53,7 @@
import org.drools.rule.Package;
import org.drools.runtime.KnowledgeSessionConfiguration;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
public class KnowledgeBaseImpl
implements
@@ -128,6 +130,14 @@
return new StatefulKnowledgeSessionImpl( session,
this );
}
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+ return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase );
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
+ return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase );
+ }
public void removeKnowledgePackage(String packageName) {
this.ruleBase.removePackage( packageName );
@@ -225,5 +235,4 @@
new RuleImpl( event.getRule() ) ) );
}
}
-
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,19 @@
+package org.drools.impl;
+
+import org.drools.runtime.FactParams;
+import org.drools.runtime.GlobalParams;
+import org.drools.runtime.Parameters;
+
+public class ParametersImpl implements Parameters {
+ private FactParams factParams = new FactParamsImpl();
+ private GlobalParams globalParams = new GlobalParamsImpl();
+
+ public FactParams getFactParams() {
+ return this.factParams;
+ }
+
+ public GlobalParams getGlobalParams() {
+ return this.globalParams;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -45,6 +45,8 @@
import org.drools.event.rule.impl.ObjectRetractedEventImpl;
import org.drools.event.rule.impl.ObjectUpdatedEventImpl;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.GlobalResolver;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.drools.runtime.process.WorkItemManager;
@@ -57,19 +59,19 @@
public class StatefulKnowledgeSessionImpl
implements
StatefulKnowledgeSession {
- public ReteooStatefulSession session;
+ public ReteooWorkingMemory session;
public KnowledgeBaseImpl kbase;
public Map<WorkingMemoryEventListener, WorkingMemoryEventListenerWrapper> mappedWorkingMemoryListeners;
public Map<AgendaEventListener, AgendaEventListenerWrapper> mappedAgendaListeners;
public Map<ProcessEventListener, ProcessEventListenerWrapper> mappedProcessListeners;
- public StatefulKnowledgeSessionImpl(ReteooStatefulSession session) {
+ public StatefulKnowledgeSessionImpl(ReteooWorkingMemory session) {
this( session,
null );
}
- public StatefulKnowledgeSessionImpl(ReteooStatefulSession session,
+ public StatefulKnowledgeSessionImpl(ReteooWorkingMemory session,
KnowledgeBaseImpl kbase) {
this.session = session;
this.kbase = kbase;
@@ -224,23 +226,27 @@
this.session.setGlobal( identifier,
object );
}
+
+ public void setGlobalResolver(GlobalResolver globalResolver) {
+ this.session.setGlobalResolver( (org.drools.spi.GlobalResolver) globalResolver );
+ }
- public Future<Object> asyncInsert(Object object) {
- return new FutureAdapter( this.session.asyncInsert( object ) );
- }
+// public Future<Object> asyncInsert(Object object) {
+// return new FutureAdapter( this.session.asyncInsert( object ) );
+// }
+//
+// public Future<Object> asyncInsert(Object[] array) {
+// return new FutureAdapter( this.session.asyncInsert( array ) );
+// }
+//
+// public Future<Object> asyncInsert(Iterable< ? > iterable) {
+// return new FutureAdapter( this.session.asyncInsert( iterable ) );
+// }
+//
+// public Future< ? > asyncFireAllRules() {
+// return new FutureAdapter( this.session.asyncFireAllRules() );
+// }
- public Future<Object> asyncInsert(Object[] array) {
- return new FutureAdapter( this.session.asyncInsert( array ) );
- }
-
- public Future<Object> asyncInsert(Iterable< ? > iterable) {
- return new FutureAdapter( this.session.asyncInsert( iterable ) );
- }
-
- public Future< ? > asyncFireAllRules() {
- return new FutureAdapter( this.session.asyncFireAllRules() );
- }
-
public Collection< ? extends FactHandle> getFactHandles() {
return new ObjectStoreWrapper( session.getObjectStore(),
null,
@@ -541,7 +547,4 @@
return filter.accept( activation );
}
}
-
-
-
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,327 @@
+package org.drools.impl;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.drools.SessionConfiguration;
+import org.drools.base.MapGlobalResolver;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.event.AgendaEventSupport;
+import org.drools.event.RuleFlowEventSupport;
+import org.drools.event.WorkingMemoryEventSupport;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.impl.StatefulKnowledgeSessionImpl.AgendaEventListenerWrapper;
+import org.drools.impl.StatefulKnowledgeSessionImpl.ProcessEventListenerWrapper;
+import org.drools.impl.StatefulKnowledgeSessionImpl.WorkingMemoryEventListenerWrapper;
+import org.drools.reteoo.InitialFactHandle;
+import org.drools.reteoo.InitialFactHandleDummyObject;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
+import org.drools.rule.EntryPoint;
+import org.drools.runtime.Parameters;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSessionResults;
+import org.drools.spi.AgendaFilter;
+import org.drools.spi.GlobalResolver;
+
+public class StatelessKnowledgeSessionImpl
+ implements
+ StatelessKnowledgeSession {
+
+ private InternalRuleBase ruleBase;
+ private AgendaFilter agendaFilter;
+ private GlobalResolver sessionGlobals = new MapGlobalResolver();
+
+ /** The event mapping */
+ public Map<WorkingMemoryEventListener, WorkingMemoryEventListenerWrapper> mappedWorkingMemoryListeners;
+ public Map<AgendaEventListener, AgendaEventListenerWrapper> mappedAgendaListeners;
+ public Map<ProcessEventListener, ProcessEventListenerWrapper> mappedProcessListeners;
+
+ /** The event support */
+ protected WorkingMemoryEventSupport workingMemoryEventSupport = new WorkingMemoryEventSupport();
+ protected AgendaEventSupport agendaEventSupport = new AgendaEventSupport();
+ protected RuleFlowEventSupport ruleFlowEventSupport = new RuleFlowEventSupport();
+
+ public StatelessKnowledgeSessionImpl() {
+ }
+
+ public StatelessKnowledgeSessionImpl(final InternalRuleBase ruleBase) {
+ this.ruleBase = ruleBase;
+ }
+
+ public InternalRuleBase getRuleBase() {
+ return this.ruleBase;
+ }
+
+ public InternalWorkingMemory newWorkingMemory() {
+ synchronized ( this.ruleBase.getPackagesMap() ) {
+ InternalWorkingMemory wm = new ReteooWorkingMemory( this.ruleBase.nextWorkingMemoryCounter(),
+ this.ruleBase,
+ new SessionConfiguration() );
+
+ DelegatingGlobalResolver resolver = new DelegatingGlobalResolver();
+ resolver.setDelegate( this.sessionGlobals );
+
+ wm.setGlobalResolver( resolver );
+ wm.setWorkingMemoryEventSupport( this.workingMemoryEventSupport );
+ wm.setAgendaEventSupport( this.agendaEventSupport );
+ wm.setRuleFlowEventSupport( this.ruleFlowEventSupport );
+
+ final InitialFactHandleDummyObject initialFact = new InitialFactHandleDummyObject();
+ final InitialFactHandle handle = new InitialFactHandle( wm.getFactHandleFactory().newFactHandle( initialFact,
+ wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
+ initialFact ),
+ wm ) );
+
+ wm.queueWorkingMemoryAction( new WorkingMemoryReteAssertAction( handle,
+ false,
+ true,
+ null,
+ null ) );
+ return wm;
+ }
+ }
+
+ public void addEventListener(WorkingMemoryEventListener listener) {
+ WorkingMemoryEventListenerWrapper wrapper = new WorkingMemoryEventListenerWrapper( listener );
+ this.mappedWorkingMemoryListeners.put( listener,
+ wrapper );
+ this.workingMemoryEventSupport.addEventListener( wrapper );
+ }
+
+ public void removeEventListener(WorkingMemoryEventListener listener) {
+ WorkingMemoryEventListenerWrapper wrapper = this.mappedWorkingMemoryListeners.remove( listener );
+ this.workingMemoryEventSupport.removeEventListener( wrapper );
+ }
+
+ public Collection<WorkingMemoryEventListener> getWorkingMemoryEventListeners() {
+ return Collections.unmodifiableCollection( this.mappedWorkingMemoryListeners.keySet() );
+ }
+
+ public void addEventListener(AgendaEventListener listener) {
+ AgendaEventListenerWrapper wrapper = new AgendaEventListenerWrapper( listener );
+ this.mappedAgendaListeners.put( listener,
+ wrapper );
+ this.agendaEventSupport.addEventListener( wrapper );
+ }
+
+ public Collection<AgendaEventListener> getAgendaEventListeners() {
+ return Collections.unmodifiableCollection( this.mappedAgendaListeners.keySet() );
+ }
+
+ public void removeEventListener(AgendaEventListener listener) {
+ AgendaEventListenerWrapper wrapper = this.mappedAgendaListeners.remove( listener );
+ this.agendaEventSupport.removeEventListener( wrapper );
+ }
+
+ public void addEventListener(ProcessEventListener listener) {
+ ProcessEventListenerWrapper wrapper = new ProcessEventListenerWrapper( listener );
+ this.mappedProcessListeners.put( listener,
+ wrapper );
+ this.ruleFlowEventSupport.addEventListener( wrapper );
+ }
+
+ public Collection<ProcessEventListener> getProcessEventListeners() {
+ return Collections.unmodifiableCollection( this.mappedProcessListeners.keySet() );
+ }
+
+ public void removeEventListener(ProcessEventListener listener) {
+ ProcessEventListenerWrapper wrapper = this.mappedProcessListeners.get( listener );
+ this.ruleFlowEventSupport.removeEventListener( wrapper );
+ }
+
+ public void setGlobal(String identifier,
+ Object value) {
+ this.sessionGlobals.setGlobal( identifier,
+ value );
+ }
+
+ public void setGlobalResolver(org.drools.runtime.GlobalResolver globalResolver) {
+ this.sessionGlobals = (GlobalResolver) globalResolver;
+
+ }
+
+ public void executeObject(Object object) {
+ InternalWorkingMemory wm = newWorkingMemory();
+
+ wm.insert( object );
+ wm.fireAllRules( this.agendaFilter );
+ }
+
+ public void executeIterable(Iterable< ? > objects) {
+ InternalWorkingMemory wm = newWorkingMemory();
+
+ for ( Object object : objects ) {
+ wm.insert( object );
+ }
+ wm.fireAllRules( this.agendaFilter );
+ }
+
+ public StatelessKnowledgeSessionResults executeObjectWithParameters(Object object,
+ Parameters parameters) {
+ InternalWorkingMemory wm = newWorkingMemory();
+
+ wm.insert( object );
+
+ Map<String, Object> results = new HashMap<String, Object>();
+
+ executeInParams( wm,
+ parameters,
+ results );
+
+ wm.fireAllRules( this.agendaFilter );
+
+ getOutParams( wm,
+ parameters,
+ results );
+
+ return new StatelessKnowledgeSessionResultsImpl( results );
+
+ }
+
+ public StatelessKnowledgeSessionResults executeIterableWithParameters(Iterable< ? > objects,
+ Parameters parameters) {
+ InternalWorkingMemory wm = newWorkingMemory();
+
+ for ( Object object : objects ) {
+ wm.insert( object );
+ }
+
+ Map<String, Object> results = new HashMap<String, Object>();
+
+ executeInParams( wm,
+ parameters,
+ results );
+
+ wm.fireAllRules( this.agendaFilter );
+
+ getOutParams( wm,
+ parameters,
+ results );
+
+ return new StatelessKnowledgeSessionResultsImpl( results );
+
+ }
+
+ private void executeInParams(InternalWorkingMemory wm,
+ Parameters parameters,
+ Map<String, Object> results) {
+ Map<String, ? > map = ((FactParamsImpl) parameters.getFactParams()).getIn();
+ if ( map != null && !map.isEmpty() ) {
+ for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+ Entry<String, Object> entry = (Entry<String, Object>) it.next();
+ sessionGlobals.setGlobal( entry.getKey(),
+ entry.getValue() );
+ wm.insert( entry.getValue() );
+ }
+ }
+
+ map = ((FactParamsImpl) parameters.getFactParams()).getInOut();
+ if ( map != null && !map.isEmpty() ) {
+ for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+ Entry<String, Object> entry = (Entry<String, Object>) it.next();
+ sessionGlobals.setGlobal( entry.getKey(),
+ entry.getValue() );
+ results.put( entry.getKey(),
+ entry.getValue() );
+ wm.insert( entry.getValue() );
+ }
+ }
+
+ map = ((GlobalParamsImpl) parameters.getGlobalParams()).getIn();
+ if ( map != null && !map.isEmpty() ) {
+ for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+ Entry<String, Object> entry = (Entry<String, Object>) it.next();
+ sessionGlobals.setGlobal( entry.getKey(),
+ entry.getValue() );
+ }
+ }
+
+ map = ((GlobalParamsImpl) parameters.getGlobalParams()).getInOut();
+ if ( map != null && !map.isEmpty() ) {
+ for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
+ Entry<String, Object> entry = (Entry<String, Object>) it.next();
+ results.put( entry.getKey(),
+ entry.getValue() );
+ sessionGlobals.setGlobal( entry.getKey(),
+ entry.getValue() );
+ }
+ }
+ }
+
+ private void getOutParams(InternalWorkingMemory wm,
+ Parameters parameters,
+ Map<String, Object> results) {
+ Collection<String> col = ((FactParamsImpl) parameters.getFactParams()).getOut();
+ if ( col != null && !col.isEmpty() ) {
+ for ( String identifer : col ) {
+ results.put( identifer,
+ wm.getGlobal( identifer ) );
+ }
+ }
+
+ col = ((GlobalParamsImpl) parameters.getGlobalParams()).getOut();
+ if ( col != null && !col.isEmpty() ) {
+ for ( String identifer : col ) {
+ results.put( identifer,
+ wm.getGlobal( identifer ) );
+ }
+ }
+ }
+
+ public Parameters newParameters() {
+ return new ParametersImpl();
+ }
+
+ public static class DelegatingGlobalResolver
+ implements
+ GlobalResolver {
+ MapGlobalResolver resolver;
+ GlobalResolver delegate;
+
+ public DelegatingGlobalResolver() {
+ this.resolver = new MapGlobalResolver();
+ }
+
+ public void setDelegate(GlobalResolver delegate) {
+ this.delegate = delegate;
+ }
+
+ public Object resolveGlobal(String identifier) {
+ Object object = this.resolver.resolveGlobal( identifier );
+ if ( object == null ) {
+ return this.delegate.resolveGlobal( identifier );
+ } else {
+ return object;
+ }
+ }
+
+ public void setGlobal(String identifier,
+ Object value) {
+ resolver.setGlobal( identifier,
+ value );
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( this.resolver );
+ out.writeObject( this.delegate );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ this.resolver = (MapGlobalResolver) in.readObject();
+ this.delegate = (GlobalResolver) in.readObject();
+ }
+ }
+
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionResultsImpl.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -0,0 +1,24 @@
+package org.drools.impl;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.runtime.StatelessKnowledgeSessionResults;
+
+public class StatelessKnowledgeSessionResultsImpl implements StatelessKnowledgeSessionResults {
+
+ private Map<String, ?> results;
+
+ public StatelessKnowledgeSessionResultsImpl(Map<String, ?> results) {
+ this.results = results;
+ }
+
+ public Collection<String> getIdentifiers() {
+ return results.keySet();
+ }
+
+ public Object getValue(String identifier) {
+ return results.get( identifier );
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java 2008-11-12 02:40:47 UTC (rev 23830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalResolver.java 2008-11-12 03:35:41 UTC (rev 23831)
@@ -2,8 +2,6 @@
import java.io.Externalizable;
-public interface GlobalResolver extends Externalizable {
- public Object resolveGlobal(String identifier);
+public interface GlobalResolver extends org.drools.runtime.GlobalResolver {
- public void setGlobal(String identifier, Object value);
}
More information about the jboss-svn-commits
mailing list