List Info

Thread: svn commit: r433098 - in /webservices/xmlrpc/trunk: common/src/main/java/org/apache/xmlrpc/util/ ser




svn commit: r433098 - in /webservices/xmlrpc/trunk: common/src/main/java/org/apache/xmlrpc/u til/ ser
user name
2006-08-21 00:21:57
Author: jochen
Date: Sun Aug 20 17:21:56 2006
New Revision: 433098

URL: 
http://svn.apache.org/viewvc?rev=433098&view=rev
Log:
The releaseWorker() method wasn't called for the server.
Fixed another bug in the web servers thread pool, which
caused that
threads haven't been reused.

Added:
   
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlr
pc/test/ScalabilityTest.java
Modified:
   
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xml
rpc/util/ThreadPool.java
   
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/server/XmlRpcServer.java
   
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/webserver/WebServer.java
    webservices/xmlrpc/trunk/src/changes/changes.xml

Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xml
rpc/util/ThreadPool.java
URL: http:/
/svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/m
ain/java/org/apache/xmlrpc/util/ThreadPool.java?rev=433098&a
mp;r1=433097&r2=433098&view=diff
============================================================
==================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xml
rpc/util/ThreadPool.java (original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xml
rpc/util/ThreadPool.java Sun Aug 20 17:21:56 2006
 -115,7
+115,7 
 	}
 
 	synchronized void repool(MyThread pThread) {
-		if (maxSize != 0  &&  (runningThreads.size() +
waitingThreads.size()) <= maxSize) {
+		if (maxSize != 0  &&  (runningThreads.size() +
waitingThreads.size()) > maxSize) {
 			discard(pThread);
 		} else if (waitingTasks.size() > 0) {
 			pThread.setTask((Task) waitingTasks.remove(0));
 -135,7
+135,7 
 	 * might consider to use the {link #addTask(Task)} method
instead.
 	 */
 	public synchronized boolean startTask(Task pTask) {
-		if (maxSize != 0  &&  (runningThreads.size() +
waitingThreads.size()) >= maxSize) {
+		if (maxSize != 0  &&  runningThreads.size() >
maxSize) {
 			return false;
 		}
 		MyThread t;
 -180,4
+180,9 
 	 * return Maximum number of threads.
 	 */
 	public int getMaxThreads() { return maxSize; }
+
+	/** Returns the number of threads, which have actually
been created,
+     * as opposed to the number of currently running
threads.
+	 */
+    public int getNumThreads() { return num; }
 }

Modified:
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/server/XmlRpcServer.java
URL: ht
tp://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/s
rc/main/java/org/apache/xmlrpc/server/XmlRpcServer.java?rev=
433098&r1=433097&r2=433098&view=diff
============================================================
==================
---
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/server/XmlRpcServer.java (original)
+++
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/server/XmlRpcServer.java Sun Aug 20 17:21:56 2006
 -22,6
+22,7 
 import org.apache.xmlrpc.common.TypeConverterFactoryImpl;
 import org.apache.xmlrpc.common.XmlRpcController;
 import org.apache.xmlrpc.common.XmlRpcRequestProcessor;
+import org.apache.xmlrpc.common.XmlRpcWorker;
 import org.apache.xmlrpc.common.XmlRpcWorkerFactory;
 
 
 -76,6
+77,12 
 	 * throws XmlRpcException The request failed.
 	 */
 	public Object execute(XmlRpcRequest pRequest) throws
XmlRpcException {
-		return getWorkerFactory().getWorker().execute(pRequest);
+	    final XmlRpcWorkerFactory factory =
getWorkerFactory();
+	    final XmlRpcWorker worker = factory.getWorker();
+        try {
+            return worker.execute(pRequest);
+        } finally {
+            factory.releaseWorker(worker);
+        }
 	}
 }

Modified:
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/webserver/WebServer.java
URL: ht
tp://svn.apache.org/viewvc/webservices/xmlrpc/trunk/server/s
rc/main/java/org/apache/xmlrpc/webserver/WebServer.java?rev=
433098&r1=433097&r2=433098&view=diff
============================================================
==================
---
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/webserver/WebServer.java (original)
+++
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xml
rpc/webserver/WebServer.java Sun Aug 20 17:21:56 2006
 -307,7
+307,7 
 	 * see #shutdown()
 	 */
 	public void run() {
-		pool = new ThreadPool(server.getMaxThreads(),
"XML-RPC");
+		pool = newThreadPool();
 		try {
 			while (listener != null) {
 				try {
 -351,6
+351,10 
 			pool.shutdown();
 		}
 	}
+
+    protected ThreadPool newThreadPool() {
+        return new ThreadPool(server.getMaxThreads(),
"XML-RPC");
+    }
 	
 	/**
 	 * Stop listening on the server port.  Shutting down our
{link

Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/webservices/x
mlrpc/trunk/src/changes/changes.xml?rev=433098&r1=433097
&r2=433098&view=diff
============================================================
==================
--- webservices/xmlrpc/trunk/src/changes/changes.xml
(original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Sun Aug
20 17:21:56 2006
 -36,6
+36,14 
         Basic authentication didn't work with the commons
http transport,
         if user name or password contained non-ASCII
characters.
       </action>
+      <action dev="jochen"
type="fix" due-to="Randall Bryant"
+          due-to-email="randallmagpieti.com">
+        The releaseWorker() method wasn't called for the
server.
+      </action>
+      <action dev="jochen"
type="fix">
+        Fixed a bug in the web servers thread pool, which
caused that
+        threads haven't been reused.
+      </action>
     </release>
     <release version="3.0rc1"
date="27-Jul-2006">
       <action dev="jochen"
type="fix" due-to="Alan Burlison"

Added:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlr
pc/test/ScalabilityTest.java
URL: http://svn.apache.org/viewvc/w
ebservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrp
c/test/ScalabilityTest.java?rev=433098&view=auto
============================================================
==================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlr
pc/test/ScalabilityTest.java (added)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlr
pc/test/ScalabilityTest.java Sun Aug 20 17:21:56 2006
 -0,0
+1,143 
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ * 
+ * Licensed 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.xmlrpc.test;
+
+import java.net.URL;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+import org.apache.xmlrpc.server.PropertyHandlerMapping;
+import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+import org.apache.xmlrpc.util.ThreadPool;
+import org.apache.xmlrpc.webserver.ServletWebServer;
+import org.apache.xmlrpc.webserver.XmlRpcServlet;
+
+import junit.framework.TestCase;
+
+
+/**
+ * Tests the frameworks scalability.
+ */
+public class ScalabilityTest extends TestCase {
+    /**
+     * Primitive handler class
+     */
+    public static class Adder {
+        /**
+         * Returns the sum of the numbers p1 and p2.
+         */
+        public int add(int p1, int p2) {
+            return p1 + p2;
+        }
+    }
+
+    private class MyServletWebServer extends
ServletWebServer {
+        protected ThreadPool pool;
+        MyServletWebServer(HttpServlet pServlet, int pPort)
+                throws ServletException {
+            super(pServlet, pPort);
+        }
+        public ThreadPool newThreadPool(){
+            pool = new ThreadPool(server.getMaxThreads(),
"XML-RPC"){
+                
+            };
+            return pool;
+        }
+        int getNumThreads() {
+            return pool.getNumThreads();
+        }
+    }
+
+    private static final int BASE = 1;
+    private static final Integer THREE = new Integer(3);
+    private static final Integer FIVE = new Integer(5);
+    private static final Integer EIGHT = new Integer(8);
+    private XmlRpcServlet servlet;
+    private MyServletWebServer server;
+
+    protected void setUp() throws Exception {
+        servlet = new XmlRpcServlet(){
+            private static final long serialVersionUID =
-2040521497373327817L;
+            protected XmlRpcHandlerMapping
newXmlRpcHandlerMapping()
+                    throws XmlRpcException {
+                PropertyHandlerMapping mapping = new
PropertyHandlerMapping();
+                mapping.addHandler("Adder",
Adder.class);
+                return mapping;
+            }
+            
+        };
+        server = new MyServletWebServer(servlet, 0);
+        server.getXmlRpcServer().setMaxThreads(25);
+        server.start();
+    }
+
+    protected void tearDown() {
+        server.shutdown();
+    }
+
+    /**
+     * Runs the test with a single client.
+     */
+    public void testSingleClient() throws Exception {
+        long now = System.currentTimeMillis();
+        servlet.getXmlRpcServletServer().setMaxThreads(1);
+        new Client(100*BASE, server.getPort()).run();
+        System.out.println("Single client: " +
(System.currentTimeMillis()-now) + ", " +
server.getNumThreads());
+    }
+
+    private static class Client implements Runnable {
+        private final int iterations;
+        private final int port;
+        Client(int pIterations, int pPort) {
+            iterations = pIterations;
+            port = pPort;
+        }
+        public void run() {
+            try {
+                XmlRpcClient client = new XmlRpcClient();
+                XmlRpcClientConfigImpl config = new
XmlRpcClientConfigImpl();
+                config.setServerURL(new URL("
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )