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