You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2011/01/06 10:42:14 UTC

svn commit: r1055806 - in /openwebbeans/trunk/webbeans-impl/src/main: java/org/apache/webbeans/config/OpenWebBeansConfiguration.java java/org/apache/webbeans/proxy/JavassistProxyFactory.java resources/META-INF/openwebbeans/openwebbeans.properties

Author: gerdogdu
Date: Thu Jan  6 09:42:14 2011
New Revision: 1055806

URL: http://svn.apache.org/viewvc?rev=1055806&view=rev
Log:
[OWB-496], adding flag for updating javassist classloader provider. Default to false therefore current sitation has not chaged

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OpenWebBeansConfiguration.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
    openwebbeans/trunk/webbeans-impl/src/main/resources/META-INF/openwebbeans/openwebbeans.properties

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OpenWebBeansConfiguration.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OpenWebBeansConfiguration.java?rev=1055806&r1=1055805&r2=1055806&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OpenWebBeansConfiguration.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/OpenWebBeansConfiguration.java Thu Jan  6 09:42:14 2011
@@ -110,6 +110,8 @@ public class OpenWebBeansConfiguration
     public static final String EL_ADAPTOR_CLASS = "org.apache.webbeans.spi.adaptor.ELAdaptor";
     
     public static final String PROPERTY_OWB_APPLICATION = "org.apache.webbeans.application.isOwbApplication";
+    
+    public static final String USE_JAVASSIST_CLASSLOADERPROVIDER = "org.apache.webbeans.javassist.useClassLoaderProvider";
 
     /**
      * Use BDABeansXmlScanner to determine if interceptors, decorators, and
@@ -323,4 +325,17 @@ public class OpenWebBeansConfiguration
         
         return Boolean.valueOf(value);
     }
+    
+    /**
+     * Gets flag for updating Javasisst ProxyFactory.classLoaderProvider
+     * @return true if use javassist ProxyFactory.classLoaderProvider
+     * update if exception occurn on ProxyFactory.createClass
+     */
+    public boolean isUpdateJavassistClassLoaderProvider()
+    {
+        String value = getProperty(USE_JAVASSIST_CLASSLOADERPROVIDER);
+        
+        return Boolean.valueOf(value);
+    }
+    
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=1055806&r1=1055805&r2=1055806&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java Thu Jan  6 09:42:14 2011
@@ -35,6 +35,7 @@ import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.Decorator;
 
 import javassist.util.proxy.ProxyFactory;
+import javassist.util.proxy.ProxyFactory.ClassLoaderProvider;
 import javassist.util.proxy.ProxyObject;
 import org.apache.webbeans.annotation.WebBeansAnnotation;
 import org.apache.webbeans.component.InjectionTargetBean;
@@ -309,7 +310,43 @@ public final class JavassistProxyFactory
 
     public  Class<?> getProxyClass(ProxyFactory factory)
     {
-        return SecurityUtil.doPrivilegedCreateClass(factory);
+        ClassLoaderProvider oldProvider = ProxyFactory.classLoaderProvider;
+        Class<?> clazz = null;
+        try
+        {
+            clazz = SecurityUtil.doPrivilegedCreateClass(factory);            
+        }
+        catch(RuntimeException e)
+        {
+            //Default is false
+            if(WebBeansContext.getInstance().getOpenWebBeansConfiguration().isUpdateJavassistClassLoaderProvider())
+            {                   
+                //Try thread class loader
+                ProxyFactory.classLoaderProvider = new ProxyFactory.ClassLoaderProvider()
+                {                            
+                    @Override
+                    public ClassLoader get(ProxyFactory pf)
+                    {
+                        return WebBeansUtil.getCurrentClassLoader();
+                    }
+                };
+                
+                //try again with updated class loader
+                clazz = SecurityUtil.doPrivilegedCreateClass(factory);  
+            }
+            else
+            {
+                //Default, throw exception
+                throw e;
+            }
+        }
+        finally
+        {
+            //Switch to old
+            ProxyFactory.classLoaderProvider = oldProvider;            
+        }
+        
+        return clazz; 
     }
     
     public  ProxyFactory createProxyFactory(Bean<?> bean) throws Exception

Modified: openwebbeans/trunk/webbeans-impl/src/main/resources/META-INF/openwebbeans/openwebbeans.properties
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/resources/META-INF/openwebbeans/openwebbeans.properties?rev=1055806&r1=1055805&r2=1055806&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/resources/META-INF/openwebbeans/openwebbeans.properties (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/resources/META-INF/openwebbeans/openwebbeans.properties Thu Jan  6 09:42:14 2011
@@ -104,3 +104,10 @@ org.apache.webbeans.application.supports
 # of the appropriate archive.
 org.apache.webbeans.useBDABeansXMLScanner=false
 ################################################################################################
+
+####################### Proxy Factory Class Loader Update ######################################
+# If true, ProxyFactory.classLoaderProvider will be updates on ClassNotFoundException, 
+# default to false
+org.apache.webbeans.javassist.useClassLoaderProvider=false
+################################################################################################
+