[jboss-svn-commits] JBL Code SVN: r18911 - in labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools: reteoo and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Mar 12 22:04:11 EDT 2008
Author: mingjin
Date: 2008-03-12 22:04:10 -0400 (Wed, 12 Mar 2008)
New Revision: 18911
Modified:
labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/CompositePackageClassLoader.java
labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DialectDatas.java
labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DroolsClassLoader.java
labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/JavaDialectData.java
labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
Log:
Serializing DroolsClassLoader
Modified: labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2008-03-13 01:44:55 UTC (rev 18910)
+++ labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2008-03-13 02:04:10 UTC (rev 18911)
@@ -57,6 +57,7 @@
import org.drools.rule.Package;
import org.drools.rule.JavaDialectData;
import org.drools.rule.Rule;
+import org.drools.rule.DroolsClassLoader;
import org.drools.spi.ExecutorServiceFactory;
import org.drools.spi.FactHandleFactory;
import org.drools.util.ObjectHashSet;
@@ -188,14 +189,14 @@
droolsStream = new DroolsObjectOutputStream(bytes);
}
+ droolsStream.writeObject( this.pkgs );
+ droolsStream.writeObject( this.config );
droolsStream.writeObject( this.classLoader.getStore() );
- droolsStream.writeObject( this.pkgs );
// Rules must be restored by an ObjectInputStream that can resolve using a given ClassLoader to handle seaprately by storing as
// a byte[]
droolsStream.writeObject( this.id );
droolsStream.writeInt(workingMemoryCounter);
- droolsStream.writeObject( this.config );
droolsStream.writeObject( this.processes );
droolsStream.writeObject( this.agendaGroupRuleTotals );
droolsStream.writeObject( this.factHandleFactory );
@@ -234,15 +235,15 @@
droolsStream = new DroolsObjectInputStream(new ByteArrayInputStream(bytes));
}
- droolsStream.setRuleBase( this );
+ this.pkgs = (Map) droolsStream.readObject();
+ this.config = (RuleBaseConfiguration) droolsStream.readObject();
+
Map store = (Map) droolsStream.readObject();
this.packageClassLoader = new CompositePackageClassLoader( droolsStream.getClassLoader() );
this.classLoader = new MapBackedClassLoader( this.packageClassLoader, store );
this.packageClassLoader.addClassLoader( this.classLoader );
this.objenesis = createObjenesis();
- this.pkgs = (Map) droolsStream.readObject();
-
for ( final Object object : this.pkgs.values()) {
this.packageClassLoader.addClassLoader( ((Package) object).getDialectDatas().getClassLoader() );
}
@@ -250,7 +251,6 @@
this.id = (String) droolsStream.readObject();
this.workingMemoryCounter = droolsStream.readInt();
- this.config = (RuleBaseConfiguration) droolsStream.readObject();
this.config.setClassLoader( droolsStream.getClassLoader() );
this.processes = (Map) droolsStream.readObject();
Modified: labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2008-03-13 01:44:55 UTC (rev 18910)
+++ labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java 2008-03-13 02:04:10 UTC (rev 18911)
@@ -305,6 +305,7 @@
droolsStream.writeObject(rules);
droolsStream.writeObject(idGenerator);
droolsStream.writeBoolean(ordered);
+ droolsStream.writeObject(ruleBase);
if (!isDrools) {
bytes.close();
out.writeObject(bytes.toByteArray());
@@ -328,7 +329,7 @@
this.ordered = in.readBoolean();
// TODO: possible null for rule base.
- this.ruleBase = droolsStream.getRuleBase();
+ this.ruleBase = (InternalRuleBase)droolsStream.readObject();
this.ruleBuilder = new ReteooRuleBuilder();
if (!isDrools) {
bytes.close();
Modified: labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/CompositePackageClassLoader.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/CompositePackageClassLoader.java 2008-03-13 01:44:55 UTC (rev 18910)
+++ labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/CompositePackageClassLoader.java 2008-03-13 02:04:10 UTC (rev 18911)
@@ -1,15 +1,21 @@
package org.drools.rule;
import java.io.InputStream;
-import java.net.URL;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.Externalizable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-public class CompositePackageClassLoader extends ClassLoader implements DroolsClassLoader {
+public class CompositePackageClassLoader extends ClassLoader implements DroolsClassLoader, Externalizable {
- private final List classLoaders = new ArrayList();
+ private List classLoaders = new ArrayList();
+ public CompositePackageClassLoader() {
+ }
+
public CompositePackageClassLoader(final ClassLoader parentClassLoader) {
super( parentClassLoader );
}
@@ -18,6 +24,14 @@
this.classLoaders.add( classLoader );
}
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ classLoaders = (List)in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(classLoaders);
+ }
+
public void removeClassLoader(final ClassLoader classLoader) {
for ( final Iterator it = this.classLoaders.iterator(); it.hasNext(); ) {
if ( it.next() == classLoader ) {
Modified: labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DialectDatas.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DialectDatas.java 2008-03-13 01:44:55 UTC (rev 18910)
+++ labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DialectDatas.java 2008-03-13 02:04:10 UTC (rev 18911)
@@ -4,14 +4,11 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
-import org.drools.common.DroolsObjectInputStream;
-import org.drools.common.DroolsObjectOutputStream;
import org.drools.common.DroolsObjectInput;
public class DialectDatas implements Externalizable {
@@ -31,13 +28,7 @@
}
public DialectDatas(ClassLoader classLoader) {
- if (classLoader == null) {
- classLoader = Thread.currentThread().getContextClassLoader();
- if ( classLoader == null ) {
- classLoader = getClass().getClassLoader();
- }
- }
- this.parentClassLoader = classLoader;
+ setParentClassLoader(classLoader);
this.classLoader = new CompositePackageClassLoader( this.parentClassLoader );
this.dialects = new HashMap<String, DialectData>();
}
@@ -48,6 +39,8 @@
*
*/
public void writeExternal(final ObjectOutput stream) throws IOException {
+ stream.writeObject(this.classLoader);
+ stream.writeObject(this.parentClassLoader instanceof DroolsClassLoader ? this.parentClassLoader : null);
stream.writeObject( this.lineMappings );
stream.writeObject(this.dialects);
}
@@ -60,18 +53,14 @@
*/
public void readExternal(final ObjectInput stream) throws IOException,
ClassNotFoundException {
+ this.classLoader = (CompositePackageClassLoader)stream.readObject();
+ setParentClassLoader((ClassLoader)stream.readObject());
+ if (stream instanceof DroolsObjectInput) {
+ ((DroolsObjectInput)stream).setClassLoader(this.classLoader);
+ ((DroolsObjectInput)stream).setDialectDatas(this);
+ }
this.lineMappings = (Map) stream.readObject();
this.dialects = (Map<String, DialectData>)stream.readObject();
- if (((DroolsObjectInputStream)stream).getClassLoader() instanceof CompositePackageClassLoader) {
- this.classLoader = (CompositePackageClassLoader)((DroolsObjectInputStream)stream).getClassLoader();
- this.parentClassLoader = this.classLoader.getParent();
- }
- else {
- this.parentClassLoader = ((DroolsObjectInputStream)stream).getClassLoader();
- this.classLoader = new CompositePackageClassLoader(this.parentClassLoader);
- }
-
- ((DroolsObjectInput)stream).setDialectDatas(this);
}
public void addDialectData(String dialect, DialectData dialectData) {
@@ -142,6 +131,12 @@
}
public void setParentClassLoader(ClassLoader classLoader) {
+ if (classLoader == null) {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ if ( classLoader == null ) {
+ classLoader = getClass().getClassLoader();
+ }
+ }
this.parentClassLoader = classLoader;
}
Modified: labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DroolsClassLoader.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DroolsClassLoader.java 2008-03-13 01:44:55 UTC (rev 18910)
+++ labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/DroolsClassLoader.java 2008-03-13 02:04:10 UTC (rev 18911)
@@ -1,10 +1,11 @@
package org.drools.rule;
import java.io.InputStream;
+import java.io.Externalizable;
public interface DroolsClassLoader {
-
+
InputStream getResourceAsStream(final String name);
-
+
public Class fastFindClass(final String name);
}
Modified: labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/JavaDialectData.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/JavaDialectData.java 2008-03-13 01:44:55 UTC (rev 18910)
+++ labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/JavaDialectData.java 2008-03-13 02:04:10 UTC (rev 18911)
@@ -90,7 +90,7 @@
public JavaDialectData(final DialectDatas datas) {
this.datas = datas;
- this.classLoader = new PackageClassLoader( this.datas.getParentClassLoader() );
+ this.classLoader = new PackageClassLoader( this.datas.getParentClassLoader(), this );
this.datas.addClassLoader( this.classLoader );
this.invokerLookups = new HashMap();
this.store = new HashMap();
@@ -111,9 +111,11 @@
stream = new DroolsObjectOutputStream(stream);
}
stream.writeObject( this.datas );
+ stream.writeObject( classLoader );
stream.writeObject( this.store );
stream.writeObject( this.AST );
stream.writeObject( this.invokerLookups );
+ stream.writeBoolean( this.dirty );
}
/**
@@ -128,12 +130,15 @@
? (DroolsObjectInputStream)stream
: new DroolsObjectInputStream(stream);
this.datas = (DialectDatas)droolsStream.readObject();
- this.classLoader = new PackageClassLoader( this.datas.getParentClassLoader() );
+ this.classLoader = (PackageClassLoader)droolsStream.readObject();
this.datas.addClassLoader( this.classLoader );
this.store = (Map) stream.readObject();
this.AST = stream.readObject();
+ if (droolsStream.getClassLoader() instanceof CompositePackageClassLoader) {
+ ((CompositePackageClassLoader)droolsStream.getClassLoader()).addClassLoader(classLoader);
+ }
this.invokerLookups = (Map) droolsStream.readObject();
- this.dirty = true;
+ this.dirty = droolsStream.readBoolean();
}
public ClassLoader getClassLoader() {
@@ -255,11 +260,11 @@
/**
* This class drops the classLoader and reloads it. During this process it must re-wire all the invokeables.
- * @throws CheckedDroolsException
+ * @throws RuntimeDroolsException
*/
public void reload() throws RuntimeDroolsException {
// drops the classLoader and adds a new one
- this.classLoader = new PackageClassLoader( this.datas.getParentClassLoader() );
+ this.classLoader = new PackageClassLoader( this.datas.getParentClassLoader(), this );
this.datas.addClassLoader( this.classLoader );
// Wire up invokers
@@ -358,19 +363,32 @@
* @author mproctor
*
*/
- public class PackageClassLoader extends ClassLoader
+ public static class PackageClassLoader extends ClassLoader
implements
- DroolsClassLoader {
+ DroolsClassLoader, Externalizable {
+ private JavaDialectData parent;
- public PackageClassLoader(final ClassLoader parentClassLoader) {
+ public PackageClassLoader() {
+ }
+
+ public PackageClassLoader(final ClassLoader parentClassLoader, JavaDialectData parent) {
super( parentClassLoader );
+ this.parent = parent;
}
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ parent = (JavaDialectData)in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(parent);
+ }
+
public Class fastFindClass(final String name) {
final Class clazz = findLoadedClass( name );
- if ( clazz == null ) {
- final byte[] clazzBytes = read( convertClassToResourcePath( name ) );
+ if ( clazz == null && parent != null) {
+ final byte[] clazzBytes = parent.read( convertClassToResourcePath( name ) );
if ( clazzBytes != null ) {
return defineClass( name,
clazzBytes,
@@ -420,7 +438,7 @@
public InputStream getResourceAsStream(final String name) {
- final byte[] bytes = (byte[]) JavaDialectData.this.store.get( name );
+ final byte[] bytes = (byte[]) parent.store.get( name );
if ( bytes != null ) {
return new ByteArrayInputStream( bytes );
} else {
Modified: labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java
===================================================================
--- labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java 2008-03-13 01:44:55 UTC (rev 18910)
+++ labs/jbossrules/branches/ming-serialization/drools-core/src/main/java/org/drools/rule/MapBackedClassLoader.java 2008-03-13 02:04:10 UTC (rev 18911)
@@ -3,16 +3,20 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
+import java.io.ObjectInput;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.Externalizable;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
import java.util.HashMap;
import java.util.Map;
+import java.util.List;
public class MapBackedClassLoader extends ClassLoader
implements
- DroolsClassLoader,
- Serializable {
+ DroolsClassLoader, Externalizable {
private static final long serialVersionUID = 400L;
@@ -28,6 +32,9 @@
} );
}
+ public MapBackedClassLoader() {
+ }
+
public MapBackedClassLoader(final ClassLoader parentClassLoader) {
super( parentClassLoader );
this.store = new HashMap();
@@ -39,6 +46,14 @@
this.store = store;
}
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ store = (Map)in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(store);
+ }
+
public void addResource(String className,
byte[] bytes) {
addClass( className,
More information about the jboss-svn-commits
mailing list