[jboss-svn-commits] JBL Code SVN: r33577 - in labs/jbossesb/trunk/product: rosetta/src/org/jboss/soa/esb/helpers and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jun 21 16:59:17 EDT 2010


Author: dward
Date: 2010-06-21 16:59:16 -0400 (Mon, 21 Jun 2010)
New Revision: 33577

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/helpers/ConfigTree.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/HttpClientFactory.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/configurators/Connection.java
   labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java
   labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/proxy/HttpSOAPProxyTransport.java
   labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/proxy/SOAPProxyUnitTest.java
Log:
Fix for JBESB-3356 ( https://jira.jboss.org/browse/JBESB-3356 ).


Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java	2010-06-21 20:59:13 UTC (rev 33576)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/routing/http/HttpRouter.java	2010-06-21 20:59:16 UTC (rev 33577)
@@ -45,6 +45,7 @@
 import org.jboss.soa.esb.http.HttpHeader;
 import org.jboss.soa.esb.http.HttpRequest;
 import org.jboss.soa.esb.http.HttpResponse;
+import org.jboss.soa.esb.http.configurators.Connection;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.Message;
@@ -302,16 +303,16 @@
         super.destroy();
     }
 
-    @SuppressWarnings("deprecation")
 	private void extractHttpClientProps(ConfigTree config) {
-        ConfigTree[] httpClientConfigTrees = config.getChildren("http-client-property");
+        ConfigTree[] httpClientConfigTrees = config.getChildren(HttpClientFactory.HTTP_CLIENT_PROPERTY);
 
         httpClientProps.setProperty(HttpClientFactory.TARGET_HOST_URL, endpointUrl.toString());
-        final ConfigTree parent = config.getParent() ;
+        final ConfigTree parent = config.getParent();
         if (parent != null) {
-            final String maxThreads = config.getParent().getAttribute(ListenerTagNames.MAX_THREADS_TAG) ;
+            final String maxThreads = parent.getAttribute(ListenerTagNames.MAX_THREADS_TAG);
             if (maxThreads != null) {
-                httpClientProps.setProperty(HttpClientFactory.MAX_TOTAL_CONNECTIONS, maxThreads) ;
+                httpClientProps.setProperty(Connection.MAX_TOTAL_CONNECTIONS, maxThreads);
+                httpClientProps.setProperty(Connection.MAX_CONNECTIONS_PER_HOST, maxThreads);
             }
         }
 
@@ -325,6 +326,11 @@
             }
         }
     }
+    
+    // public for testing purposes, see SOAPProxyUnitTest.test_maxThreads*()
+    public java.util.Properties getHttpClientProps() {
+    	return httpClientProps;
+    }
 
     public static void main(String[] args) throws ConfigurationException, ActionProcessingException {
         ConfigTree configTree = new ConfigTree("config");
@@ -339,7 +345,7 @@
             String name = arg.substring(0, equalsIdx);
             String value = arg.substring(equalsIdx + 1);
             if(!coreProperties.contains(name) && !name.equals("payload")) {
-                ConfigTree httpClientProperty = new ConfigTree("http-client-property", configTree);
+                ConfigTree httpClientProperty = new ConfigTree(HttpClientFactory.HTTP_CLIENT_PROPERTY, configTree);
                 httpClientProperty.setAttribute("name", name);
                 httpClientProperty.setAttribute("value", value);
             } else {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/helpers/ConfigTree.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/helpers/ConfigTree.java	2010-06-21 20:59:13 UTC (rev 33576)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/helpers/ConfigTree.java	2010-06-21 20:59:16 UTC (rev 33577)
@@ -460,13 +460,13 @@
      * @return ConfigTree - Deep copy of 'this'
      */
     public ConfigTree cloneObj() {
-        return cloneSubtree(null);
+        return cloneObj(null);
     }
 
     /**
      * @return ConfigTree - Deep copy of 'this'
      */
-    private ConfigTree cloneSubtree(ConfigTree dad) {
+    public ConfigTree cloneObj(ConfigTree dad) {
         ConfigTree oRet = new ConfigTree(_name, dad);
         if (null != _attributes)
             for (Map.Entry<String, String> oAtt : _attributes.entrySet())
@@ -475,7 +475,7 @@
             for (Child oChild : _childs) {
                 ConfigTree tree = oChild.getTree();
                 if (null != tree)
-                    tree.cloneSubtree(oRet);
+                    tree.cloneObj(oRet);
                 else
                     oRet.addTextChild(oChild._obj.toString());
             }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/HttpClientFactory.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/HttpClientFactory.java	2010-06-21 20:59:13 UTC (rev 33576)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/HttpClientFactory.java	2010-06-21 20:59:16 UTC (rev 33577)
@@ -44,10 +44,9 @@
      */
     public static final String TARGET_HOST_URL = "target-host-url";
     /**
-     * Max total connections.
-     * @deprecated
+     * http-client-property.
      */
-    public static final String MAX_TOTAL_CONNECTIONS = "max-total-connections";
+    public static final String HTTP_CLIENT_PROPERTY = "http-client-property";
 
     /**
      * Factory method for creating the {@link org.apache.commons.httpclient.HttpClient}

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/configurators/Connection.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/configurators/Connection.java	2010-06-21 20:59:13 UTC (rev 33576)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/configurators/Connection.java	2010-06-21 20:59:16 UTC (rev 33577)
@@ -19,15 +19,15 @@
  */
 package org.jboss.soa.esb.http.configurators;
 
+import java.util.Properties;
+
 import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpConnectionManager;
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
 import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
-import org.apache.log4j.Logger;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.http.Configurator;
-import java.util.Properties;
 
 /**
  * HTTP Connection configurator.
@@ -101,7 +101,7 @@
         {
             if (totalConnections != null) {
                 try {
-                    maxTotalConnections = Integer.parseInt(totalConnections.trim()) ;
+                    maxTotalConnections = Integer.valueOf(totalConnections.trim()) ;
                 } catch (final NumberFormatException nfe) {
                     throw new ConfigurationException("Invalid " + MAX_TOTAL_CONNECTIONS + " property: " + totalConnections) ;
                 }
@@ -109,10 +109,9 @@
                 maxTotalConnections = null ;
             }
             
-
             if (connectionsPerHost != null) {
                 try {
-                    maxConnectionsPerHost = Integer.parseInt(connectionsPerHost.trim());
+                    maxConnectionsPerHost = Integer.valueOf(connectionsPerHost.trim()) ;
                 } catch (final NumberFormatException nfe) {
                     throw new ConfigurationException("Invalid " + MAX_CONNECTIONS_PER_HOST + " property: " + connectionsPerHost) ;
                 }

Modified: labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java	2010-06-21 20:59:13 UTC (rev 33576)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java	2010-06-21 20:59:16 UTC (rev 33577)
@@ -54,6 +54,7 @@
 import org.jboss.soa.esb.actions.ActionUtils;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.http.HttpClientFactory;
+import org.jboss.soa.esb.http.configurators.Connection;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.Message;
@@ -382,14 +383,15 @@
     }
 
     private void extractHttpClientProps(ConfigTree config) {
-        ConfigTree[] httpClientConfigTrees = config.getChildren("http-client-property");
+        ConfigTree[] httpClientConfigTrees = config.getChildren(HttpClientFactory.HTTP_CLIENT_PROPERTY);
 
         httpClientProps.setProperty(HttpClientFactory.TARGET_HOST_URL, wsdl);
-        final ConfigTree parent = config.getParent() ;
+        final ConfigTree parent = config.getParent();
         if (parent != null) {
-            final String maxThreads = config.getParent().getAttribute(ListenerTagNames.MAX_THREADS_TAG) ;
+            final String maxThreads = parent.getAttribute(ListenerTagNames.MAX_THREADS_TAG);
             if (maxThreads != null) {
-                httpClientProps.setProperty(HttpClientFactory.MAX_TOTAL_CONNECTIONS, maxThreads) ;
+                httpClientProps.setProperty(Connection.MAX_TOTAL_CONNECTIONS, maxThreads);
+                httpClientProps.setProperty(Connection.MAX_CONNECTIONS_PER_HOST, maxThreads);
             }
         }
 

Modified: labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/proxy/HttpSOAPProxyTransport.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/proxy/HttpSOAPProxyTransport.java	2010-06-21 20:59:13 UTC (rev 33576)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/proxy/HttpSOAPProxyTransport.java	2010-06-21 20:59:16 UTC (rev 33577)
@@ -25,7 +25,9 @@
 import org.jboss.soa.esb.actions.ActionProcessingException;
 import org.jboss.soa.esb.actions.routing.http.HttpRouter;
 import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.http.HttpClientFactory;
 import org.jboss.soa.esb.http.configurators.AuthBASIC;
+import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.message.MessagePayloadProxy;
 
@@ -41,11 +43,23 @@
 	private static Logger logger = Logger.getLogger(HttpSOAPProxyTransport.class);
 	
 	private String endpointAddress;
-	private HttpRouter router;
+	private HttpRouter httpRouter;
 	
 	HttpSOAPProxyTransport(ConfigTree config, final MessagePayloadProxy payloadProxy, String defaultEndpointAddress) throws ConfigurationException
 	{
-		ConfigTree cloned_config = config.cloneObj();
+		ConfigTree cloned_config = null;
+		ConfigTree parent_config = config.getParent();
+		if (parent_config != null) {
+			final String maxThreads = parent_config.getAttribute(ListenerTagNames.MAX_THREADS_TAG);
+			if (maxThreads != null) {
+				parent_config = new ConfigTree("parent");
+				parent_config.setAttribute(ListenerTagNames.MAX_THREADS_TAG, maxThreads);
+				cloned_config = config.cloneObj(parent_config);
+			}
+		}
+		if (cloned_config == null) {
+			cloned_config = config.cloneObj();
+		}
 		
 		setAttribute(cloned_config, "MappedHeaderList", "Content-Type, Accept, Authorization, SOAPAction");
 		setAttribute(cloned_config, "method", "POST");
@@ -57,7 +71,7 @@
 		if (file != null)
 		{
 			boolean found_file_child = false;
-			ConfigTree[] children = cloned_config.getChildren("http-client-property");
+			ConfigTree[] children = cloned_config.getChildren(HttpClientFactory.HTTP_CLIENT_PROPERTY);
 			for (ConfigTree child : children)
 			{
 				if ( "file".equals(child.getName()) )
@@ -68,7 +82,7 @@
 			}
 			if (!found_file_child)
 			{
-				ConfigTree file_child = new ConfigTree("http-client-property", cloned_config);
+				ConfigTree file_child = new ConfigTree(HttpClientFactory.HTTP_CLIENT_PROPERTY, cloned_config);
 				file_child.setAttribute("name", "file");
 				file_child.setAttribute("value", file);
 				if ( logger.isDebugEnabled() )
@@ -82,13 +96,13 @@
 		{
 			for (String name : new String[]{AuthBASIC.class.getName(), AuthBASIC.class.getSimpleName()})
 			{
-				ConfigTree skip_child = new ConfigTree("http-client-property", cloned_config);
+				ConfigTree skip_child = new ConfigTree(HttpClientFactory.HTTP_CLIENT_PROPERTY, cloned_config);
 				skip_child.setAttribute("name", name + ".skip");
 				skip_child.setAttribute("value", "true");
 			}
 		}
 		
-		router = new HttpRouter(cloned_config) {
+		httpRouter = new HttpRouter(cloned_config) {
 			@Override
 			public MessagePayloadProxy getPayloadProxy() {
 				return payloadProxy;
@@ -96,6 +110,11 @@
 		};
 	}
 	
+	// package-protected for testing purposes, see SOAPProxyUnitTest.test_maxThreads*()
+	HttpRouter getHttpRouter() {
+		return httpRouter;
+	}
+	
 	public String getEndpointAddress()
 	{
 		return endpointAddress;
@@ -103,17 +122,17 @@
 	
 	public void initialise() throws ActionLifecycleException
 	{
-		router.initialise();
+		httpRouter.initialise();
 	}
 	
 	public Message process(Message message) throws ActionProcessingException
 	{
-		return router.process(message);
+		return httpRouter.process(message);
 	}
 	
 	public void destroy() throws ActionLifecycleException
 	{
-		router.destroy();
+		httpRouter.destroy();
 	}
 	
 	private String setAttribute(ConfigTree config, String name, String defaultValue)

Modified: labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/proxy/SOAPProxyUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/proxy/SOAPProxyUnitTest.java	2010-06-21 20:59:13 UTC (rev 33576)
+++ labs/jbossesb/trunk/product/services/soap/src/test/java/org/jboss/soa/esb/actions/soap/proxy/SOAPProxyUnitTest.java	2010-06-21 20:59:16 UTC (rev 33577)
@@ -20,10 +20,20 @@
 package org.jboss.soa.esb.actions.soap.proxy;
 
 import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.Properties;
+
 import junit.framework.JUnit4TestAdapter;
 
 import org.jboss.soa.esb.actions.soap.proxy.SOAPProxyWsdlLoader.DefaultSOAPProxyWsdlLoader;
 import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.http.HttpClientFactory;
+import org.jboss.soa.esb.http.configurators.Connection;
+import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.junit.Test;
 
 /**
@@ -60,6 +70,80 @@
 		}
 	}
 	
+	@Test
+	public void test_maxThreadsPropagation() throws Exception
+	{
+		final String expected = "100";
+		ConfigTree parent_config = new ConfigTree("parent");
+		parent_config.setAttribute(ListenerTagNames.MAX_THREADS_TAG, expected);
+		ConfigTree child_config = new ConfigTree("child", parent_config);
+		child_config.setAttribute("endpointUrl", "http://localhost"); // required attribute
+		HttpSOAPProxyTransport transport = new HttpSOAPProxyTransport(child_config, null, null);
+		Properties httpClientProps = transport.getHttpRouter().getHttpClientProps();
+		final String actual_mtc = httpClientProps.getProperty(Connection.MAX_TOTAL_CONNECTIONS);
+		assertEquals(expected, actual_mtc); 
+		final String actual_mcph = httpClientProps.getProperty(Connection.MAX_CONNECTIONS_PER_HOST);
+		assertEquals(expected, actual_mcph);
+	}
+	
+	@Test
+	public void test_maxThreadsPropertyOverrides() throws Exception
+	{
+		final String expected_mtc = "100";
+		final String expected_mcph = "50";
+		ConfigTree parent_config = new ConfigTree("parent");
+		parent_config.setAttribute(ListenerTagNames.MAX_THREADS_TAG, "1");
+		ConfigTree child_config = new ConfigTree("child", parent_config);
+		child_config.setAttribute("endpointUrl", "http://localhost"); // required attribute
+		ConfigTree mtc_config = new ConfigTree(HttpClientFactory.HTTP_CLIENT_PROPERTY, child_config);
+		mtc_config.setAttribute("name", Connection.MAX_TOTAL_CONNECTIONS);
+		mtc_config.setAttribute("value", expected_mtc);
+		ConfigTree mcph_config = new ConfigTree(HttpClientFactory.HTTP_CLIENT_PROPERTY, child_config);
+		mcph_config.setAttribute("name", Connection.MAX_CONNECTIONS_PER_HOST);
+		mcph_config.setAttribute("value", expected_mcph);
+		HttpSOAPProxyTransport transport = new HttpSOAPProxyTransport(child_config, null, null);
+		Properties httpClientProps = transport.getHttpRouter().getHttpClientProps();
+		final String actual_mtc = httpClientProps.getProperty(Connection.MAX_TOTAL_CONNECTIONS);
+		assertEquals(expected_mtc, actual_mtc); 
+		final String actual_mcph = httpClientProps.getProperty(Connection.MAX_CONNECTIONS_PER_HOST);
+		assertEquals(expected_mcph, actual_mcph);
+	}
+	
+	@Test
+	public void test_maxThreadsFileOverrides() throws Exception
+	{
+		final String expected_mtc = "100";
+		final String expected_mcph = "50";
+		ConfigTree parent_config = new ConfigTree("parent");
+		parent_config.setAttribute(ListenerTagNames.MAX_THREADS_TAG, "1");
+		ConfigTree child_config = new ConfigTree("child", parent_config);
+		child_config.setAttribute("endpointUrl", "http://localhost"); // required attribute
+		File file = null;
+		OutputStream os = null;
+		try
+		{
+			file = File.createTempFile(HttpClientFactory.HTTP_CLIENT_PROPERTY, ".properties");
+			os = new BufferedOutputStream(new FileOutputStream(file));
+			Properties fileProperties = new Properties();
+			fileProperties.setProperty(Connection.MAX_TOTAL_CONNECTIONS, expected_mtc);
+			fileProperties.setProperty(Connection.MAX_CONNECTIONS_PER_HOST, expected_mcph);
+			fileProperties.store(os, getClass().getName());
+			os.flush(); os.close(); os = null;
+			child_config.setAttribute("file", file.getAbsolutePath());	
+			HttpSOAPProxyTransport transport = new HttpSOAPProxyTransport(child_config, null, null);
+			Properties httpClientProps = transport.getHttpRouter().getHttpClientProps();
+			final String actual_mtc = httpClientProps.getProperty(Connection.MAX_TOTAL_CONNECTIONS);
+			assertEquals(expected_mtc, actual_mtc); 
+			final String actual_mcph = httpClientProps.getProperty(Connection.MAX_CONNECTIONS_PER_HOST);
+			assertEquals(expected_mcph, actual_mcph);
+		}
+		finally
+		{
+			try { if (os != null) os.close(); } catch (Throwable t) {}
+			try { if (file != null) file.delete(); } catch (Throwable t) {}
+		}
+	}
+	
     public static junit.framework.Test suite()
     {
         return new JUnit4TestAdapter(SOAPProxyUnitTest.class);



More information about the jboss-svn-commits mailing list