[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