[jboss-svn-commits] JBL Code SVN: r25539 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests/sequential and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Mar 7 23:37:36 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-03-07 23:37:36 -0500 (Sat, 07 Mar 2009)
New Revision: 25539
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/sequential/SequentialTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/rule/AgendaEventSupportTest.java
Log:
-fixed access to knowledgeruntime from stateless session events
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-03-08 03:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -57,6 +57,7 @@
import org.drools.IndexedNumber;
import org.drools.InsertedObject;
import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
import org.drools.Message;
import org.drools.MockPersistentSet;
@@ -103,6 +104,7 @@
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.compiler.ParserError;
import org.drools.compiler.PackageBuilder.PackageMergeException;
+import org.drools.conf.SequentialOption;
import org.drools.definition.KnowledgePackage;
import org.drools.definition.type.FactType;
import org.drools.event.ActivationCancelledEvent;
@@ -132,6 +134,7 @@
import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
import org.drools.runtime.Globals;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
import org.drools.runtime.rule.impl.FlatQueryResults;
import org.drools.spi.ConsequenceExceptionHandler;
import org.drools.spi.GlobalResolver;
@@ -526,7 +529,36 @@
assertEquals( 10,
list.get( 0 ) );
}
+
+ public void testKnowledgeRuntimeAccess() throws Exception {
+ String str = "";
+ str += "package org.test\n";
+ str +="import org.drools.Message\n";
+ str +="rule \"Hello World\"\n";
+ str +="when\n";
+ str +=" Message( )\n";
+ str +="then\n";
+ str +=" System.out.println( drools.getKnowledgeRuntime() );\n";
+ str +="end\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes()), ResourceType.DRL );
+ if ( kbuilder.hasErrors() ) {
+ fail( kbuilder.getErrors().toString() );
+ }
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( );
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+
+ kbase = SerializationHelper.serializeObject( kbase );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ ksession.insert( new Message( "help" ) );
+ ksession.fireAllRules();
+ ksession.dispose();
+ }
+
public void testEvalWithBigDecimal() throws Exception {
String str = "";
str += "package org.drools \n";
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:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/sequential/SequentialTest.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -13,6 +13,7 @@
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
+import org.drools.Message;
import org.drools.Person;
import org.drools.RuleBase;
import org.drools.RuleBaseConfiguration;
@@ -25,11 +26,24 @@
import org.drools.compiler.PackageBuilder;
import org.drools.conf.Option;
import org.drools.conf.SequentialOption;
+import org.drools.event.rule.ActivationCancelledEvent;
+import org.drools.event.rule.ActivationCreatedEvent;
+import org.drools.event.rule.AfterActivationFiredEvent;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.AgendaGroupPoppedEvent;
+import org.drools.event.rule.AgendaGroupPushedEvent;
+import org.drools.event.rule.BeforeActivationFiredEvent;
+import org.drools.event.rule.DefaultAgendaEventListener;
+import org.drools.event.rule.ObjectInsertedEvent;
+import org.drools.event.rule.ObjectRetractedEvent;
+import org.drools.event.rule.ObjectUpdatedEvent;
+import org.drools.event.rule.WorkingMemoryEventListener;
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;
+import org.drools.runtime.rule.WorkingMemory;
public class SequentialTest extends TestCase {
// FIXME lots of XXX tests here, need to find out why.
@@ -103,7 +117,125 @@
assertEquals( "rule 2", list.get( 1 ));
assertEquals( "rule 1", list.get( 2 ));
}
+
+ public void testKnowledgeRuntimeAccess() throws Exception {
+ String str = "";
+ str += "package org.test\n";
+ str +="import org.drools.Message\n";
+ str +="rule \"Hello World\"\n";
+ str +="when\n";
+ str +=" Message( )\n";
+ str +="then\n";
+ str +=" System.out.println( drools.getKnowledgeRuntime() );\n";
+ str +="end\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes()), ResourceType.DRL );
+ 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 );
+ StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
+
+ ksession.execute( new Message( "help" ) );
+ }
+
+ public void testEvents() throws Exception {
+ String str = "";
+ str += "package org.test\n";
+ str +="import org.drools.Message\n";
+ str +="rule \"Hello World\"\n";
+ str +="when\n";
+ str +=" Message( )\n";
+ str +="then\n";
+ str +=" System.out.println( drools.getKnowledgeRuntime() );\n";
+ str +="end\n";
+
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes()), ResourceType.DRL );
+
+ 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 );
+ StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
+
+ final List list = new ArrayList();
+
+ ksession.addEventListener( new AgendaEventListener() {
+
+ public void activationCancelled(ActivationCancelledEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ public void activationCreated(ActivationCreatedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ public void afterActivationFired(AfterActivationFiredEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ public void agendaGroupPopped(AgendaGroupPoppedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ public void agendaGroupPushed(AgendaGroupPushedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ public void beforeActivationFired(BeforeActivationFiredEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ });
+
+ ksession.addEventListener( new WorkingMemoryEventListener() {
+
+ public void objectInserted(ObjectInsertedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ public void objectRetracted(ObjectRetractedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ public void objectUpdated(ObjectUpdatedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
+ list.add( event );
+ }
+
+ });
+
+ ksession.execute( new Message( "help" ) );
+
+ assertEquals( 4, list.size() );
+ }
+
+
// JBRULES-1567 - ArrayIndexOutOfBoundsException in sequential execution after calling RuleBase.addPackage(..)
public void testSequentialWithRulebaseUpdate() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-03-08 03:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -27,6 +27,7 @@
import org.drools.common.InternalWorkingMemoryActions;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.Declaration;
import org.drools.rule.EntryPoint;
import org.drools.rule.GroupElement;
@@ -219,7 +220,7 @@
}
public KnowledgeRuntime getKnowledgeRuntime() {
- return new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) this.workingMemory );
+ return new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) this.workingMemory );
}
public Activation getActivation() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2009-03-08 03:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -23,6 +23,7 @@
import org.drools.common.InternalWorkingMemoryActions;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.rule.Declaration;
import org.drools.rule.GroupElement;
import org.drools.rule.Rule;
@@ -152,7 +153,7 @@
}
public KnowledgeRuntime getKnowledgeRuntime() {
- return new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) this.workingMemory );
+ return new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) this.workingMemory );
}
public Activation getActivation() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2009-03-08 03:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -11,6 +11,7 @@
import org.drools.event.AgendaEventSupport;
import org.drools.event.RuleFlowEventSupport;
import org.drools.event.WorkingMemoryEventSupport;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.ProcessInstanceManager;
import org.drools.reteoo.LIANodePropagation;
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 2009-03-08 03:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -96,6 +96,20 @@
this.mappedProcessListeners = new IdentityHashMap<ProcessEventListener, ProcessEventListenerWrapper>();
}
+ public StatefulKnowledgeSessionImpl(ReteooWorkingMemory session,
+ KnowledgeBase kbase,
+ Map<WorkingMemoryEventListener, WorkingMemoryEventListenerWrapper> mappedWorkingMemoryListeners,
+ Map<AgendaEventListener, AgendaEventListenerWrapper> mappedAgendaListeners,
+ Map<ProcessEventListener, ProcessEventListenerWrapper> mappedProcessListeners) {
+
+ this.session = session;
+ this.session.setKnowledgeRuntime( this );
+ this.kbase = ( KnowledgeBaseImpl ) kbase;
+ this.mappedWorkingMemoryListeners = mappedWorkingMemoryListeners;
+ this.mappedAgendaListeners = mappedAgendaListeners;
+ this.mappedProcessListeners = mappedProcessListeners;
+ }
+
public int getId() {
return this.session.getId();
}
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:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -79,13 +79,15 @@
public InternalWorkingMemory newWorkingMemory() {
synchronized ( this.ruleBase.getPackagesMap() ) {
- InternalWorkingMemory wm = new ReteooWorkingMemory( this.ruleBase.nextWorkingMemoryCounter(),
+ ReteooWorkingMemory wm = new ReteooWorkingMemory( this.ruleBase.nextWorkingMemoryCounter(),
this.ruleBase,
(SessionConfiguration) this.conf,
this.environment );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( wm, new KnowledgeBaseImpl( this.ruleBase ), mappedWorkingMemoryListeners, mappedAgendaListeners, mappedProcessListeners );
+
((Globals) wm.getGlobalResolver()).setDelegate( this.sessionGlobals );
-
+ wm.setKnowledgeRuntime( ksession );
wm.setWorkingMemoryEventSupport( this.workingMemoryEventSupport );
wm.setAgendaEventSupport( this.agendaEventSupport );
wm.setRuleFlowEventSupport( this.ruleFlowEventSupport );
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/rule/AgendaEventSupportTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/rule/AgendaEventSupportTest.java 2009-03-08 03:38:41 UTC (rev 25538)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/event/rule/AgendaEventSupportTest.java 2009-03-08 04:37:36 UTC (rev 25539)
@@ -123,27 +123,34 @@
final AgendaEventListener agendaEventListener = new AgendaEventListener() {
public void activationCancelled(ActivationCancelledEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
agendaList.add( event );
}
public void activationCreated(ActivationCreatedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
agendaList.add( event );
+
}
public void afterActivationFired(AfterActivationFiredEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
agendaList.add( event );
}
public void agendaGroupPopped(AgendaGroupPoppedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
agendaList.add( event );
}
public void agendaGroupPushed(AgendaGroupPushedEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
agendaList.add( event );
}
public void beforeActivationFired(BeforeActivationFiredEvent event) {
+ assertNotNull( event.getKnowledgeRuntime() );
agendaList.add( event );
}
};
More information about the jboss-svn-commits
mailing list