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 e6c66c0  [OWB-1363] enable to only load proxies and not generate them 
at all - dropping proxy classloader ref at the same time
e6c66c0 is described below

commit e6c66c02962c646e0b8ff107402b6c1b7fd4a689
Author: Romain Manni-Bucau <rmannibu...@gmail.com>
AuthorDate: Thu Dec 31 17:36:26 2020 +0100

    [OWB-1363] enable to only load proxies and not generate them at all - 
dropping proxy classloader ref at the same time
---
 .../webbeans/service/ClassLoaderProxyService.java  | 27 +++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git 
a/webbeans-impl/src/main/java/org/apache/webbeans/service/ClassLoaderProxyService.java
 
b/webbeans-impl/src/main/java/org/apache/webbeans/service/ClassLoaderProxyService.java
index 9a564ec..aab6332 100644
--- 
a/webbeans-impl/src/main/java/org/apache/webbeans/service/ClassLoaderProxyService.java
+++ 
b/webbeans-impl/src/main/java/org/apache/webbeans/service/ClassLoaderProxyService.java
@@ -25,6 +25,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.exception.WebBeansException;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
 import org.apache.webbeans.spi.DefiningClassService;
 
@@ -81,7 +82,7 @@ public class ClassLoaderProxyService implements 
DefiningClassService
         }
     }
 
-    // runtim companion of Spy - @Experimental
+    // runtime companion of Spy - @Experimental
     public static class LoadFirst extends ClassLoaderProxyService
     {
         public LoadFirst(final WebBeansContext context)
@@ -109,6 +110,30 @@ public class ClassLoaderProxyService implements 
DefiningClassService
         }
     }
 
+    // strict load only impl, it changes LoadFirst by not creating a 
classloader at all (nice in graalvm) -@Experimental
+    public static class LoadOnly implements DefiningClassService
+    {
+        @Override
+        public ClassLoader getProxyClassLoader(final Class<?> forClass)
+        {
+            return Thread.currentThread().getContextClassLoader();
+        }
+
+        @Override
+        public <T> Class<T> defineAndLoad(final String name, final byte[] 
bytecode, final Class<T> proxiedClass)
+        {
+            try
+            {
+                return (Class<T>) getProxyClassLoader(null).loadClass(name);
+            }
+            catch (final ClassNotFoundException e)
+            {
+                
WebBeansLoggerFacade.getLogger(getClass()).warning(e.getMessage());
+                throw new WebBeansException(e);
+            }
+        }
+    }
+
     private static class ProxiesClassLoader extends ClassLoader
     {
         private final boolean skipPackages;

Reply via email to