src/share/jaxws_classes/com/sun/xml/internal/ws/api/pipe/Engine.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -29,10 +29,12 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import com.sun.xml.internal.ws.api.message.Packet;
+import com.sun.xml.internal.ws.api.server.Container;
+import com.sun.xml.internal.ws.api.server.ContainerResolver;
 
 /**
  * Collection of {@link Fiber}s.
  * Owns an {@link Executor} to run them.
  *

@@ -40,33 +42,51 @@
  * @author Jitendra Kotamraju
  */
 public class Engine {
     private volatile Executor threadPool;
     public final String id;
+    private final Container container;
+
+    String getId() { return id; }
+    Container getContainer() { return container; }
+    Executor getExecutor() { return threadPool; }
 
     public Engine(String id, Executor threadPool) {
-        this(id);
-        this.threadPool = threadPool;
+        this(id, ContainerResolver.getDefault().getContainer(), threadPool);
+    }
+
+    public Engine(String id, Container container, Executor threadPool) {
+        this(id, container);
+        this.threadPool = threadPool != null ? wrap(threadPool) : null;
     }
 
     public Engine(String id) {
+        this(id, ContainerResolver.getDefault().getContainer());
+    }
+
+    public Engine(String id, Container container) {
         this.id = id;
+        this.container = container;
     }
 
     public void setExecutor(Executor threadPool) {
-        this.threadPool = threadPool;
+        this.threadPool = threadPool != null ? wrap(threadPool) : null;
     }
 
     void addRunnable(Fiber fiber) {
         if(threadPool==null) {
             synchronized(this) {
-                threadPool = Executors.newCachedThreadPool(new DaemonThreadFactory());
+                threadPool = wrap(Executors.newCachedThreadPool(new DaemonThreadFactory()));
             }
         }
         threadPool.execute(fiber);
     }
 
+    private Executor wrap(Executor ex) {
+        return ContainerResolver.getDefault().wrapExecutor(container, ex);
+    }
+
     /**
      * Creates a new fiber in a suspended state.
      *
      * <p>
      * To start the returned fiber, call {@link Fiber#start(Tube,Packet,Fiber.CompletionCallback)}.

@@ -78,30 +98,24 @@
         return new Fiber(this);
     }
 
     private static class DaemonThreadFactory implements ThreadFactory {
         static final AtomicInteger poolNumber = new AtomicInteger(1);
-        final ThreadGroup group;
         final AtomicInteger threadNumber = new AtomicInteger(1);
         final String namePrefix;
 
         DaemonThreadFactory() {
-            SecurityManager s = System.getSecurityManager();
-            group = (s != null)? s.getThreadGroup() :
-                                 Thread.currentThread().getThreadGroup();
-            namePrefix = "jaxws-engine-" +
-                          poolNumber.getAndIncrement() +
-                         "-thread-";
+            namePrefix = "jaxws-engine-" + poolNumber.getAndIncrement() + "-thread-";
         }
 
         public Thread newThread(Runnable r) {
-            Thread t = new Thread(group, r,
-                                  namePrefix + threadNumber.getAndIncrement(),
-                                  0);
-            if (!t.isDaemon())
+            Thread t = new Thread(null, r, namePrefix + threadNumber.getAndIncrement(), 0);
+            if (!t.isDaemon()) {
                 t.setDaemon(true);
-            if (t.getPriority() != Thread.NORM_PRIORITY)
+            }
+            if (t.getPriority() != Thread.NORM_PRIORITY) {
                 t.setPriority(Thread.NORM_PRIORITY);
+            }
             return t;
         }
     }
 }