[jboss-svn-commits] JBL Code SVN: r11129 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Apr 19 13:41:24 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-04-19 13:41:24 -0400 (Thu, 19 Apr 2007)
New Revision: 11129

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
Log:
JBRULES-809
-ClassFieldExtractorFactory uses the Thread.currentThread().getContextClassLoader() instead of the classloader in PackageCompilationData

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-04-19 17:19:18 UTC (rev 11128)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2007-04-19 17:41:24 UTC (rev 11129)
@@ -42,12 +42,18 @@
     private String                   fieldName;
     private Class                    clazz;
     private transient FieldExtractor extractor;
+    
+    public ClassFieldExtractor(final Class clazz,
+                               final String fieldName) {
+        this( clazz, fieldName, null );
+    }
 
     public ClassFieldExtractor(final Class clazz,
-                               final String fieldName) {
+                               final String fieldName,
+                               final ClassLoader classLoader) {
         this.clazz = clazz;
         this.fieldName = fieldName;
-        init();
+        init(classLoader);
     }
 
     private void readObject(final ObjectInputStream is) throws ClassNotFoundException,
@@ -55,13 +61,14 @@
                                                        Exception {
         //always perform the default de-serialization first
         is.defaultReadObject();
-        init();
+        init(null);
     }
 
-    public void init() {
+    public void init(final ClassLoader classLoader) {
         try {
             this.extractor = ClassFieldExtractorFactory.getClassFieldExtractor( this.clazz,
-                                                                                this.fieldName );
+                                                                                this.fieldName,
+                                                                                classLoader );
         } catch ( final Exception e ) {
             throw new RuntimeDroolsException( e );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java	2007-04-19 17:19:18 UTC (rev 11128)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorCache.java	2007-04-19 17:41:24 UTC (rev 11129)
@@ -20,13 +20,15 @@
     }
 
     public ClassFieldExtractor getExtractor(final Class clazz,
-                                            final String fieldName) {
+                                            final String fieldName,
+                                            ClassLoader classLoader) {
         final String key = clazz.getName() + "|" + fieldName;
         if ( this.cache.containsKey( key ) ) {
             return (ClassFieldExtractor) this.cache.get( key );
         } else {
             final ClassFieldExtractor ex = new ClassFieldExtractor( clazz,
-                                                                    fieldName );
+                                                                    fieldName,
+                                                                    classLoader );
             this.cache.put( key,
                             ex );
             return ex;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-04-19 17:19:18 UTC (rev 11128)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2007-04-19 17:41:24 UTC (rev 11129)
@@ -70,6 +70,14 @@
 
     public static BaseClassFieldExtractor getClassFieldExtractor(final Class clazz,
                                                                  final String fieldName) {
+        return getClassFieldExtractor( clazz,
+                                       fieldName,
+                                       null );
+    }
+
+    public static BaseClassFieldExtractor getClassFieldExtractor(final Class clazz,
+                                                                 final String fieldName,
+                                                                 final ClassLoader classLoader) {
         try {
             // if it is a self reference
             if ( SELF_REFERENCE_FIELD.equals( fieldName ) ) {
@@ -95,11 +103,11 @@
                                            fieldType,
                                            clazz.isInterface() );
                 // use bytes to get a class 
-                final ByteArrayClassLoader classLoader = new ByteArrayClassLoader( Thread.currentThread().getContextClassLoader() );
-                final Class newClass = classLoader.defineClass( className.replace( '/',
-                                                                                   '.' ),
-                                                                bytes,
-                                                                PROTECTION_DOMAIN );
+                final ByteArrayClassLoader byteArrayClassLoader = new ByteArrayClassLoader( (classLoader != null) ? classLoader : Thread.currentThread().getContextClassLoader() );
+                final Class newClass = byteArrayClassLoader.defineClass( className.replace( '/',
+                                                                                            '.' ),
+                                                                         bytes,
+                                                                         PROTECTION_DOMAIN );
                 // instantiating target class
                 final Integer index = (Integer) inspector.getFieldNames().get( fieldName );
                 final ValueType valueType = ValueType.determineValueType( fieldType );




More information about the jboss-svn-commits mailing list