You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2018/02/01 13:33:30 UTC

tomee git commit: wiring OWB async default pool

Repository: tomee
Updated Branches:
  refs/heads/fb_tomee8 c2f603d38 -> 3c2703a8e


wiring OWB async default pool


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/3c2703a8
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/3c2703a8
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/3c2703a8

Branch: refs/heads/fb_tomee8
Commit: 3c2703a8e85af07315279ce2a384e1ce2dc70060
Parents: c2f603d
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Thu Feb 1 14:33:22 2018 +0100
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Thu Feb 1 14:33:22 2018 +0100

----------------------------------------------------------------------
 .../openejb/assembler/classic/Assembler.java    |  3 ++
 .../openejb/cdi/ThreadSingletonServiceImpl.java | 39 ++++++++++++++++++++
 tck/cdi-embedded/src/test/resources/failing.xml |  2 +-
 3 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/3c2703a8/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
index 853e05c..e831240 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
@@ -121,6 +121,7 @@ import org.apache.openejb.resource.jdbc.DataSourceFactory;
 import org.apache.openejb.spi.ApplicationServer;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.spi.SecurityService;
+import org.apache.openejb.threads.impl.ManagedExecutorServiceImpl;
 import org.apache.openejb.util.Contexts;
 import org.apache.openejb.util.DaemonThreadFactory;
 import org.apache.openejb.util.Duration;
@@ -246,6 +247,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
@@ -1734,6 +1736,7 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
 
             final Map<Class<?>, Object> services = new HashMap<Class<?>, Object>();
 
+            services.put(Executor.class, new ManagedExecutorServiceImpl(ForkJoinPool.commonPool()));
             services.put(JNDIService.class, new OpenEJBJndiService());
             services.put(AppContext.class, appContext);
             services.put(ScannerService.class, new CdiScanner());

http://git-wip-us.apache.org/repos/asf/tomee/blob/3c2703a8/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
index afcfc5f..a911e40 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
@@ -22,7 +22,11 @@ import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.cdi.transactional.TransactionContext;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.threads.impl.ManagedExecutorServiceImpl;
+import org.apache.openejb.threads.impl.ManagedThreadFactoryImpl;
 import org.apache.openejb.util.AppFinder;
+import org.apache.openejb.util.DaemonThreadFactory;
+import org.apache.openejb.util.ExecutorBuilder;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.classloader.MultipleClassLoader;
@@ -53,6 +57,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * @version $Rev:$ $Date:$
@@ -123,6 +129,39 @@ public class ThreadSingletonServiceImpl implements ThreadSingletonService {
         // NOTE: ensure user can extend/override all the services = set it only if not present in properties, see WebBeansContext#getService()
         final Map<Class<?>, Object> services = new HashMap<>();
         services.put(AppContext.class, appContext);
+        if (!properties.containsKey(Executor.class.getName())) {
+            services.put(Executor.class, new Executor() {
+                // lazy to create threads only for apps requiring it
+                private final AtomicReference<Executor> delegate = new AtomicReference<>();
+
+                @Override
+                public void execute(final Runnable command) {
+                    Executor executor = delegate.get();
+                    if (executor == null) {
+                        synchronized (this) {
+                            final Executor alreadyUpdated = delegate.get();
+                            if (alreadyUpdated == null) {
+                                executor = new ManagedExecutorServiceImpl(
+                                        new ExecutorBuilder()
+                                                .size(3)
+                                                .threadFactory(new ManagedThreadFactoryImpl(appContext.getId() + "-cdi-fireasync-"))
+                                                .prefix("CDIAsyncPool")
+                                                .build(appContext.getOptions()));
+                                delegate.compareAndSet(null, executor);
+                            } else {
+                                executor = alreadyUpdated;
+                            }
+                        }
+                    }
+                    executor.execute(command);
+                }
+
+                @Override
+                public String toString() {
+                    return "CDIAsyncEventExecutor(app=" + appContext.getId() + ")";
+                }
+            });
+        }
         if (!properties.containsKey(ApplicationBoundaryService.class.getName())) {
             services.put(ApplicationBoundaryService.class, new DefaultApplicationBoundaryService());
         }

http://git-wip-us.apache.org/repos/asf/tomee/blob/3c2703a8/tck/cdi-embedded/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml
index 836410d..15aa7cc 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -39,7 +39,7 @@
     TODO these are tests we finally need to pass!
     -->
     <classes>
-      <class name="org.jboss.cdi.tck.tests.event.broken.observer.remoteBusinessMethod.EJBObserverMethodRemoteBusinessMethodTest" />
+      <class name="org.jboss.cdi.tck.tests.event.observer.context.async.enterprise.EnterpriseSecurityContextPropagationInAsyncObserverTest" />
     </classes>
   </test>
 </suite>