You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2011/07/24 04:50:29 UTC

svn commit: r1150259 - in /openejb/trunk/openejb3: container/openejb-core/src/main/java/org/apache/openejb/ container/openejb-core/src/main/java/org/apache/openejb/core/timer/ container/openejb-core/src/main/java/org/apache/openejb/util/ server/openejb...

Author: dblevins
Date: Sun Jul 24 02:50:28 2011
New Revision: 1150259

URL: http://svn.apache.org/viewvc?rev=1150259&view=rev
Log:
OPENEJB-1635: ThreadPoolExecutors preventing shutdown

Added:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/DaemonThreadFactory.java
Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/DefaultTimerThreadPoolAdapter.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java?rev=1150259&r1=1150258&r2=1150259&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java Sun Jul 24 02:50:28 2011
@@ -18,6 +18,7 @@ package org.apache.openejb;
 
 import org.apache.openejb.core.WebContext;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.DaemonThreadFactory;
 import org.apache.webbeans.config.WebBeansContext;
 
 import javax.enterprise.inject.spi.BeanManager;
@@ -59,7 +60,7 @@ public class AppContext extends Deployme
         this.appJndiContext = appJndiContext;
         this.standaloneModule = standaloneModule;
         this.blockingQueue = new LinkedBlockingQueue<Runnable>();
-        this.asynchPool = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, blockingQueue);
+        this.asynchPool = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, blockingQueue, new DaemonThreadFactory("@Asynch", id));
     }
 
     public BeanManager getBeanManager() {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/DefaultTimerThreadPoolAdapter.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/DefaultTimerThreadPoolAdapter.java?rev=1150259&r1=1150258&r2=1150259&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/DefaultTimerThreadPoolAdapter.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/DefaultTimerThreadPoolAdapter.java Sun Jul 24 02:50:28 2011
@@ -23,6 +23,7 @@ import java.util.concurrent.RejectedExec
 import java.util.concurrent.ThreadPoolExecutor;
 
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.DaemonThreadFactory;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.quartz.SchedulerConfigException;
@@ -48,7 +49,7 @@ public class DefaultTimerThreadPoolAdapt
     public DefaultTimerThreadPoolAdapter() {
         executor = SystemInstance.get().getComponent(Executor.class);
         if (executor == null) {
-            executor = Executors.newFixedThreadPool(10);
+            executor = Executors.newFixedThreadPool(10, new DaemonThreadFactory(DefaultTimerThreadPoolAdapter.class));
             SystemInstance.get().setComponent(Executor.class, executor);
         }
         threadPoolExecutorUsed = executor instanceof ThreadPoolExecutor;

Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/DaemonThreadFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/DaemonThreadFactory.java?rev=1150259&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/DaemonThreadFactory.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/DaemonThreadFactory.java Sun Jul 24 02:50:28 2011
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.util;
+
+import java.util.concurrent.ThreadFactory;
+
+import static org.apache.openejb.util.Join.join;
+
+/**
+* @version $Rev$ $Date$
+*/
+public class DaemonThreadFactory implements ThreadFactory {
+
+    private final String name;
+    private transient int ids;
+
+    public DaemonThreadFactory(Object... name) {
+        this.name = join(" ", name);
+    }
+
+    public DaemonThreadFactory(Class... clazz) {
+        this(asStrings(clazz));
+    }
+
+    private static Object[] asStrings(Class[] clazz) {
+        final String[] strings = new String[clazz.length];
+        int i = 0;
+        for (Class c : clazz) {
+            strings[i++] = c.getSimpleName();
+        }
+        return strings;
+    }
+
+    public Thread newThread(Runnable runnable) {
+        Thread t = new Thread(runnable, name + " thread " + (ids++));
+        t.setDaemon(true);
+        return t;
+    }
+}

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java?rev=1150259&r1=1150258&r2=1150259&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java Sun Jul 24 02:50:28 2011
@@ -132,7 +132,7 @@ public class Pool<T> {
     private Executor createExecutor() {
         return new ThreadPoolExecutor(5, 10,
                                       0L, TimeUnit.SECONDS,
-                                      new LinkedBlockingQueue<Runnable>());
+                                      new LinkedBlockingQueue<Runnable>(), new DaemonThreadFactory("o.a.openejb.util.Pool", hashCode()));
     }
 
     private void greater(String maxName, long max, String minName, long min) {

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java?rev=1150259&r1=1150258&r2=1150259&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java Sun Jul 24 02:50:28 2011
@@ -29,6 +29,7 @@ import java.util.concurrent.ExecutorServ
 import java.util.concurrent.Future;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -53,7 +54,14 @@ public abstract class EJBObjectHandler e
 
     //TODO figure out how to configure and manage the thread pool on the client side
     protected static final BlockingQueue<Runnable> blockingQueue = new LinkedBlockingQueue<Runnable>();
-    protected static final ExecutorService executorService = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, blockingQueue);
+    protected static final ExecutorService executorService = new ThreadPoolExecutor(10, 20, 60, TimeUnit.SECONDS, blockingQueue, new ThreadFactory() {
+        @Override
+        public Thread newThread(Runnable runnable) {
+            final Thread thread = new Thread(runnable, "EJB Client");
+            thread.setDaemon(true);
+            return thread;
+        }
+    });
     /*
     * The registryId is a logical identifier that is used as a key when placing EntityEJBObjectHandler into
     * the BaseEjbProxyHanlder's liveHandleRegistry.  EntityEJBObjectHandlers that represent the same