[openwebbeans] branch master updated: adding comments and cosmetic changes
This is an automated email from the ASF dual-hosted git repository. gerdogdu 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 91dcbf2 adding comments and cosmetic changes new b6c1310 Merge branch 'master' of https://github.com/apache/openwebbeans 91dcbf2 is described below commit 91dcbf2484c7da9aeba9a90712a4a16f8438c84f Author: Gurkan Erdogdu AuthorDate: Thu Jun 4 01:25:55 2020 +0300 adding comments and cosmetic changes --- .../src/main/java/org/apache/webbeans/component/OwbBean.java | 5 + .../main/java/org/apache/webbeans/proxy/AbstractProxyFactory.java| 2 +- .../java/org/apache/webbeans/spi/ApplicationBoundaryService.java | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java b/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java index 83173c7..2e859ca 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java @@ -96,5 +96,10 @@ public interface OwbBean extends Bean */ boolean isDependent(); + +/** + * Gets the context instance in which this bean belongs to. + * @return the {@link WebBeansContext} instance + */ WebBeansContext getWebBeansContext(); } 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 2ec4daa..8934c59 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 @@ -146,7 +146,7 @@ public abstract class AbstractProxyFactory /** * @return the marker interface which should be used for this proxy. */ -protected abstract Class getMarkerInterface(); +protected abstract Class getMarkerInterface(); /** * generate the bytecode for creating the instance variables of the class diff --git a/webbeans-spi/src/main/java/org/apache/webbeans/spi/ApplicationBoundaryService.java b/webbeans-spi/src/main/java/org/apache/webbeans/spi/ApplicationBoundaryService.java index 592d9f2..ac81045 100644 --- a/webbeans-spi/src/main/java/org/apache/webbeans/spi/ApplicationBoundaryService.java +++ b/webbeans-spi/src/main/java/org/apache/webbeans/spi/ApplicationBoundaryService.java @@ -38,6 +38,6 @@ public interface ApplicationBoundaryService /** * @return the ClassLoader which shall get used to e.g. proxy that very class. */ -ClassLoader getBoundaryClassLoader(Class classToProxy); +ClassLoader getBoundaryClassLoader(Class classToProxy); }
[openwebbeans] branch master updated: [OWB-1325] adding ClassLoaderProxyService.LoadFirst, companion of Spy flavor which behaves exactly as ClassLoaderProxyService but trying first to load the class i
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 1f83552 [OWB-1325] adding ClassLoaderProxyService.LoadFirst, companion of Spy flavor which behaves exactly as ClassLoaderProxyService but trying first to load the class in the proxied class or TCCL 1f83552 is described below commit 1f83552e74c7966fc1009a3a7417900e7ce42b32 Author: Romain Manni-Bucau AuthorDate: Wed Jun 3 18:47:21 2020 +0200 [OWB-1325] adding ClassLoaderProxyService.LoadFirst, companion of Spy flavor which behaves exactly as ClassLoaderProxyService but trying first to load the class in the proxied class or TCCL --- .../webbeans/proxy/AbstractProxyFactory.java | 8 ++ .../webbeans/service/ClassLoaderProxyService.java | 29 ++ 2 files changed, 37 insertions(+) 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 2ec4daa..42ccb69 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 @@ -58,6 +58,8 @@ public abstract class AbstractProxyFactory private final DefiningClassService definingService; +private final boolean useStaticNames; + protected WebBeansContext webBeansContext; private final int javaVersion; @@ -76,6 +78,8 @@ public abstract class AbstractProxyFactory this.webBeansContext = webBeansContext; javaVersion = determineDefaultJavaVersion(); definingService = webBeansContext.getService(DefiningClassService.class); +useStaticNames = Boolean.parseBoolean(webBeansContext.getOpenWebBeansConfiguration() +.getProperty("org.apache.webbeans.proxy.useStaticNames")); unsafe = definingService == null ? new Unsafe() : null; } @@ -192,6 +196,10 @@ public abstract class AbstractProxyFactory proxyClassName = fixPreservedPackages(proxyClassName); String finalName = proxyClassName; +if (useStaticNames) // todo: refine +{ +return proxyClassName + 0; +} for (int i = 0; i < MAX_CLASSLOAD_TRIES; i++) { 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 9946850..9a564ec 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.logger.WebBeansLoggerFacade; import org.apache.webbeans.spi.DefiningClassService; public class ClassLoaderProxyService implements DefiningClassService @@ -80,6 +81,34 @@ public class ClassLoaderProxyService implements DefiningClassService } } +// runtim companion of Spy - @Experimental +public static class LoadFirst extends ClassLoaderProxyService +{ +public LoadFirst(final WebBeansContext context) +{ +super(context); +} + +@Override +public Class defineAndLoad(final String name, final byte[] bytecode, final Class proxiedClass) +{ +ClassLoader proxyClassLoader = getProxyClassLoader(proxiedClass); +if (proxyClassLoader == null) +{ +proxyClassLoader = Thread.currentThread().getContextClassLoader(); +} +try +{ +return (Class) proxyClassLoader.loadClass(name); +} +catch (final ClassNotFoundException e) +{ + WebBeansLoggerFacade.getLogger(getClass()).warning(e.getMessage()); +return super.defineAndLoad(name, bytecode, proxiedClass); +} +} +} + private static class ProxiesClassLoader extends ClassLoader { private final boolean skipPackages;
[openwebbeans] branch master updated: [OWB-1325] adding ClassLoaderProxyService.Spy DefiningClassService for toolings
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 a6e6e40 [OWB-1325] adding ClassLoaderProxyService.Spy DefiningClassService for toolings a6e6e40 is described below commit a6e6e40782f082655097d7f84338293e6d7f5fae Author: Romain Manni-Bucau AuthorDate: Wed Jun 3 18:26:17 2020 +0200 [OWB-1325] adding ClassLoaderProxyService.Spy DefiningClassService for toolings --- .../webbeans/service/ClassLoaderProxyService.java | 46 -- 1 file changed, 42 insertions(+), 4 deletions(-) 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 618a898..9946850 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 @@ -19,6 +19,8 @@ package org.apache.webbeans.service; import java.security.ProtectionDomain; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -31,7 +33,15 @@ public class ClassLoaderProxyService implements DefiningClassService public ClassLoaderProxyService(final WebBeansContext context) { -this.loader = new ProxiesClassLoader(context.getApplicationBoundaryService().getApplicationClassLoader()); +this.loader = new ProxiesClassLoader( +context, +Boolean.parseBoolean(context.getOpenWebBeansConfiguration() +.getProperty(getClass().getName() + ".skipPackages"))); +} + +protected ClassLoaderProxyService(final ProxiesClassLoader loader) +{ +this.loader = loader; } @Override @@ -47,13 +57,38 @@ public class ClassLoaderProxyService implements DefiningClassService name, bytecode, proxiedClass.getPackage(), proxiedClass.getProtectionDomain()); } +// for build tools - @Experimental +public static class Spy extends ClassLoaderProxyService +{ +private final Map proxies = new HashMap<>(); + +public Spy(final WebBeansContext context) +{ +super(new ProxiesClassLoader(context, true)); +} + +public Map getProxies() +{ +return proxies; +} + +@Override +public Class defineAndLoad(final String name, final byte[] bytecode, final Class proxiedClass) +{ +proxies.put(name, bytecode); +return super.defineAndLoad(name, bytecode, proxiedClass); +} +} + private static class ProxiesClassLoader extends ClassLoader { +private final boolean skipPackages; private final ConcurrentMap> classes = new ConcurrentHashMap<>(); -private ProxiesClassLoader(final ClassLoader applicationClassLoader) +private ProxiesClassLoader(final WebBeansContext context, boolean skipPackages) { -super(applicationClassLoader); + super(context.getApplicationBoundaryService().getApplicationClassLoader()); +this.skipPackages = skipPackages; } @@ -80,7 +115,10 @@ public class ClassLoaderProxyService implements DefiningClassService existing = classes.get(key); if (existing == null) { -definePackageFor(pck, protectionDomain); +if (!skipPackages) +{ +definePackageFor(pck, protectionDomain); +} existing = super.defineClass(proxyClassName, proxyBytes, 0, proxyBytes.length); resolveClass(existing); classes.put(key, existing);
svn commit: r1061409 - in /websites: production/openwebbeans/content/index.html staging/openwebbeans/trunk/content/index.html
Author: buildbot Date: Wed Jun 3 10:35:08 2020 New Revision: 1061409 Log: Dynamic update by buildbot for openwebbeans Modified: websites/production/openwebbeans/content/index.html websites/staging/openwebbeans/trunk/content/index.html Modified: websites/production/openwebbeans/content/index.html == (empty) Modified: websites/staging/openwebbeans/trunk/content/index.html == (empty)
[openwebbeans] branch master updated: [OWB-1214] fallback on loadClass(package-info) when getPackage is not available in the JVM
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 5d00bcc [OWB-1214] fallback on loadClass(package-info) when getPackage is not available in the JVM 5d00bcc is described below commit 5d00bcc5c9d9a5efc0a9848d46eff91ef5186025 Author: Romain Manni-Bucau AuthorDate: Wed Jun 3 10:43:26 2020 +0200 [OWB-1214] fallback on loadClass(package-info) when getPackage is not available in the JVM --- .../org/apache/webbeans/config/BeansDeployer.java | 55 ++ 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java b/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java index 99689fa..057db3d 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java @@ -145,30 +145,6 @@ public class BeansDeployer private static final Logger logger = WebBeansLoggerFacade.getLogger(BeansDeployer.class); public static final String JAVAX_ENTERPRISE_PACKAGE = "javax.enterprise."; -private static final Method GET_PACKAGE; -static -{ -Method getPackage; -try -{ -getPackage = ClassLoader.class.getDeclaredMethod("getDefinedPackage", String.class); -getPackage.setAccessible(true); -} -catch (NoSuchMethodException e) -{ -try -{ -getPackage = ClassLoader.class.getDeclaredMethod("getPackage", String.class); -getPackage.setAccessible(true); -} -catch (NoSuchMethodException ex) -{ -throw new IllegalStateException(ex); -} -} -GET_PACKAGE = getPackage; -} - /**Deployment is started or not*/ protected boolean deployed; @@ -1443,13 +1419,32 @@ public class BeansDeployer { return result; } -try // this is related to classloader and not to Package actually :( so we need reflection +while (true) { -pckge = Package.class.cast(GET_PACKAGE.invoke(classLoader, previousPackage)); -} -catch (Exception e) -{ -throw new IllegalStateException(e); +try // not always existing but enables to go further when getPackage is not available (graal) +{ +pckge = classLoader.loadClass(previousPackage + +(previousPackage.isEmpty() ? "" :".") + "package-info").getPackage(); +break; +} +catch (Exception e) +{ +if (previousPackage.isEmpty()) +{ +pckge = null; +break; +} +packageVetoCache.put(previousPackage, false); +idx = previousPackage.lastIndexOf('.'); +if (idx > 0) +{ +previousPackage = previousPackage.substring(0, idx); +} +else +{ +previousPackage = ""; +} +} } } else