You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by he...@apache.org on 2005/06/27 10:07:05 UTC
svn commit: r201958 - in /webservices/axis/trunk/java/modules/core:
src/org/apache/axis/transport/http/ src/org/apache/axis/util/threadpool/
test/org/apache/axis/util/threadpool/
Author: hemapani
Date: Mon Jun 27 01:07:04 2005
New Revision: 201958
URL: http://svn.apache.org/viewcvs?rev=201958&view=rev
Log:
refactoring the HTTP transport
Modified:
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportReceiver.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java
webservices/axis/trunk/java/modules/core/src/org/apache/axis/util/threadpool/ThreadPool.java
webservices/axis/trunk/java/modules/core/test/org/apache/axis/util/threadpool/TestThreadPool.java
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java?rev=201958&r1=201957&r2=201958&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/AxisServlet.java Mon Jun 27 01:07:04 2005
@@ -15,9 +15,7 @@
*/
package org.apache.axis.transport.http;
-import java.io.BufferedReader;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.HashMap;
@@ -29,11 +27,6 @@
import javax.servlet.http.HttpServletResponse;
import javax.xml.namespace.QName;
import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.XMLStreamWriter;
import org.apache.axis.Constants;
import org.apache.axis.addressing.AddressingConstants;
@@ -45,13 +38,6 @@
import org.apache.axis.engine.AxisEngine;
import org.apache.axis.engine.AxisFault;
import org.apache.axis.om.OMException;
-import org.apache.axis.om.impl.llom.OMOutput;
-import org.apache.axis.om.impl.llom.builder.StAXBuilder;
-import org.apache.axis.om.impl.llom.builder.StAXOMBuilder;
-import org.apache.axis.soap.SOAPEnvelope;
-import org.apache.axis.soap.SOAPFactory;
-import org.apache.axis.soap.impl.llom.builder.StAXSOAPModelBuilder;
-import org.apache.axis.soap.impl.llom.soap11.SOAP11Factory;
import org.apache.axis.util.Utils;
/**
@@ -99,6 +85,17 @@
throws ServletException, IOException {
try {
+
+ Object sessionContext =
+ httpServletRequest.getSession().getAttribute(
+ Constants.SESSION_CONTEXT_PROPERTY);
+ if (sessionContext == null) {
+ sessionContext = new SessionContext(null);
+ httpServletRequest.getSession().setAttribute(
+ Constants.SESSION_CONTEXT_PROPERTY,
+ sessionContext);
+ }
+
String filePart = httpServletRequest.getRequestURL().toString();
Enumeration enu = httpServletRequest.getParameterNames();
HashMap map = new HashMap();
@@ -107,42 +104,32 @@
String value = httpServletRequest.getParameter(name);
map.put(name, value);
}
+
+ MessageContext msgContext =
+ new MessageContext(
+ configContext,
+ (SessionContext) sessionContext,
+ configContext.getAxisConfiguration().getTransportIn(
+ new QName(Constants.TRANSPORT_HTTP)),
+ configContext.getAxisConfiguration().getTransportOut(
+ new QName(Constants.TRANSPORT_HTTP)));
+ msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
- SOAPEnvelope envelope = HTTPTransportUtils.createEnvelopeFromGetRequest(filePart, map);
- if (envelope != null) {
- OMOutput omOutput =
- new OMOutput(XMLOutputFactory.newInstance().createXMLStreamWriter(System.out));
- envelope.serialize(omOutput);
- System.out.flush();
- Object sessionContext =
- httpServletRequest.getSession().getAttribute(
- Constants.SESSION_CONTEXT_PROPERTY);
- if (sessionContext == null) {
- sessionContext = new SessionContext(null);
- httpServletRequest.getSession().setAttribute(
- Constants.SESSION_CONTEXT_PROPERTY,
- sessionContext);
- }
- MessageContext msgContext =
- new MessageContext(
- configContext,
- (SessionContext) sessionContext,
- configContext.getAxisConfiguration().getTransportIn(
- new QName(Constants.TRANSPORT_HTTP)),
- configContext.getAxisConfiguration().getTransportOut(
- new QName(Constants.TRANSPORT_HTTP)));
- msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
-
- msgContext.setEnvelope(envelope);
- processSOAPMessage(msgContext, httpServletRequest, httpServletResponse);
-
- } else {
- lister.handle(httpServletRequest, httpServletResponse);
+
+ boolean processed = HTTPTransportUtils.processHTTPGetRequest(msgContext,
+ httpServletRequest.getInputStream(),
+ httpServletResponse.getOutputStream(),
+ httpServletRequest.getContentType(),
+ httpServletRequest.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+ httpServletRequest.getRequestURL().toString(),
+ configContext,map);
+
+
+ if (!processed) {
+ lister.handle(httpServletRequest, httpServletResponse);
}
} catch (OMException e) {
throw new AxisFault(e);
- } catch (XMLStreamException e) {
- throw new AxisFault(e);
} catch (FactoryConfigurationError e) {
throw new AxisFault(e);
} catch (IOException e) {
@@ -181,34 +168,20 @@
new QName(Constants.TRANSPORT_HTTP)),
configContext.getAxisConfiguration().getTransportOut(
new QName(Constants.TRANSPORT_HTTP)));
-
- XMLStreamReader reader =
- XMLInputFactory.newInstance().createXMLStreamReader(
- new BufferedReader(new InputStreamReader(req.getInputStream())));
-
- //Check for the REST behaviour, if you desire rest beahaviour
- //put a <parameter name="doREST" value="true"/> at the axis2.xml
- Object doREST = msgContext.getProperty(Constants.Configuration.DO_REST);
- StAXBuilder builder = null;
- SOAPEnvelope envelope = null;
- if (doREST != null && "true".equals(doREST)) {
- SOAPFactory soapFactory = new SOAP11Factory();
- builder = new StAXOMBuilder(reader);
- builder.setOmbuilderFactory(soapFactory);
- envelope = soapFactory.getDefaultEnvelope();
- envelope.getBody().addChild(builder.getDocumentElement());
- } else {
- builder = new StAXSOAPModelBuilder(reader);
- envelope = (SOAPEnvelope) builder.getDocumentElement();
+
+ res.setContentType("text/xml; charset=utf-8");
+ HTTPTransportUtils.processHTTPPostRequest(msgContext,
+ req.getInputStream(),
+ res.getOutputStream(),
+ req.getContentType(),
+ req.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
+ req.getRequestURL().toString(),
+ configContext);
+ Object contextWritten = msgContext.getProperty(Constants.RESPONSE_WRITTEN);
+ if (contextWritten == null || !Constants.VALUE_TRUE.equals(contextWritten)) {
+ res.setStatus(HttpServletResponse.SC_ACCEPTED);
}
-
- msgContext.setEnvelope(envelope);
- processSOAPMessage(msgContext, req, res);
} catch (AxisFault e) {
- throw new ServletException(e);
- } catch (XMLStreamException e) {
- throw new ServletException(e);
- } catch (FactoryConfigurationError e) {
throw new ServletException(e);
}
}
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportReceiver.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportReceiver.java?rev=201958&r1=201957&r2=201958&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportReceiver.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportReceiver.java Mon Jun 27 01:07:04 2005
@@ -86,62 +86,62 @@
*/
private boolean done = false;
-
- /**
- * Method invoke
- *
- * @param msgContext
- * @throws AxisFault
- */
- public SOAPEnvelope handleHTTPRequest(
- MessageContext msgContext,InputStream inStream, Map map)
- throws AxisFault {
- SOAPEnvelope soapEnvelope = null;
-
-
-
- msgContext.setWSAAction(
- (String) map.get(HTTPConstants.HEADER_SOAP_ACTION));
- Utils.configureMessageContextForHTTP(
- (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
- msgContext.getWSAAction(),
- msgContext);
-
- String requestURI = (String) map.get(HTTPConstants.REQUEST_URI);
- msgContext.setTo(
- new EndpointReference(AddressingConstants.WSA_TO, requestURI));
-
- if (HTTPConstants
- .RESPONSE_ACK_CODE_VAL
- .equals(map.get(HTTPConstants.RESPONSE_CODE))) {
- msgContext.setProperty(
- MessageContext.TRANSPORT_SUCCEED,
- HTTPConstants.RESPONSE_ACK_CODE_VAL);
- return null;
- } else if (
- HTTPConstants.HEADER_GET.equals(
- map.get(HTTPConstants.HTTP_REQ_TYPE))) {
- SOAPEnvelope envelope =
- HTTPTransportUtils.createEnvelopeFromGetRequest(
- requestURI,
- getGetRequestParameters(requestURI));
- if (envelope == null) {
- this.handleGETRequest(
- requestURI,
- (OutputStream) map.get(MessageContext.TRANSPORT_OUT),
- msgContext.getSystemContext());
- return null;
- } else {
- msgContext.setProperty(
- Constants.Configuration.DO_REST,
- Constants.VALUE_TRUE);
- return envelope;
- }
-
- } else {
- return TransportUtils.createSOAPMessage(msgContext,inStream);
- }
- }
+//
+// /**
+// * Method invoke
+// *
+// * @param msgContext
+// * @throws AxisFault
+// */
+// public SOAPEnvelope handleHTTPRequest(
+// MessageContext msgContext,InputStream inStream, Map map)
+// throws AxisFault {
+// SOAPEnvelope soapEnvelope = null;
+//
+//
+//
+// msgContext.setWSAAction(
+// (String) map.get(HTTPConstants.HEADER_SOAP_ACTION));
+// Utils.configureMessageContextForHTTP(
+// (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
+// msgContext.getWSAAction(),
+// msgContext);
+//
+// String requestURI = (String) map.get(HTTPConstants.REQUEST_URI);
+// msgContext.setTo(
+// new EndpointReference(AddressingConstants.WSA_TO, requestURI));
+//
+// if (HTTPConstants
+// .RESPONSE_ACK_CODE_VAL
+// .equals(map.get(HTTPConstants.RESPONSE_CODE))) {
+// msgContext.setProperty(
+// MessageContext.TRANSPORT_SUCCEED,
+// HTTPConstants.RESPONSE_ACK_CODE_VAL);
+// return null;
+// } else if (
+// HTTPConstants.HEADER_GET.equals(
+// map.get(HTTPConstants.HTTP_REQ_TYPE))) {
+// SOAPEnvelope envelope =
+// HTTPTransportUtils.createEnvelopeFromGetRequest(
+// requestURI,
+// getGetRequestParameters(requestURI));
+// if (envelope == null) {
+// this.handleGETRequest(
+// requestURI,
+// (OutputStream) map.get(MessageContext.TRANSPORT_OUT),
+// msgContext.getSystemContext());
+// return null;
+// } else {
+// msgContext.setProperty(
+// Constants.Configuration.DO_REST,
+// Constants.VALUE_TRUE);
+// return envelope;
+// }
+//
+// } else {
+// return TransportUtils.createSOAPMessage(msgContext,inStream);
+// }
+// }
/**
@@ -451,18 +451,7 @@
}
}
- private void handleGETRequest(
- String reqUri,
- OutputStream out,
- ConfigurationContext configurationContext) {
-
- try {
- out.write(this.getServicesHTML(configurationContext).getBytes());
- out.flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
+
/**
* Returns the HTML text for the list of services deployed
@@ -470,7 +459,7 @@
* where it will handle more options of GET messages :-?
* @return
*/
- private String getServicesHTML(ConfigurationContext configurationContext) {
+ public static String getServicesHTML(ConfigurationContext configurationContext) {
String temp = "";
Map services =
configurationContext.getAxisConfiguration().getServices();
@@ -534,7 +523,7 @@
return temp;
}
- private Map getGetRequestParameters(String requestURI) {
+ public static Map getGetRequestParameters(String requestURI) {
Map map = new HashMap();
char[] chars = requestURI.toCharArray();
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java?rev=201958&r1=201957&r2=201958&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/HTTPTransportUtils.java Mon Jun 27 01:07:04 2005
@@ -17,21 +17,96 @@
*/
package org.apache.axis.transport.http;
-import java.util.Enumeration;
-import java.util.HashMap;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.util.Iterator;
import java.util.Map;
import org.apache.axis.Constants;
+import org.apache.axis.addressing.AddressingConstants;
+import org.apache.axis.addressing.EndpointReference;
+import org.apache.axis.context.ConfigurationContext;
+import org.apache.axis.context.MessageContext;
+import org.apache.axis.engine.AxisEngine;
+import org.apache.axis.engine.AxisFault;
import org.apache.axis.om.OMElement;
import org.apache.axis.om.OMNamespace;
import org.apache.axis.om.impl.llom.OMNamespaceImpl;
import org.apache.axis.soap.SOAPEnvelope;
import org.apache.axis.soap.SOAPFactory;
import org.apache.axis.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis.transport.TransportUtils;
import org.apache.axis.util.Utils;
public class HTTPTransportUtils {
+
+ public static void processHTTPPostRequest(
+ MessageContext msgContext,
+ InputStream in,
+ OutputStream out,
+ String contentType,
+ String soapAction,
+ String requestURI,
+ ConfigurationContext configurationContext)
+ throws AxisFault {
+
+ msgContext.setWSAAction(soapAction);
+ msgContext.setTo(new EndpointReference(AddressingConstants.WSA_TO, requestURI));
+
+ if (Constants.SOAP.MTOM_CONTENT_TYPE.equals(contentType)) {
+ if (Constants
+ .VALUE_TRUE
+ .equals(msgContext.getProperty(Constants.Configuration.ENABLE_MTOM))) {
+ msgContext.setProperty(Constants.Configuration.DO_MTOM, Constants.VALUE_TRUE);
+ } else {
+ throw new AxisFault("MTOTM Not supported");
+ }
+ } else if (Constants.SOAP.SOAP_12_CONTENT_TYPE.equals(contentType)) {
+ //TODO what to do with 1.2 for REST
+ } else if (
+ contentType != null && contentType.indexOf(Constants.SOAP.SOAP_11_CONTENT_TYPE) > -1) {
+ if ((soapAction == null || soapAction.length() == 0)
+ && Constants.VALUE_TRUE.equals(
+ msgContext.getProperty(Constants.Configuration.ENABLE_REST))) {
+ msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
+ }
+ }
+
+ SOAPEnvelope envelope = TransportUtils.createSOAPMessage(msgContext, in);
+
+ msgContext.setEnvelope(envelope);
+ AxisEngine engine = new AxisEngine(configurationContext);
+ engine.receive(msgContext);
+ }
+
+ public static boolean processHTTPGetRequest(
+ MessageContext msgContext,
+ InputStream in,
+ OutputStream out,
+ String contentType,
+ String soapAction,
+ String requestURI,
+ ConfigurationContext configurationContext,Map requestParameters) throws AxisFault {
+
+ try {
+ SOAPEnvelope envelope =
+ HTTPTransportUtils.createEnvelopeFromGetRequest(
+ requestURI,
+ requestParameters);
+ if (envelope == null) {
+ return false;
+ } else {
+ msgContext.setProperty(Constants.Configuration.DO_REST, Constants.VALUE_TRUE);
+ msgContext.setEnvelope(envelope);
+ AxisEngine engine = new AxisEngine(configurationContext);
+ engine.receive(msgContext);
+ return true;
+ }
+ }catch (IOException e) {
+ throw new AxisFault(e);
+ }
+ }
public static final SOAPEnvelope createEnvelopeFromGetRequest(String requestUrl, Map map) {
String[] values = Utils.parseRequestURLForServiceAndOperation(requestUrl);
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java?rev=201958&r1=201957&r2=201958&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/transport/http/SimpleHTTPServer.java Mon Jun 27 01:07:04 2005
@@ -34,9 +34,7 @@
import org.apache.axis.description.Parameter;
import org.apache.axis.description.TransportInDescription;
import org.apache.axis.description.TransportOutDescription;
-import org.apache.axis.engine.AxisEngine;
import org.apache.axis.engine.AxisFault;
-import org.apache.axis.soap.SOAPEnvelope;
import org.apache.axis.transport.TransportListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -175,25 +173,34 @@
//OutputStream out = socket.getOutputStream();
msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
+
+
+
+ if (HTTPConstants.HEADER_GET.equals(map.get(HTTPConstants.HTTP_REQ_TYPE))) {
+ boolean processed = HTTPTransportUtils.processHTTPGetRequest(msgContext,
+ inStream,
+ out,
+ (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
+ (String) map.get(HTTPConstants.HEADER_SOAP_ACTION),
+ (String) map.get(HTTPConstants.REQUEST_URI),
+ configurationContext,
+ HTTPTransportReceiver.getGetRequestParameters((String) map.get(HTTPConstants.REQUEST_URI)));
+
+ if(!processed){
+ out.write(HTTPTransportReceiver.getServicesHTML(configurationContext).getBytes());
+ out.flush();
+ }
+ } else {
+ HTTPTransportUtils.processHTTPPostRequest(msgContext,
+ inStream,
+ out,
+ (String) map.get(HTTPConstants.HEADER_CONTENT_TYPE),
+ (String) map.get(HTTPConstants.HEADER_SOAP_ACTION),
+ (String) map.get(HTTPConstants.REQUEST_URI),
+ configurationContext);
+ }
- SOAPEnvelope envelope =
- reciver.handleHTTPRequest(msgContext,inStream,map);
-
- if (envelope != null) {
- msgContext.setEnvelope(envelope);
-
- AxisEngine engine = new AxisEngine(configurationContext);
- engine.receive(msgContext);
-
-// Object contextWritten =
-// msgContext.getProperty(Constants.RESPONSE_WRITTEN);
-// if (contextWritten == null
-// || !Constants.VALUE_TRUE.equals(contextWritten)) {
-// out.write(new String(HTTPConstants.NOCONTENT).getBytes());
-// out.close();
-// }
- }
out.finalize();
}
} catch (Throwable e) {
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis/util/threadpool/ThreadPool.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis/util/threadpool/ThreadPool.java?rev=201958&r1=201957&r2=201958&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis/util/threadpool/ThreadPool.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis/util/threadpool/ThreadPool.java Mon Jun 27 01:07:04 2005
@@ -1,13 +1,12 @@
package org.apache.axis.util.threadpool;
-import sun.misc.Queue;
-
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.axis.engine.AxisFault;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.axis.engine.AxisFault;
-
/**
* This the thread pool for axis2. This class will be used a singleton
@@ -25,30 +24,18 @@
private static List threads;
private static List tasks;
private static boolean shoutDown;
- private static ThreadPool instance;
- private ThreadPool() {
+ public ThreadPool() {
threads = new ArrayList();
tasks = new ArrayList();
- }
-
- public static ThreadPool getInstance() {
- if(log.isDebugEnabled())
- log.debug("ThreadPool Created");
-
- if (instance != null) {
- return instance;
- } else {
- instance = new ThreadPool();
- for (int i = 0; i < MAX_THREAD_COUNT; i++) {
- ThreadWorker threadWorker = new ThreadWorker();
- threadWorker.setPool(instance);
- threads.add(threadWorker);
- threadWorker.start();
- }
- return instance;
+ for (int i = 0; i < MAX_THREAD_COUNT; i++) {
+ ThreadWorker threadWorker = new ThreadWorker();
+ threadWorker.setPool(this);
+ threads.add(threadWorker);
+ threadWorker.start();
}
+
}
public void addWorker(AxisWorker worker) throws AxisFault {
@@ -92,8 +79,8 @@
* A forceful shutdown mechanism for thread pool.
*/
public void forceShutDown() {
- if(log.isDebugEnabled())
- log.debug("forceShutDown called. Thread workers will be stopped");
+ if (log.isDebugEnabled())
+ log.debug("forceShutDown called. Thread workers will be stopped");
Iterator ite = threads.iterator();
while (ite.hasNext()) {
ThreadWorker worker = (ThreadWorker) ite.next();
Modified: webservices/axis/trunk/java/modules/core/test/org/apache/axis/util/threadpool/TestThreadPool.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/test/org/apache/axis/util/threadpool/TestThreadPool.java?rev=201958&r1=201957&r2=201958&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/test/org/apache/axis/util/threadpool/TestThreadPool.java (original)
+++ webservices/axis/trunk/java/modules/core/test/org/apache/axis/util/threadpool/TestThreadPool.java Mon Jun 27 01:07:04 2005
@@ -36,7 +36,7 @@
public void testPool() throws AxisFault {
- ThreadPool tPool = ThreadPool.getInstance();
+ ThreadPool tPool = new ThreadPool();
List workerList = new ArrayList();
for (int i = 0; i < 5; i++) {