[jbossws-commits] JBossWS SVN: r16865 - shared-testsuite/trunk/src/main/java/org/jboss/wsf/test.
jbossws-commits at lists.jboss.org
jbossws-commits at lists.jboss.org
Fri Oct 12 09:19:40 EDT 2012
Author: richard.opalka at jboss.com
Date: 2012-10-12 09:19:39 -0400 (Fri, 12 Oct 2012)
New Revision: 16865
Modified:
shared-testsuite/trunk/src/main/java/org/jboss/wsf/test/AppclientHelper.java
Log:
[JBPAPP-10027] fix JVM shutdown freeze in testsuite on Windows OS
Modified: shared-testsuite/trunk/src/main/java/org/jboss/wsf/test/AppclientHelper.java
===================================================================
--- shared-testsuite/trunk/src/main/java/org/jboss/wsf/test/AppclientHelper.java 2012-10-12 11:16:22 UTC (rev 16864)
+++ shared-testsuite/trunk/src/main/java/org/jboss/wsf/test/AppclientHelper.java 2012-10-12 13:19:39 UTC (rev 16865)
@@ -34,6 +34,8 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
import org.jboss.ws.common.concurrent.CopyJob;
import org.jboss.ws.common.io.TeeOutputStream;
@@ -51,7 +53,7 @@
private static final String appclientScript = JBOSS_HOME + FS + "bin" + FS + "appclient" + EXT;
private static final Semaphore s = new Semaphore(1, true); //one appclient only can be running at the same time ATM
private static Map<String, AppclientProcess> appclients = new HashMap<String, AppclientProcess>(1);
- private static ExecutorService es = Executors.newCachedThreadPool();
+ private static ExecutorService executors = Executors.newCachedThreadPool(AppclientDaemonFactory.INSTANCE);
private static String appclientOutputDir;
private static class AppclientProcess {
@@ -139,8 +141,8 @@
// appclient err
ap.errTask = new CopyJob(ap.process.getErrorStream(), ap.log);
// unfortunately the following threads are needed because of Windows behavior
- es.submit(ap.outTask);
- es.submit(ap.errTask);
+ executors.submit(ap.outTask);
+ executors.submit(ap.errTask);
return ap;
} catch (Exception e) {
s.release();
@@ -231,4 +233,25 @@
final int sharpIndex = archive.indexOf('#');
return archive.substring(0, sharpIndex);
}
+
+ // [JBPAPP-10027] appclient threads are always daemons (to don't block JVM shutdown)
+ private static class AppclientDaemonFactory implements ThreadFactory {
+ static final AppclientDaemonFactory INSTANCE = new AppclientDaemonFactory();
+ final ThreadGroup group;
+ final AtomicInteger threadNumber = new AtomicInteger(1);
+ final String namePrefix;
+
+ AppclientDaemonFactory() {
+ group = Thread.currentThread().getThreadGroup();
+ namePrefix = "appclient-output-processing-daemon-";
+ }
+
+ public Thread newThread(final Runnable r) {
+ final Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement());
+ t.setDaemon(true);
+ t.setPriority(Thread.NORM_PRIORITY);
+ return t;
+ }
+ }
+
}
More information about the jbossws-commits
mailing list