[jboss-svn-commits] JBL Code SVN: r35984 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/factmodel and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Nov 15 20:04:43 EST 2010
Author: mark.proctor at jboss.com
Date: 2010-11-15 20:04:42 -0500 (Mon, 15 Nov 2010)
New Revision: 35984
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/factmodel/ClassBuilder.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java
Log:
-removed classloader crap from ClassBuilder
-removed injecting of byte[] into the app classloader
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2010-11-15 23:23:26 UTC (rev 35983)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2010-11-16 01:04:42 UTC (rev 35984)
@@ -1070,7 +1070,7 @@
TypeDeclaration type,
PackageRegistry pkgRegistry) {
// need to fix classloader?
- ClassBuilder cb = new ClassBuilder();
+ ClassBuilder cb = new ClassBuilder( );
String fullName = typeDescr.getNamespace() + "." + typeDescr.getTypeName();
// generated beans should be serializable
@@ -1116,15 +1116,8 @@
field = queue.poll();
}
-
-
-
-
-
-
byte[] d = cb.buildClass(def);
-
JavaDialectRuntimeData dialect = (JavaDialectRuntimeData) pkgRegistry.getDialectRuntimeRegistry().getDialectData( "java" );
dialect.write( JavaDialectRuntimeData.convertClassToResourcePath( fullName ),
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/factmodel/ClassBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/factmodel/ClassBuilder.java 2010-11-15 23:23:26 UTC (rev 35983)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/factmodel/ClassBuilder.java 2010-11-16 01:04:42 UTC (rev 35984)
@@ -49,81 +49,17 @@
*/
public class ClassBuilder {
private boolean debug = false;
- private ClassLoader loader = null;
public ClassBuilder() {
- this( null,
- "true".equalsIgnoreCase( System.getProperty( "org.drools.classbuilder.debug" ) ) );
+ this( "true".equalsIgnoreCase( System.getProperty( "org.drools.classbuilder.debug" ) ) );
}
public ClassBuilder(final boolean debug) {
- this( null,
- debug );
- }
-
- public ClassBuilder(final ClassLoader loader) {
- this( loader,
- false );
- }
-
- public ClassBuilder(final ClassLoader loader,
- final boolean debug) {
- this.loader = loader;
- if ( this.loader == null ) {
- this.loader = Thread.currentThread().getContextClassLoader();
- if ( this.loader == null ) {
- this.loader = getClass().getClassLoader();
- }
- }
this.debug = debug;
}
-
-
-
/**
- * Loads a class once it has been created in serialized form
- *
- * @param classDef the class definition object structure
- * @param serializedClazz the serialized class
- *
- * @return the Class instance for the given class definition
- *
- * @throws IOException
- * @throws IntrospectionException
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- * @throws NoSuchMethodException
- * @throws ClassNotFoundException
- * @throws IllegalArgumentException
- * @throws SecurityException
- * @throws NoSuchFieldException
- * @throws InstantiationException
- */
- public Class< ? > loadBuiltClass(ClassDefinition classDef, byte[] serializedClazz) throws IOException,
- IntrospectionException,
- SecurityException,
- IllegalArgumentException,
- ClassNotFoundException,
- NoSuchMethodException,
- IllegalAccessException,
- InvocationTargetException,
- InstantiationException,
- NoSuchFieldException {
-
- try {
- Class< ? > clazz = Class.forName( classDef.getClassName() );
- return clazz;
- } catch ( ClassNotFoundException e ) {
- Class< ? > clazz = this.loadClass( classDef.getClassName(),serializedClazz );
- classDef.setDefinedClass( clazz );
- return clazz;
- }
-
- }
-
- /**
* Dynamically builds, defines and loads a class based on the given class definition
*
* @param classDef the class definition object structure
@@ -141,53 +77,6 @@
* @throws NoSuchFieldException
* @throws InstantiationException
*/
- public Class< ? > buildAndLoadClass(ClassDefinition classDef) throws IOException,
- IntrospectionException,
- SecurityException,
- IllegalArgumentException,
- ClassNotFoundException,
- NoSuchMethodException,
- IllegalAccessException,
- InvocationTargetException,
- InstantiationException,
- NoSuchFieldException {
- try {
- Class< ? > clazz = Class.forName( classDef.getClassName() );
-
- classDef.setDefinedClass( clazz );
-
- return clazz;
-
- } catch ( ClassNotFoundException e ) {
- // class not loaded, so create and load it
- byte[] serializedClazz = this.buildClass( classDef );
-
- // Class< ? > clazz = this.loadClass( classDef.getClassName(),
- // serializedClazz );
- // classDef.setDefinedClass( clazz );
- Class< ? > clazz = Class.forName( classDef.getClassName() );
- return clazz;
- }
- }
-
- /**
- * Dynamically builds, defines and loads a class based on the given class definition
- *
- * @param classDef the class definition object structure
- *
- * @return the Class instance for the given class definition
- *
- * @throws IOException
- * @throws IntrospectionException
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- * @throws NoSuchMethodException
- * @throws ClassNotFoundException
- * @throws IllegalArgumentException
- * @throws SecurityException
- * @throws NoSuchFieldException
- * @throws InstantiationException
- */
public byte[] buildClass(ClassDefinition classDef) throws IOException,
IntrospectionException,
SecurityException,
@@ -254,7 +143,6 @@
cw.visitEnd();
byte[] serializedClass = cw.toByteArray();
- loadBuiltClass(classDef, serializedClass);
return serializedClass;
}
@@ -1038,32 +926,6 @@
}
}
- private Class< ? > loadClass(String classname,
- byte[] b) throws ClassNotFoundException,
- SecurityException,
- NoSuchMethodException,
- IllegalArgumentException,
- IllegalAccessException,
- InvocationTargetException {
- //override classDefine (as it is protected) and define the class.
- Class< ? > clazz = null;
- ClassLoader loader = ClassBuilder.class.getClassLoader();
- Class< ? > cls = Class.forName( "java.lang.ClassLoader" );
- java.lang.reflect.Method method = cls.getDeclaredMethod( "defineClass",
- new Class[]{String.class, byte[].class, int.class, int.class} );
-
- // protected method invocaton
- method.setAccessible( true );
- try {
- Object[] args = new Object[]{classname, b, new Integer( 0 ), new Integer( b.length )};
- clazz = (Class< ? >) method.invoke( loader,
- args );
- } finally {
- method.setAccessible( false );
- }
- return clazz;
- }
-
/**
* Returns the corresponding internal type representation for the
* given type.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java 2010-11-15 23:23:26 UTC (rev 35983)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/DroolsCompositeClassLoader.java 2010-11-16 01:04:42 UTC (rev 35984)
@@ -40,7 +40,8 @@
}
public synchronized void addClassLoader(final ClassLoader classLoader) {
- if ( classLoader == null ) {
+ if ( classLoader == null || classLoader == this ) {
+ // do not add a null classloader or add itself
return;
}
/* NB: we need synchronized here even though we use a COW list:
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java 2010-11-15 23:23:26 UTC (rev 35983)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/ClassBuilderTest.java 2010-11-16 01:04:42 UTC (rev 35984)
@@ -31,23 +31,43 @@
import org.drools.base.ClassFieldAccessorCache;
import org.drools.base.ClassFieldAccessorStore;
+import org.drools.rule.DroolsCompositeClassLoader;
+import org.drools.rule.JavaDialectRuntimeData;
+import org.drools.rule.JavaDialectRuntimeData.PackageClassLoader;
public class ClassBuilderTest extends TestCase {
ClassFieldAccessorStore store = new ClassFieldAccessorStore();
- private ClassLoader classLoader;
-
+ ClassLoader classLoader;
+ JavaDialectRuntimeData data;
+
protected void setUp() throws Exception {
super.setUp();
- classLoader = this.getClass().getClassLoader();
- store.setClassFieldAccessorCache( new ClassFieldAccessorCache( classLoader ) );
- store.setEagerWire( true );
+ data = new JavaDialectRuntimeData();
}
protected void tearDown() throws Exception {
super.tearDown();
}
+ private Class build(ClassBuilder builder, ClassDefinition classDef) throws Exception {
+ byte[] d = builder.buildClass( classDef);
+
+ data.write( JavaDialectRuntimeData.convertClassToResourcePath( classDef.getClassName() ),
+ d );
+ classLoader = new PackageClassLoader(data, new DroolsCompositeClassLoader( getClass().getClassLoader(), false ));
+
+ this.store = new ClassFieldAccessorStore();
+ store.setClassFieldAccessorCache( new ClassFieldAccessorCache( classLoader ) );
+ store.setEagerWire( true );
+
+ Class clazz = classLoader.loadClass( classDef.getClassName() );
+ classDef.setDefinedClass( clazz );
+
+ return clazz;
+
+ }
+
/*
* Test method for 'org.drools.common.asm.ClassBuilder.buildClass(ClassDefinition)'
*/
@@ -65,8 +85,11 @@
"java.lang.String" );//"java.lang.String" );
classDef.addField( intDef );
classDef.addField( stringDef );
+
+ Class clazz = build(builder, classDef);
- Class clazz = builder.buildAndLoadClass( classDef );
+
+
intDef.setReadWriteAccessor( store.getAccessor( clazz,
intDef.getName(),
classLoader ) );
@@ -74,7 +97,7 @@
stringDef.getName(),
classLoader ) );
- byte[] data = builder.buildClass( classDef );
+ byte[] d = builder.buildClass( classDef );
Assert.assertSame( "Returned class should be the same",
clazz,
@@ -100,7 +123,7 @@
((Integer) intDef.getValue( instance )).intValue() );
// testing class rebuilding
- clazz = builder.buildAndLoadClass( classDef );
+ clazz = build(builder, classDef);
} catch ( Exception e ) {
e.printStackTrace();
@@ -160,7 +183,7 @@
classDef.addField( dateDef );
classDef.addField( str2Def );
- Class clazz = builder.buildAndLoadClass( classDef );
+ Class clazz = build(builder, classDef);
long1Def.setReadWriteAccessor( store.getAccessor( clazz,
long1Def.getName(),
classLoader ) );
@@ -270,7 +293,7 @@
classDef.addField( intDef );
classDef.addField( strDef );
- Class clazz = builder.buildAndLoadClass( classDef );
+ Class clazz = build(builder, classDef);
intDef.setReadWriteAccessor( store.getAccessor( clazz,
intDef.getName(),
classLoader ) );
@@ -333,7 +356,7 @@
classDef.addField( dateDef );
classDef.addField( str2Def );
- Class clazz = builder.buildAndLoadClass( classDef );
+ Class clazz = build(builder, classDef);
long1Def.setReadWriteAccessor( store.getAccessor( clazz,
long1Def.getName(),
classLoader ) );
@@ -410,7 +433,7 @@
classDef.addField( fields[i] );
}
- Class< ? > clazz = builder.buildAndLoadClass( classDef );
+ Class clazz = build(builder, classDef);
for ( FieldDefinition field : fields ) {
field.setReadWriteAccessor( store.getAccessor( clazz,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java 2010-11-15 23:23:26 UTC (rev 35983)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/factmodel/InstancesHashcodedTest.java 2010-11-16 01:04:42 UTC (rev 35984)
@@ -19,6 +19,12 @@
import java.util.Calendar;
import java.util.Date;
+import org.drools.base.ClassFieldAccessorCache;
+import org.drools.base.ClassFieldAccessorStore;
+import org.drools.rule.DroolsCompositeClassLoader;
+import org.drools.rule.JavaDialectRuntimeData;
+import org.drools.rule.JavaDialectRuntimeData.PackageClassLoader;
+
import junit.framework.TestCase;
/**
@@ -40,6 +46,23 @@
</dimension>
*/
+ private Class build(ClassBuilder builder, ClassDefinition classDef) throws Exception {
+ byte[] d = builder.buildClass( classDef);
+ JavaDialectRuntimeData data = new JavaDialectRuntimeData();
+ data.write( JavaDialectRuntimeData.convertClassToResourcePath( classDef.getClassName() ),
+ d );
+ ClassLoader classLoader = new PackageClassLoader(data, new DroolsCompositeClassLoader( getClass().getClassLoader(), false ));
+
+ ClassFieldAccessorStore store = new ClassFieldAccessorStore();
+ store.setClassFieldAccessorCache( new ClassFieldAccessorCache( classLoader ) );
+ store.setEagerWire( true );
+
+ Class clazz = classLoader.loadClass( classDef.getClassName() );
+ classDef.setDefinedClass( clazz );
+
+ return clazz;
+
+ }
public void testInstanceHashcodes() {
@@ -65,7 +88,7 @@
Date d2 = cal.getTime();
try {
- Class klass = cb.buildAndLoadClass(cd);
+ Class klass = build(cb, cd);
Object o1 = klass.newInstance();
cd.getField("cutDate").getFieldAccessor().setValue(o1, cut);
cd.getField("dueDate").getFieldAccessor().setValue(o1, d1);
More information about the jboss-svn-commits
mailing list