[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