[openwebbeans] branch master updated: [OWB-1359] ensure default loader service is more easily extensible

2020-12-16 Thread rmannibucau
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

2020-12-16 Thread rmannibucau
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

2020-12-16 Thread rmannibucau
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

2020-12-16 Thread rmannibucau
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

2020-12-16 Thread buildbot
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)