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 <rmannibu...@gmail.com> Authored: Thu Feb 1 14:33:22 2018 +0100 Committer: Romain Manni-Bucau <rmannibu...@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>