[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