[openwebbeans] branch master updated: [OWB-1359] ensure default loader service is more easily extensible
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 f4e1305 [OWB-1359] ensure default loader service is more easily extensible f4e1305 is described below commit f4e13057ea9c8d6f076535ada10beaf406a2fd2d Author: Romain Manni-Bucau AuthorDate: Wed Dec 16 15:02:50 2020 +0100 [OWB-1359] ensure default loader service is more easily extensible --- .../webbeans/service/DefaultLoaderService.java | 64 +++--- .../service/ManualImplementationLoaderService.java | 228 - 2 files changed, 24 insertions(+), 268 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/service/DefaultLoaderService.java b/webbeans-impl/src/main/java/org/apache/webbeans/service/DefaultLoaderService.java index 353d47b..4a7c882 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/service/DefaultLoaderService.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/service/DefaultLoaderService.java @@ -23,22 +23,20 @@ import org.apache.webbeans.logger.WebBeansLoggerFacade; import org.apache.webbeans.spi.LoaderService; import org.apache.webbeans.util.WebBeansUtil; -import java.util.ArrayList; +import javax.enterprise.inject.spi.Extension; import java.util.List; import java.util.ServiceLoader; import java.util.logging.Level; -import java.util.logging.Logger; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import static java.util.stream.Collectors.toList; /** - * Default implementation which delegates to the s{@link ServiceLoader} of Java 1.6 and - * uses a fallback for Java 1.5 + * Default implementation which delegates to the s{@link ServiceLoader}. */ public class DefaultLoaderService implements LoaderService { -private static final Logger logger = WebBeansLoggerFacade.getLogger(DefaultLoaderService.class); - -private static final boolean JAVA_6_AVAILABLE = isJava6(); - @Override public List load(Class serviceType) { @@ -48,44 +46,30 @@ public class DefaultLoaderService implements LoaderService @Override public List load(Class serviceType, ClassLoader classLoader) { -if(JAVA_6_AVAILABLE) +try { -List result = new ArrayList<>(); -try +Stream stream = StreamSupport.stream(ServiceLoader.load(serviceType, classLoader).spliterator(), false); +if (Extension.class == serviceType) { -ServiceLoader services; -services = ServiceLoader.load(serviceType, classLoader); - -for (T service : services) -{ -result.add(service); -} +return mapExtensions(stream).collect(toList()); } -catch (Error error) -{ -// WTF! ServiceLoader is cool, but THAT is utter crap: it throws some Errors! -logger.log(Level.SEVERE, "Problem while loading CDI Extensions", error); -throw new WebBeansConfigurationException("Problem while loading CDI Extensions", error); -} - - -return result; +// OWBPlugin +return stream.collect(toList()); +} +catch (Error error) +{ +// WTF! ServiceLoader is cool, but THAT is utter crap: it throws some Errors! +WebBeansLoggerFacade.getLogger(DefaultLoaderService.class) +.log(Level.SEVERE, "Problem while loading CDI Extensions", error); +throw new WebBeansConfigurationException("Problem while loading CDI Extensions", error); } - -return new ManualImplementationLoaderService<>(serviceType, classLoader).loadServiceImplementations(); } -private static boolean isJava6() +// enables to easily extend the loader to customize extensions: +// 1. filter some undesired extensions programmatically +// 2. remap some extensions (to drop some events or wrap them for ex) +protected Stream mapExtensions(final Stream stream) { -try -{ -ServiceLoader.class.getName(); -return true; -} -catch (NoClassDefFoundError error) -{ -logger.info("Using Java 5 compatibility mode, because didn't find ServiceLoader: " + error); -return false; -} +return stream; } } diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/service/ManualImplementationLoaderService.java b/webbeans-impl/src/main/java/org/apache/webbeans/service/ManualImplementationLoaderService.java deleted file mode 100644 index 9335c21..000 --- a/webbeans-impl/src/main/java/org/apache/webbeans/service/ManualImplementationLoaderService.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - *
[openwebbeans] branch master updated: [OWB-1358] ensure CDI SE services can be overriden
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 363bb5d [OWB-1358] ensure CDI SE services can be overriden 363bb5d is described below commit 363bb5d62e0b528d3dbf9b0c87c9d28f37220ae0 Author: Romain Manni-Bucau AuthorDate: Wed Dec 16 14:39:13 2020 +0100 [OWB-1358] ensure CDI SE services can be overriden --- .../org/apache/openwebbeans/se/OWBInitializer.java | 18 +- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/webbeans-se/src/main/java/org/apache/openwebbeans/se/OWBInitializer.java b/webbeans-se/src/main/java/org/apache/openwebbeans/se/OWBInitializer.java index 7563658..a4a47b5 100644 --- a/webbeans-se/src/main/java/org/apache/openwebbeans/se/OWBInitializer.java +++ b/webbeans-se/src/main/java/org/apache/openwebbeans/se/OWBInitializer.java @@ -70,9 +70,18 @@ public class OWBInitializer extends SeContainerInitializer thread.setContextClassLoader(loader); try { -services.putIfAbsent(ScannerService.class.getName(), getScannerService()); -services.putIfAbsent(LoaderService.class.getName(), new CDISeLoaderService(extensions, loader)); -services.putIfAbsent(BeanArchiveService.class.getName(), new CDISeBeanArchiveService(bai)); +if (!properties.containsKey(ScannerService.class.getName())) +{ +services.putIfAbsent(ScannerService.class.getName(), getScannerService()); +} +if (!properties.containsKey(LoaderService.class.getName())) +{ +services.putIfAbsent(LoaderService.class.getName(), new CDISeLoaderService(extensions, loader)); +} +if (!properties.containsKey(BeanArchiveService.class.getName())) +{ +services.putIfAbsent(BeanArchiveService.class.getName(), new CDISeBeanArchiveService(bai)); +} addCustomServices(services); Map, Object> preparedServices = services.entrySet().stream() .collect(toMap(e -> @@ -233,8 +242,7 @@ public class OWBInitializer extends SeContainerInitializer selectAlternativeStereotypes(list(value, this::loadClass).toArray(Class[]::new)); break; case "openwebbeans.extensions": -addExtensions((Class[]) list(value, this::loadClass) -.toArray(Class[]::new)); +addExtensions(list(value, this::loadClass).toArray(Class[]::new)); break; case "openwebbeans.packages": addPackages(list(value, this::loadPackage).toArray(Package[]::new));
[openwebbeans] branch master updated: [OWB-1357] skip extension events resolution when there is no observer for them
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 cd25746 [OWB-1357] skip extension events resolution when there is no observer for them cd25746 is described below commit cd2574623f7dbfd00c0eb0439bc1042b29b9f52d Author: Romain Manni-Bucau AuthorDate: Wed Dec 16 14:33:14 2020 +0100 [OWB-1357] skip extension events resolution when there is no observer for them --- .../org/apache/webbeans/config/BeansDeployer.java | 5 +- .../apache/webbeans/event/NotificationManager.java | 284 - .../test/portable/events/PortableEventTest.java| 1 - 3 files changed, 285 insertions(+), 5 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 20489b1..a7b2337 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 @@ -309,7 +309,10 @@ public class BeansDeployer // activate InjectionResolver cache now webBeansContext.getBeanManagerImpl().getInjectionResolver().setStartup(false); - + +// drop no more needed memory data +webBeansContext.getNotificationManager().afterStart(); + validateAlternatives(beanAttributesPerBda); validateInjectionPoints(); diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java b/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java index 7c7ae7c..dede48e 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/event/NotificationManager.java @@ -33,6 +33,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; @@ -45,6 +46,7 @@ import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Stream; import javax.enterprise.context.RequestScoped; import javax.enterprise.event.NotificationOptions; @@ -61,7 +63,17 @@ import javax.enterprise.inject.spi.EventContext; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ObserverMethod; import javax.enterprise.inject.spi.ProcessAnnotatedType; +import javax.enterprise.inject.spi.ProcessBean; +import javax.enterprise.inject.spi.ProcessBeanAttributes; +import javax.enterprise.inject.spi.ProcessInjectionPoint; +import javax.enterprise.inject.spi.ProcessInjectionTarget; +import javax.enterprise.inject.spi.ProcessManagedBean; +import javax.enterprise.inject.spi.ProcessObserverMethod; import javax.enterprise.inject.spi.ProcessProducer; +import javax.enterprise.inject.spi.ProcessProducerField; +import javax.enterprise.inject.spi.ProcessProducerMethod; +import javax.enterprise.inject.spi.ProcessSyntheticBean; +import javax.enterprise.inject.spi.ProcessSyntheticObserverMethod; import org.apache.webbeans.component.AbstractOwbBean; import org.apache.webbeans.config.OWBLogConst; @@ -82,6 +94,9 @@ import org.apache.webbeans.util.ClassUtil; import org.apache.webbeans.util.GenericsUtil; import org.apache.webbeans.util.WebBeansUtil; +import static java.util.Collections.emptyList; +import static java.util.stream.Collectors.toMap; + public final class NotificationManager { private final Map>> observers = new ConcurrentHashMap<>(); @@ -112,12 +127,40 @@ public final class NotificationManager } }; +// idea is to be able to skip O(n) events in favor of an algorithm closer to O(1) impl +// statistically, it is not rare to not use all these events so we enable to skip most of them +private Map>> processAnnotatedTypeObservers; +private Map>> processBeanAttributesObservers; +private Map>> processInjectionTargetObservers; +private Map>> processManagedBeanObservers; +private Map>> processBeanObservers; +private Map>> processInjectionPointObservers; +private Map>> processObserverMethodObservers; +private Map>> processProducerObservers; +private Map>> processProducerFieldObservers; +private Map>> processProducerMethodObservers; +private Map>> processSyntheticBeanObservers; +private Map>> processSyntheticObserverMethodObservers; + public NotificationManager(WebBeansContext webBeansContext) { this.webBeansContext =
[openwebbeans] branch master updated: [OWB-1356] lazy lookup loggers when it is only about errors and not main code path
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 02e1a57 [OWB-1356] lazy lookup loggers when it is only about errors and not main code path 02e1a57 is described below commit 02e1a57bdedc7bc7f3c6b51cc321578ee54ccf98 Author: Romain Manni-Bucau AuthorDate: Wed Dec 16 11:41:25 2020 +0100 [OWB-1356] lazy lookup loggers when it is only about errors and not main code path --- .../webbeans/ee/event/TransactionalEventNotifier.java | 6 ++ .../webbeans/config/DeploymentValidationService.java | 13 ++--- .../apache/webbeans/config/OpenWebBeansConfiguration.java | 10 ++ .../java/org/apache/webbeans/config/WebBeansContext.java | 8 +++- .../org/apache/webbeans/portable/AbstractAnnotated.java | 8 +++- .../apache/webbeans/portable/AnnotatedElementFactory.java | 5 ++--- .../apache/webbeans/portable/events/ExtensionLoader.java | 15 +++ 7 files changed, 25 insertions(+), 40 deletions(-) diff --git a/webbeans-ee/src/main/java/org/apache/webbeans/ee/event/TransactionalEventNotifier.java b/webbeans-ee/src/main/java/org/apache/webbeans/ee/event/TransactionalEventNotifier.java index 0c339f9..487dd80 100644 --- a/webbeans-ee/src/main/java/org/apache/webbeans/ee/event/TransactionalEventNotifier.java +++ b/webbeans-ee/src/main/java/org/apache/webbeans/ee/event/TransactionalEventNotifier.java @@ -34,13 +34,10 @@ import org.apache.webbeans.logger.WebBeansLoggerFacade; import org.apache.webbeans.spi.TransactionService; import java.util.logging.Level; -import java.util.logging.Logger; @SuppressWarnings("unchecked") public final class TransactionalEventNotifier { -private static final Logger logger = WebBeansLoggerFacade.getLogger(TransactionalEventNotifier.class); - private TransactionalEventNotifier() { // utility class ct @@ -162,7 +159,8 @@ public final class TransactionalEventNotifier } catch (Exception e) { -logger.log(Level.SEVERE, OWBLogConst.ERROR_0003, e); + WebBeansLoggerFacade.getLogger(TransactionalEventNotifier.class) +.log(Level.SEVERE, OWBLogConst.ERROR_0003, e); } } } diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java b/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java index 7e118f3..3dc5442 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/config/DeploymentValidationService.java @@ -24,7 +24,6 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Set; -import java.util.logging.Logger; import javax.enterprise.inject.Disposes; import javax.enterprise.inject.TransientReference; @@ -48,9 +47,6 @@ import org.apache.webbeans.util.SecurityUtil; public class DeploymentValidationService { -/**Logger instance*/ -private static final Logger logger = WebBeansLoggerFacade.getLogger(DeploymentValidationService.class); - private WebBeansContext webBeansContext; /** @@ -110,9 +106,12 @@ public class DeploymentValidationService { if (allowProxyingClasses.contains(beanClass.getName())) { -logger.info(beanClass.getName() + " has final method " + finalMethodName + ". CDI doesn't allow to proxy that." + -" Continuing because the class is explicitly configured to be treated as proxyable." + -" Final methods shall not get invoked on this proxy!"); + WebBeansLoggerFacade.getLogger(DeploymentValidationService.class) +.info(beanClass.getName() + " has final method " + +finalMethodName + ". CDI doesn't allow to proxy that." + +" Continuing because the class is explicitly configured " + +"to be treated as proxyable." + +" Final methods shall not get invoked on this proxy!"); } else { diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/config/OpenWebBeansConfiguration.java b/webbeans-impl/src/main/java/org/apache/webbeans/config/OpenWebBeansConfiguration.java index 7eab234..0d2b480 100644 ---
svn commit: r1069123 - in /websites: production/openwebbeans/content/index.html staging/openwebbeans/trunk/content/index.html
Author: buildbot Date: Wed Dec 16 10:35:07 2020 New Revision: 1069123 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)