This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwebbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 8cf2e1a  OWB-1315 ensure to not use Unsafe when DefiningClassService 
is defined
8cf2e1a is described below

commit 8cf2e1a3e3737485905b59e7790464722a4d747b
Author: Romain Manni-Bucau <rmannibu...@apache.org>
AuthorDate: Tue Mar 10 13:09:52 2020 +0100

    OWB-1315 ensure to not use Unsafe when DefiningClassService is defined
---
 .../apache/webbeans/proxy/AbstractProxyFactory.java | 21 ++++++++++++++++++++-
 .../proxy/InterceptorDecoratorProxyFactory.java     |  8 ++------
 .../webbeans/proxy/NormalScopeProxyFactory.java     |  2 +-
 3 files changed, 23 insertions(+), 8 deletions(-)

diff --git 
a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
 
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
index 1885c0b..49216c3 100644
--- 
a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
+++ 
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java
@@ -75,8 +75,8 @@ public abstract class AbstractProxyFactory
     {
         this.webBeansContext = webBeansContext;
         javaVersion = determineDefaultJavaVersion();
-        unsafe = new Unsafe();
         definingService = 
webBeansContext.getService(DefiningClassService.class);
+        unsafe = definingService == null ? new Unsafe() : null;
     }
 
     private int determineDefaultJavaVersion()
@@ -280,6 +280,25 @@ public abstract class AbstractProxyFactory
         return unsafe.defineAndLoadClass(classLoader, proxyClassName, 
proxyBytes);
     }
 
+    protected  <T> T newInstance(final Class<? extends T> proxyClass)
+    {
+        if (unsafe != null)
+        {
+            return unsafe.unsafeNewInstance(proxyClass);
+        }
+        else
+        {
+            try
+            {
+                return proxyClass.getConstructor().newInstance();
+            }
+            catch (final Exception e)
+            {
+                throw new IllegalStateException("Failed to allocateInstance of 
Proxy class " + proxyClass.getName(), e);
+            }
+        }
+    }
+
     private Method[] sortOutDuplicateMethods(Method[] methods)
     {
         if (methods == null || methods.length == 0)
diff --git 
a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
 
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
index 061dba8..5f347c9 100644
--- 
a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
+++ 
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/InterceptorDecoratorProxyFactory.java
@@ -87,7 +87,7 @@ public class InterceptorDecoratorProxyFactory extends 
AbstractProxyFactory
 
         try
         {
-            T proxy = unsafe.unsafeNewInstance(proxyClass);
+            T proxy = newInstance(proxyClass);
 
             Field delegateField = 
proxy.getClass().getDeclaredField(FIELD_PROXIED_INSTANCE);
             delegateField.setAccessible(true);
@@ -99,11 +99,7 @@ public class InterceptorDecoratorProxyFactory extends 
AbstractProxyFactory
 
             return proxy;
         }
-        catch (IllegalAccessException e)
-        {
-            throw new ProxyGenerationException(e);
-        }
-        catch (NoSuchFieldException e)
+        catch (IllegalAccessException | NoSuchFieldException e)
         {
             throw new ProxyGenerationException(e);
         }
diff --git 
a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
 
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
index c652284..0d7d456 100644
--- 
a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
+++ 
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/NormalScopeProxyFactory.java
@@ -291,7 +291,7 @@ public class NormalScopeProxyFactory extends 
AbstractProxyFactory
     {
         try
         {
-            T proxy = unsafe.unsafeNewInstance(proxyClass);
+            T proxy = newInstance(proxyClass);
 
             Field delegateField = 
proxy.getClass().getDeclaredField(FIELD_INSTANCE_PROVIDER);
             delegateField.setAccessible(true);

Reply via email to