[jboss-svn-commits] JBL Code SVN: r25538 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/common and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Mar 7 22:38:42 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-03-07 22:38:41 -0500 (Sat, 07 Mar 2009)
New Revision: 25538
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/sequential/SequentialTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
Log:
-fixed ArrayIndexOutOfBoundsException with stateless sessions
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/sequential/SequentialTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/sequential/SequentialTest.java 2009-03-08 03:01:12 UTC (rev 25537)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/sequential/SequentialTest.java 2009-03-08 03:38:41 UTC (rev 25538)
@@ -3,40 +3,56 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import junit.framework.TestCase;
import org.drools.Cheese;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
import org.drools.Person;
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseFactory;
import org.drools.StatelessSession;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
+import org.drools.conf.Option;
+import org.drools.conf.SequentialOption;
import org.drools.integrationtests.DynamicRulesTest;
import org.drools.integrationtests.SerializationHelper;
+import org.drools.io.ResourceFactory;
import org.drools.rule.Package;
+import org.drools.runtime.StatelessKnowledgeSession;
public class SequentialTest extends TestCase {
+ // FIXME lots of XXX tests here, need to find out why.
+
public void testBasicOperation() throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "simpleSequential.drl", getClass() ), ResourceType.DRL );
- // postponed while I sort out KnowledgeHelperFixer
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "simpleSequential.drl" ) ) );
- final Package pkg = builder.getPackage();
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ KnowledgeBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+ kconf.setOption( SequentialOption.YES );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kconf );
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- RuleBaseConfiguration conf = new RuleBaseConfiguration();
- conf.setSequential( true );
- RuleBase ruleBase = getRuleBase( conf );
- ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject(ruleBase);
- final StatelessSession session = ruleBase.newStatelessSession();
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
final List list = new ArrayList();
- session.setGlobal( "list",
+ ksession.setGlobal( "list",
list );
final Person p1 = new Person( "p1",
@@ -51,30 +67,34 @@
final Cheese cheddar = new Cheese( "cheddar",
15 );
- session.execute( new Object[]{p1, stilton, p2, cheddar, p3} );
+ ksession.execute( Arrays.asList( new Object[]{p1, stilton, p2, cheddar, p3} ) );
assertEquals( 3,
list.size() );
-
}
- public void testSalience() throws Exception {
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "simpleSalience.drl" ) ) );
- final Package pkg = builder.getPackage();
+ public void testSalience() throws Exception {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "simpleSalience.drl", getClass() ), ResourceType.DRL );
- RuleBaseConfiguration conf = new RuleBaseConfiguration();
- conf.setSequential( true );
- RuleBase ruleBase = getRuleBase( conf );
- ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject(ruleBase);
- final StatelessSession session = ruleBase.newStatelessSession();
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ KnowledgeBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+ kconf.setOption( SequentialOption.YES );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kconf );
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ kbase = SerializationHelper.serializeObject( kbase );
+ final StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
+
final List list = new ArrayList();
- session.setGlobal( "list",
+ ksession.setGlobal( "list",
list );
- session.execute( new Person( "pob") );
+ ksession.execute( new Person( "pob") );
assertEquals( 3,
list.size() );
@@ -86,32 +106,37 @@
// JBRULES-1567 - ArrayIndexOutOfBoundsException in sequential execution after calling RuleBase.addPackage(..)
public void testSequentialWithRulebaseUpdate() throws Exception {
- PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "simpleSalience.drl" ) ) );
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "simpleSalience.drl", getClass() ), ResourceType.DRL );
- RuleBaseConfiguration conf = new RuleBaseConfiguration();
- conf.setSequential( true );
- RuleBase ruleBase = getRuleBase( conf );
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ KnowledgeBaseConfiguration kconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
+ kconf.setOption( SequentialOption.YES );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kconf );
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- ruleBase.addPackage(builder.getPackage());
- StatelessSession session = ruleBase.newStatelessSession();
+ kbase = SerializationHelper.serializeObject( kbase );
+ StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
final List list = new ArrayList();
- session.setGlobal( "list",
+ ksession.setGlobal( "list",
list );
- session.execute(new Person("pob"));
+ ksession.execute(new Person("pob"));
- builder = new PackageBuilder();
- builder.addPackageFromDrl(
- new InputStreamReader( DynamicRulesTest.class.getResourceAsStream( "test_Dynamic3.drl" ) ) );
+ kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_Dynamic3.drl", DynamicRulesTest.class ), ResourceType.DRL );
- ruleBase.addPackage(builder.getPackage());
- session = ruleBase.newStatelessSession();
- session.setGlobal( "list",
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ ksession = kbase.newStatelessKnowledgeSession();
+ ksession.setGlobal( "list",
list );
Person person = new Person("bop");
- session.execute(person);
+ ksession.execute(person);
assertEquals( 7,
list.size() );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2009-03-08 03:01:12 UTC (rev 25537)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2009-03-08 03:38:41 UTC (rev 25538)
@@ -46,6 +46,7 @@
import org.drools.event.RuleBaseEventSupport;
import org.drools.impl.EnvironmentFactory;
import org.drools.process.core.Process;
+import org.drools.reteoo.ReteooBuilder;
import org.drools.rule.CompositeClassLoader;
import org.drools.rule.DialectRuntimeRegistry;
import org.drools.rule.Function;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java 2009-03-08 03:01:12 UTC (rev 25537)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalRuleBase.java 2009-03-08 03:38:41 UTC (rev 25538)
@@ -28,6 +28,7 @@
import org.drools.StatefulSession;
import org.drools.process.core.Process;
import org.drools.reteoo.Rete;
+import org.drools.reteoo.ReteooBuilder;
import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.CompositeClassLoader;
import org.drools.rule.Package;
@@ -63,6 +64,8 @@
void disposeStatefulSession(StatefulSession statefulSession);
void executeQueuedActions();
+
+ ReteooBuilder getReteooBuilder();
/**
* Assert a fact object.
Modified: 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 2009-03-08 03:01:12 UTC (rev 25537)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2009-03-08 03:38:41 UTC (rev 25538)
@@ -8,6 +8,7 @@
import java.util.Map;
import java.util.Map.Entry;
+import org.drools.RuleBaseConfiguration;
import org.drools.SessionConfiguration;
import org.drools.base.MapGlobalResolver;
import org.drools.command.Command;
@@ -64,6 +65,12 @@
this.ruleBase = ruleBase;
this.conf = (conf != null) ? conf : new SessionConfiguration();
this.environment = EnvironmentFactory.newEnvironment();
+
+ synchronized ( this.ruleBase.getPackagesMap() ) {
+ if ( ruleBase.getConfiguration().isSequential() ) {
+ this.ruleBase.getReteooBuilder().order();
+ }
+ }
}
public InternalRuleBase getRuleBase() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2009-03-08 03:01:12 UTC (rev 25537)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2009-03-08 03:38:41 UTC (rev 25538)
@@ -470,6 +470,9 @@
public void addPackages(Collection<Package> pkgs) {
super.addPackages( pkgs );
+ if ( this.config.isSequential() ) {
+ this.reteooBuilder.setOrdered( false );
+ }
}
public void addPackage(final Package newPkg) {
@@ -480,5 +483,4 @@
this.reteooBuilder.setOrdered( false );
}
}
-
}
More information about the jboss-svn-commits
mailing list