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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 26 10:59:45 EDT 2009


Author: tirelli
Date: 2009-10-26 10:59:44 -0400 (Mon, 26 Oct 2009)
New Revision: 29814

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializedPackageMergeTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serialization1.drl
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessorStore.java
Log:
JBRULES-2267: fixing NPE when merging serialized packages

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializedPackageMergeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializedPackageMergeTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/SerializedPackageMergeTest.java	2009-10-26 14:59:44 UTC (rev 29814)
@@ -0,0 +1,95 @@
+package org.drools.integrationtests;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.Message;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatelessKnowledgeSession;
+
+public class SerializedPackageMergeTest extends TestCase {
+    private static final DateFormat DF   = new SimpleDateFormat( "dd-MMM-yyyy" );
+    private static final String[]   DRLs = {"HelloWorld.drl","test_Serialization1.drl"};
+
+    public void testRuleExecutionWithoutSerialization() {
+        try {
+            // without serialization, it works.
+            testRuleExecution( getSession( false ) );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            fail( "Should not have raised any exception. Message: " + e.getMessage() );
+        }
+    }
+
+    public void testRuleExecutionWithSerialization() throws Exception {
+        try {
+            // with serialized packages, NullPointerException
+            testRuleExecution( getSession( true ) );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            fail( "Should not have raised any exception. Message: " + e.getMessage() );
+        }
+    }
+
+    private void testRuleExecution(StatelessKnowledgeSession session) throws Exception {
+        List<Object> list = new ArrayList<Object>();
+        session.setGlobal( "list",
+                           list );
+
+        session.execute( getObject() );
+
+        assertEquals( 2,
+                      list.size() );
+    }
+
+    private Message getObject() throws ParseException {
+        Message message = new Message();
+
+        message.setMessage( "hola" );
+        message.setNumber( 50 );
+        message.getList().add( "hello" );
+        message.setBirthday( DF.parse( "10-Jul-1976" ) );
+        return message;
+    }
+
+    private StatelessKnowledgeSession getSession(boolean serialize) throws Exception {
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+        for ( String drl : DRLs ) {
+            KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+            kbuilder.add( ResourceFactory.newInputStreamResource( getClass().getResourceAsStream( drl ) ),
+                          ResourceType.DRL );
+            
+            assertFalse( kbuilder.getErrors().toString(),
+                         kbuilder.hasErrors() );
+            
+            Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
+
+            Collection<KnowledgePackage> newCollection = null;
+            if ( serialize ) {
+                newCollection = new ArrayList<KnowledgePackage>();
+                for( KnowledgePackage kpkg : kpkgs) {
+                    kpkg = SerializationHelper.serializeObject( kpkg );
+                    newCollection.add( kpkg );
+                }
+            } else {
+                newCollection = kpkgs;
+            }
+            kbase.addKnowledgePackages( newCollection );
+        }
+        return kbase.newStatelessKnowledgeSession();
+    }
+
+}

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serialization1.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serialization1.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Serialization1.drl	2009-10-26 14:59:44 UTC (rev 29814)
@@ -0,0 +1,17 @@
+package HelloWorld
+
+global java.util.List list;
+
+rule "Hello World 1"
+	when
+		$m : org.drools.Message(list contains "hello",
+					text:message == "hola",
+					number in (1, 2, 3, 4, 50, 0),
+					birthday > "10-Jul-1974",
+					message matches ".*ho.*",
+					list excludes "wax")
+	then
+	    // putting in a complex consequence, to make sure it picks up the variabels correctly
+       	list.add( $m );
+		$m.setFired(true);
+end

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessorStore.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessorStore.java	2009-10-26 14:37:58 UTC (rev 29813)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessorStore.java	2009-10-26 14:59:44 UTC (rev 29814)
@@ -288,6 +288,12 @@
                             }
                             lookupEntry.addAccessorTarget( target );
                         }
+                        if (lookupEntry.getClassFieldReader() != null) {
+                            wire(((FieldLookupEntry)entry.getValue()).getClassFieldReader());
+                        }
+                        if (lookupEntry.getClassFieldWriter() != null) {
+                            wire(((FieldLookupEntry)entry.getValue()).getClassFieldWriter());
+                        }                        
                     }
                     break;
                 }



More information about the jboss-svn-commits mailing list