[jboss-svn-commits] JBL Code SVN: r18623 - in labs/jbossrules/branches/4.0.x: drools-core/src/main/java/org/drools/common and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Feb 28 14:37:41 EST 2008
Author: tirelli
Date: 2008-02-28 14:37:41 -0500 (Thu, 28 Feb 2008)
New Revision: 18623
Modified:
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
Log:
JBRULES-1489: fixing ClassNotFoundException when deserializing shadow facts
Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2008-02-28 19:21:42 UTC (rev 18622)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2008-02-28 19:37:41 UTC (rev 18623)
@@ -30,6 +30,7 @@
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
+import org.drools.common.DroolsObjectInputStream;
import org.drools.common.InternalFactHandle;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.PackageBuilderConfiguration;
@@ -783,6 +784,61 @@
}
+ public void testSerializeAdd() throws Exception {
+
+ //Create a rulebase, a session, and test it
+ RuleBaseConfiguration conf = new RuleBaseConfiguration();
+ //conf.setShadowProxy( false );
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase( conf );
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
+ Package pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ StatefulSession session = ruleBase.newStatefulSession();
+ List list = new ArrayList();
+ session.setGlobal( "list", list );
+
+ InternalFactHandle stilton = (InternalFactHandle) session.insert( new Cheese( "stilton", 10 ) );
+ InternalFactHandle brie = (InternalFactHandle) session.insert( new Cheese( "brie", 10 ) );
+ session.fireAllRules();
+
+ assertEquals( list.size(), 1 );
+ assertEquals( "stilton", list.get( 0 ));
+
+ byte[] serializedSession = serializeOut( session );
+ session.dispose();
+
+ byte[] serializedRulebase = serializeOut( ruleBase );
+
+ // now recreate the rulebase, deserialize the session and test it
+ DroolsObjectInputStream stream = new DroolsObjectInputStream( new ByteArrayInputStream( serializedRulebase ) );
+ ruleBase = (RuleBase) stream.readObject();
+ stream.close();
+
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ list = (List) session.getGlobal( "list" );
+
+ assertNotNull( list );
+ assertEquals( list.size(), 1 );
+ assertEquals( "stilton", list.get( 0 ));
+
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ InternalFactHandle stilton2 = (InternalFactHandle) session.insert( new Cheese( "stilton", 10 ) );
+ InternalFactHandle brie2 = (InternalFactHandle) session.insert( new Cheese( "brie", 10 ) );
+ InternalFactHandle bob = (InternalFactHandle) session.insert( new Person( "bob", 30 ) );
+ session.fireAllRules();
+
+ assertEquals( list.size(), 3 );
+ assertEquals( bob.getObject(), list.get( 1 ));
+ assertEquals( "stilton", list.get( 2 ));
+
+ }
+
public class SubvertedClassLoader extends URLClassLoader {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2008-02-28 19:21:42 UTC (rev 18622)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2008-02-28 19:37:41 UTC (rev 18623)
@@ -88,7 +88,7 @@
protected transient CompositePackageClassLoader packageClassLoader;
- protected transient MapBackedClassLoader classLoader;
+ protected MapBackedClassLoader classLoader;
private transient Objenesis objenesis;
@@ -175,6 +175,7 @@
public void doWriteExternal(final ObjectOutput stream,
final Object[] objects) throws IOException {
stream.writeObject( this.pkgs );
+ stream.writeObject( this.classLoader.getStore() );
// Rules must be restored by an ObjectInputStream that can resolve using a given ClassLoader to handle seaprately by storing as
// a byte[]
@@ -208,15 +209,16 @@
ClassNotFoundException {
// PackageCompilationData must be restored before Rules as it has the ClassLoader needed to resolve the generated code references in Rules
this.pkgs = (Map) stream.readObject();
-
+ Map store = (Map) stream.readObject();
+
if ( stream instanceof DroolsObjectInputStream ) {
final DroolsObjectInputStream parentStream = (DroolsObjectInputStream) stream;
parentStream.setRuleBase( this );
this.packageClassLoader = new CompositePackageClassLoader( parentStream.getClassLoader() );
- this.classLoader = new MapBackedClassLoader( parentStream.getClassLoader() );
+ this.classLoader = new MapBackedClassLoader( parentStream.getClassLoader(), store );
} else {
this.packageClassLoader = new CompositePackageClassLoader( Thread.currentThread().getContextClassLoader() );
- this.classLoader = new MapBackedClassLoader( Thread.currentThread().getContextClassLoader() );
+ this.classLoader = new MapBackedClassLoader( Thread.currentThread().getContextClassLoader(), store );
}
this.packageClassLoader.addClassLoader( this.classLoader );
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java 2008-02-28 19:21:42 UTC (rev 18622)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java 2008-02-28 19:37:41 UTC (rev 18623)
@@ -33,6 +33,11 @@
this.store = new HashMap();
}
+ public MapBackedClassLoader(final ClassLoader parentClassLoader, final Map store) {
+ super( parentClassLoader );
+ this.store = store;
+ }
+
public void addResource(String className,
byte[] bytes) {
addClass(className,
@@ -114,5 +119,9 @@
return input;
}
}
+
+ public Map getStore() {
+ return this.store;
+ }
}
More information about the jboss-svn-commits
mailing list