[jboss-svn-commits] JBL Code SVN: r30411 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/integrationtests and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Dec 1 11:51:18 EST 2009


Author: tirelli
Date: 2009-12-01 11:51:17 -0500 (Tue, 01 Dec 2009)
New Revision: 30411

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
Log:
JBRULES-2348: Fixing type resolution for serialized packages with type declarations

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2009-12-01 15:02:47 UTC (rev 30410)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java	2009-12-01 16:51:17 UTC (rev 30411)
@@ -711,7 +711,7 @@
                 // add type declarations
                 for ( TypeDeclaration type : newPkg.getTypeDeclarations().values() ) {
                     lastType = type;
-                    type.setTypeClass( this.rootClassLoader.loadClass( pkg.getName() + "." + type.getTypeName() ) );
+                    type.setTypeClass( this.rootClassLoader.loadClass( type.getTypeClassName() ) );
                 }
             }
         } catch ( ClassNotFoundException e ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2009-12-01 15:02:47 UTC (rev 30410)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2009-12-01 16:51:17 UTC (rev 30411)
@@ -4,6 +4,8 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -34,6 +36,8 @@
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.conf.EventProcessingOption;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definitions.impl.KnowledgePackageImp;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.io.ResourceFactory;
 import org.drools.lang.descr.PackageDescr;
@@ -44,6 +48,7 @@
 import org.drools.runtime.conf.ClockTypeOption;
 import org.drools.time.SessionPseudoClock;
 import org.drools.time.impl.PseudoClockScheduler;
+import org.drools.util.DroolsStreamUtils;
 
 public class CepEspTest extends TestCase {
     protected RuleBase getRuleBase() throws Exception {
@@ -155,6 +160,70 @@
 
     }
 
+    public void testPackageSerializationWithEvents() throws Exception {
+        // read in the source
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( "test_CEP_SimpleEventAssertion.drl" ) ),
+                      ResourceType.DRL );
+
+        // get the package
+        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+        assertEquals( 1,
+                      pkgs.size() );
+        KnowledgePackage kpkg = pkgs.iterator().next();
+
+        // serialize the package
+        Package internalPkg = ((KnowledgePackageImp)kpkg).pkg; // nasty trick for test purposes
+        byte[] serializedPkg = DroolsStreamUtils.streamOut( internalPkg );
+
+        // recreate the pkg using a new kbuilder
+        KnowledgeBuilder kbuilder2 = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder2.add( ResourceFactory.newByteArrayResource( serializedPkg ),
+                       ResourceType.PKG );
+        assertFalse( kbuilder2.getErrors().toString(),
+                     kbuilder2.hasErrors() );
+
+        // create the kbase
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder2.getKnowledgePackages() );
+
+        // create the session
+        KnowledgeSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
+        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( conf,
+                                                                              null );
+
+        final List<StockTick> results = new ArrayList<StockTick>();
+
+        session.setGlobal( "results",
+                           results );
+
+        StockTick tick1 = new StockTick( 1,
+                                         "DROO",
+                                         50,
+                                         10000 );
+        StockTick tick2 = new StockTick( 2,
+                                         "ACME",
+                                         10,
+                                         10010 );
+
+        InternalFactHandle handle1 = (InternalFactHandle) session.insert( tick1 );
+        InternalFactHandle handle2 = (InternalFactHandle) session.insert( tick2 );
+
+        assertNotNull( handle1 );
+        assertNotNull( handle2 );
+
+        assertTrue( handle1.isEvent() );
+        assertTrue( handle2.isEvent() );
+
+        session.fireAllRules();
+
+        assertEquals( 1,
+                      results.size() );
+        assertEquals( tick2,
+                      results.get( 0 ) );
+
+    }
+
     public void testEventAssertionWithDuration() throws Exception {
         // read in the source
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_CEP_SimpleEventAssertionWithDuration.drl" ) );
@@ -1211,7 +1280,7 @@
 
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession( ksconf,
                                                                                null );
-        WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger(ksession);
+        WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( ksession );
         logger.setFileName( "audit" );
 
         List<Number> timeResults = new ArrayList<Number>();



More information about the jboss-svn-commits mailing list