Title: [2499] trunk/openejb1/modules/core: Merged in thread polling code from 2

Diff

Modified: trunk/openejb1/modules/core/project.xml (2498 => 2499)

--- trunk/openejb1/modules/core/project.xml	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/project.xml	2006-02-24 21:33:16 UTC (rev 2499)
@@ -60,6 +60,14 @@
                 <runtime>true</runtime>
             </properties>
         </dependency>
+	<dependency>
+	  <groupId>backport-util-concurrent</groupId>
+	  <artifactId>backport-util-concurrent</artifactId>
+	  <version>2.0_01_pd</version>
+	  <properties>
+	    <runtime>true</runtime>
+	  </properties>
+	</dependency>
         <dependency>
             <groupId>xerces</groupId>
             <artifactId>xercesImpl</artifactId>

Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/admin (2498 => 2499)

--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/admin	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/admin	2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,6 @@
     bind        = 127.0.0.1
     port        = 4200
     disabled    = false
+    threads     = 1
+    
 

Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/ejbd (2498 => 2499)

--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/ejbd	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/ejbd	2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,5 @@
     bind        = 127.0.0.1
     port        = 4201
     disabled    = false
+    threads     = 200
 

Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/httpejbd (2498 => 2499)

--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/httpejbd	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/httpejbd	2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,4 @@
     bind        = 127.0.0.1
     port        = 4204
     disabled    = false
-
+    threads     = 200

Modified: trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/telnet (2498 => 2499)

--- trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/telnet	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/META-INF/org.openejb.server.ServerService/telnet	2006-02-24 21:33:16 UTC (rev 2499)
@@ -2,4 +2,6 @@
     bind        = 127.0.0.1
     port        = 4202
     disabled    = false
+    threads     = 5
+#   
 

Modified: trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceAccessController.java (2498 => 2499)

--- trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceAccessController.java	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceAccessController.java	2006-02-24 21:33:16 UTC (rev 2499)
@@ -167,7 +167,7 @@
 
             String ipString = props.getProperty("only_from");
             if (ipString != null) {
-                StringTokenizer st = new StringTokenizer(ipString, ",");
+                StringTokenizer st = new StringTokenizer(ipString, " ,");
                 while (st.hasMoreTokens()) {
                     String address = null;
                     InetAddress ip = null;

Modified: trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceManager.java (2498 => 2499)

--- trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceManager.java	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/java/org/openejb/server/ServiceManager.java	2006-02-24 21:33:16 UTC (rev 2499)
@@ -162,6 +162,19 @@
                 properties.put(interfase, impl);
                 String rawProperties = resourceFinder.findString(interfase.getName() + "/" + name);
                 properties.put(Properties.class, rawProperties);
+
+                // Override with system properties
+                String prefix = name + ".";
+                Properties sysProps = System.getProperties();
+                for (Iterator iterator1 = sysProps.entrySet().iterator(); iterator1.hasNext();) {
+                    Map.Entry entry1 = (Map.Entry) iterator1.next();
+                    String key = (String) entry1.getKey();
+                    String value = (String) entry1.getValue();
+                    if (key.startsWith(prefix)){
+                        key = key.replaceFirst(prefix, "");
+                        properties.setProperty(key, value);
+                    }
+                }
             }
             return services;
         }

Modified: trunk/openejb1/modules/core/src/java/org/openejb/server/ServicePool.java (2498 => 2499)

--- trunk/openejb1/modules/core/src/java/org/openejb/server/ServicePool.java	2006-02-24 00:27:41 UTC (rev 2498)
+++ trunk/openejb1/modules/core/src/java/org/openejb/server/ServicePool.java	2006-02-24 21:33:16 UTC (rev 2499)
@@ -48,6 +48,12 @@
 import java.net.*;
 import java.util.*;
 import org.openejb.*;
+import org.openejb.util.Logger;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+import edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue;
+import edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor;
+import edu.emory.mathcs.backport.java.util.concurrent.ThreadFactory;
+import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
 
 /**
  *  The Server will call the following methods.
@@ -63,9 +69,12 @@
  * @author <a href="" PROTECTED]">David Blevins</a>
  */
 public class ServicePool implements ServerService {
-    
-    ServerService next;
 
+    private Logger log = Logger.getInstance(ServicePool.class.getName(), ServicePool.class.getName());
+    private ServerService next;
+    private Executor executor;
+
+
     public ServicePool(ServerService next){
         this.next = next;
     }
@@ -78,8 +87,28 @@
      * @exception ServiceException
      */
     public void init(Properties props) throws Exception{
+
         // Do our stuff
-        
+        String threadsString = props.getProperty("threads", "200");
+        int threads = Integer.parseInt(threadsString);
+        final String name = props.getProperty("name", "unknown");
+
+        ThreadPoolExecutor p = new ThreadPoolExecutor(threads, threads, 5000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());
+        p.setThreadFactory(new ThreadFactory() {
+            private volatile int id = 0;
+
+            public Thread newThread(Runnable arg0) {
+                Thread thread = new Thread(arg0, name + " " + getNextID());
+                return thread;
+            }
+
+            private int getNextID() {
+                return id++;
+            }
+
+        });
+        executor = p;
+
         // Then call the next guy
         next.init(props);
     }
@@ -98,12 +127,41 @@
         next.stop();
     }
 
-    public void service(Socket socket) throws ServiceException, IOException{
-        // Do our stuff
-        // Check authorization
+    public void service(final Socket socket) throws ServiceException, IOException{
+        final Runnable service = new Runnable() {
+            public void run() {
+                try {
+                    next.service(socket);
+                } catch (SecurityException e) {
+                    log.error("Security error: " + e.getMessage(), e);
+                } catch (Throwable e) {
+                    log.error("Unexpected error", e);
+                } finally {
+                    try {
+                        if (socket != null) {
+                            socket.close();
+                        }
+                    } catch (Throwable t) {
+                        log.warning("Error while closing connection with client", t);
+                    }
+                }
+            }
+        };
 
-        // Then call the next guy
-        next.service(socket);
+        final ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+        Runnable ctxCL = new Runnable() {
+            public void run() {
+                ClassLoader cl = Thread.currentThread().getContextClassLoader();
+                Thread.currentThread().setContextClassLoader(tccl);
+                try {
+                    service.run();
+                } finally {
+                    Thread.currentThread().setContextClassLoader(cl);
+                }
+            }
+        };
+
+        executor.execute(ctxCL);
     }
 
     public void service(InputStream in, OutputStream out) throws ServiceException, IOException {

Reply via email to