[jboss-svn-commits] JBL Code SVN: r15653 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Oct 8 12:56:48 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-10-08 12:56:48 -0400 (Mon, 08 Oct 2007)
New Revision: 15653
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
Log:
-made each Package creation first be serialised in and out to check serialisation.
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2007-10-08 16:46:31 UTC (rev 15652)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DynamicRulesTest.java 2007-10-08 16:56:48 UTC (rev 15653)
@@ -1,6 +1,13 @@
package org.drools.integrationtests;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
import java.io.Reader;
import java.net.URL;
import java.net.URLClassLoader;
@@ -43,7 +50,7 @@
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
- final Package pkg1 = builder.getPackage();
+ final Package pkg1 = serialisePackage( builder.getPackage() );
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg1 );
@@ -81,7 +88,7 @@
reader = new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic2.drl" ) );
builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
- final Package pkg2 = builder.getPackage();
+ final Package pkg2 = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg2 );
assertEquals( 3,
@@ -99,7 +106,7 @@
reader = new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) );
builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
- final Package pkg3 = builder.getPackage();
+ final Package pkg3 = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg3 );
// Package 3 has a rule working on Person instances.
@@ -118,8 +125,8 @@
reader = new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic4.drl" ) );
builder = new PackageBuilder();
builder.addPackageFromDrl( reader );
- final Package pkg4 = builder.getPackage();
- ruleBase.addPackage( pkg4 );
+ final Package pkg4 = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg4 );
Assert.assertEquals( "Rule from package 4 should have been fired",
"Who likes Stilton ok",
@@ -139,7 +146,7 @@
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) ) );
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic4.drl" ) ) );
- final Package pkg = builder.getPackage();
+ final Package pkg = serialisePackage( builder.getPackage() );
org.drools.reteoo.ReteooRuleBase reteooRuleBase = null;
// org.drools.leaps.LeapsRuleBase leapsRuleBase = null;
@@ -148,7 +155,7 @@
ruleBase.addPackage( pkg );
final PackageBuilder builder2 = new PackageBuilder();
builder2.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic2.drl" ) ) );
- ruleBase.addPackage( builder2.getPackage() );
+ ruleBase.addPackage( serialisePackage( builder2.getPackage() ) );
final WorkingMemory workingMemory = ruleBase.newStatefulSession();
@@ -250,7 +257,7 @@
public void testDynamicFunction() throws Exception {
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicFunction1.drl" ) ) );
- final Package pkg = builder.getPackage();
+ final Package pkg = serialisePackage( builder.getPackage() );
final RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
@@ -288,7 +295,7 @@
builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicFunction2.drl" ) ) );
- ruleBase.addPackage( builder.getPackage() );
+ ruleBase.addPackage( serialisePackage( builder.getPackage() ) );
final Cheese brie = new Cheese( "brie",
5 );
@@ -302,7 +309,7 @@
builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicFunction3.drl" ) ) );
- ruleBase.addPackage( builder.getPackage() );
+ ruleBase.addPackage( serialisePackage( builder.getPackage() ) );
final Cheese feta = new Cheese( "feta",
5 );
@@ -320,7 +327,7 @@
final RuleBase ruleBase = getRuleBase();
final String packageName = builder.getPackage().getName();
- ruleBase.addPackage( builder.getPackage() );
+ ruleBase.addPackage( serialisePackage( builder.getPackage() ) );
final WorkingMemory workingMemory = ruleBase.newStatefulSession();
@@ -332,14 +339,14 @@
ruleBaseWM.removePackage( packageName );
final PackageBuilder builder1 = new PackageBuilder();
builder1.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_RemovePackage.drl" ) ) );
- ruleBaseWM.addPackage( builder1.getPackage() );
+ ruleBaseWM.addPackage( serialisePackage( builder1.getPackage() ) );
workingMemory.fireAllRules();
ruleBaseWM.removePackage( packageName );
- ruleBaseWM.addPackage( builder1.getPackage() );
+ ruleBaseWM.addPackage( serialisePackage( builder1.getPackage() ) );
ruleBaseWM.removePackage( packageName );
- ruleBaseWM.addPackage( builder1.getPackage() );
+ ruleBaseWM.addPackage( serialisePackage( builder1.getPackage() ) );
}
public void testDynamicRules() throws Exception {
@@ -358,7 +365,7 @@
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRules.drl" ) ) );
final Package pkg = builder.getPackage();
- ruleBase.addPackage( pkg );
+ ruleBase.addPackage( serialisePackage( pkg ) );
workingMemory.fireAllRules();
}
@@ -379,7 +386,7 @@
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_DynamicRules2.drl" ) ) );
- final Package pkg = builder.getPackage();
+ final Package pkg = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg );
workingMemory.fireAllRules();
@@ -391,14 +398,14 @@
//add and remove
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
- Package pkg = builder.getPackage();
+ Package pkg = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg );
ruleBase.removePackage( pkg.getName() );
//add and remove again
builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
- pkg = builder.getPackage();
+ pkg = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg );
ruleBase.removePackage( pkg.getName() );
}
@@ -407,7 +414,7 @@
try {
// Creates first class loader and use it to load fact classes
ClassLoader loader1 = new SubvertedClassLoader( new URL[]{getClass().getResource( "/" )},
- this.getClass().getClassLoader() );
+ this.getClass().getClassLoader() );
Class cheeseClass = loader1.loadClass( "org.drools.Cheese" );
PackageBuilderConfiguration conf = new PackageBuilderConfiguration( loader1 );
@@ -417,7 +424,7 @@
// must set the classloader for rulebase conf too
RuleBaseConfiguration rbconf = new RuleBaseConfiguration( loader1 );
RuleBase ruleBase = RuleBaseFactory.newRuleBase( rbconf );
- Package pkg = builder.getPackage();
+ Package pkg = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg );
StatefulSession wm = ruleBase.newStatefulSession();
@@ -435,7 +442,7 @@
rbconf = new RuleBaseConfiguration( loader2 );
ruleBase = RuleBaseFactory.newRuleBase( rbconf );
- pkg = builder.getPackage();
+ pkg = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg );
wm = ruleBase.newStatefulSession();
@@ -453,15 +460,15 @@
// Creates first class loader and use it to load fact classes
ClassLoader original = Thread.currentThread().getContextClassLoader();
ClassLoader loader1 = new SubvertedClassLoader( new URL[]{getClass().getResource( "/" )},
- this.getClass().getClassLoader() );
+ this.getClass().getClassLoader() );
Thread.currentThread().setContextClassLoader( loader1 );
Class cheeseClass = loader1.loadClass( "org.drools.Cheese" );
- PackageBuilder builder = new PackageBuilder( );
+ PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- Package pkg = builder.getPackage();
+ Package pkg = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg );
StatefulSession wm = ruleBase.newStatefulSession();
@@ -474,11 +481,11 @@
Thread.currentThread().setContextClassLoader( loader2 );
cheeseClass = loader2.loadClass( "org.drools.Cheese" );
- builder = new PackageBuilder( );
+ builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
ruleBase = RuleBaseFactory.newRuleBase();
- pkg = builder.getPackage();
+ pkg = serialisePackage( builder.getPackage() );
ruleBase.addPackage( pkg );
wm = ruleBase.newStatefulSession();
@@ -509,12 +516,42 @@
if ( c == null ) {
try {
c = findClass( name );
- } catch( ClassNotFoundException e ) {
- c = super.loadClass( name, resolve );
+ } catch ( ClassNotFoundException e ) {
+ c = super.loadClass( name,
+ resolve );
}
}
return c;
}
}
+
+ protected Package serialisePackage(Package pkg) {
+ try {
+ byte[] bytes = serializeOut( pkg );
+ return (Package) serializeIn( bytes );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "trouble serialising package.", e);
+ }
+ }
+ protected Object serializeIn(final byte[] bytes) throws IOException,
+ ClassNotFoundException {
+ final ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) );
+ final Object obj = in.readObject();
+ in.close();
+ return obj;
+ }
+
+ protected byte[] serializeOut(final Object obj) throws IOException {
+ // Serialize to a byte array
+ final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ final ObjectOutput out = new ObjectOutputStream( bos );
+ out.writeObject( obj );
+ out.close();
+
+ // Get the bytes of the serialized object
+ final byte[] bytes = bos.toByteArray();
+ return bytes;
+ }
+
}
More information about the jboss-svn-commits
mailing list