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 <[email protected]>
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;