[jboss-svn-commits] JBL Code SVN: r17731 - in labs/jbossesb/trunk/product: services/soap/src/main/java/org/jboss/soa/esb/actions/soap and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jan 11 11:16:41 EST 2008


Author: kevin.conner at jboss.com
Date: 2008-01-11 11:16:41 -0500 (Fri, 11 Jan 2008)
New Revision: 17731

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/HttpClientFactory.java
   labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java
   labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java
Log:
Fix SOAP concurrency issues and exception: JBESB-1449, JBESB-1461

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	2008-01-11 16:01:39 UTC (rev 17730)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/http/HttpClientFactory.java	2008-01-11 16:16:41 UTC (rev 17731)
@@ -25,6 +25,9 @@
 import org.jboss.internal.soa.esb.assertion.AssertArgument;
 import org.jboss.internal.soa.esb.util.StreamUtils;
 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 java.util.Properties;
 import java.io.IOException;
@@ -40,6 +43,10 @@
      * Target host url.
      */
     public static final String TARGET_HOST_URL = "target-host-url";
+    /**
+     * Max total connections.
+     */
+    public static final String MAX_TOTAL_CONNECTIONS = "max-total-connections";
 
     /**
      * Factory method for creating the {@link org.apache.commons.httpclient.HttpClient}
@@ -52,7 +59,18 @@
     public static HttpClient createHttpClient(Properties properties) throws ConfigurationException {
         AssertArgument.isNotNull(properties, "properties");
 
-        HttpClient httpClient = new HttpClient();
+        final HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager() ;
+        final String maxTotalConnections = properties.getProperty(MAX_TOTAL_CONNECTIONS) ;
+        if (maxTotalConnections != null) {
+            final HttpConnectionManagerParams params = new HttpConnectionManagerParams() ;
+            try {
+                params.setMaxTotalConnections(Integer.parseInt(maxTotalConnections)) ;
+            } catch (final NumberFormatException nfe) {
+                throw new ConfigurationException("Invalid " + MAX_TOTAL_CONNECTIONS + " property: " + maxTotalConnections) ;
+            }
+        }
+        
+        HttpClient httpClient = new HttpClient(connectionManager);
         String fileConfig = (String) properties.remove("file");
         String[] configurators;
 

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	2008-01-11 16:01:39 UTC (rev 17730)
+++ labs/jbossesb/trunk/product/services/soap/src/main/java/org/jboss/soa/esb/actions/soap/SOAPClient.java	2008-01-11 16:16:41 UTC (rev 17731)
@@ -20,6 +20,7 @@
 import org.jboss.internal.soa.esb.soap.OGNLUtils;
 import org.jboss.internal.soa.esb.util.StreamUtils;
 import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.http.HttpClientFactory;
 import org.jboss.soa.esb.actions.AbstractActionPipelineProcessor;
@@ -302,6 +303,10 @@
         ConfigTree[] httpClientConfigTrees = config.getChildren("http-client-property");
 
         httpClientProps.setProperty(HttpClientFactory.TARGET_HOST_URL, wsdl);
+        final String maxThreads = config.getParent().getAttribute(ListenerTagNames.MAX_THREADS_TAG) ;
+        if (maxThreads != null) {
+            httpClientProps.setProperty(HttpClientFactory.MAX_TOTAL_CONNECTIONS, maxThreads) ;
+        }
 
         // The HttpClient properties are attached under the factory class/impl property as <http-client-property name="x" value="y" /> nodes
         for(ConfigTree httpClientProp : httpClientConfigTrees) {
@@ -320,7 +325,7 @@
         try {
             params = (Map) payloadProxy.getPayload(message);
         } catch (MessageDeliverException e) {
-            throw new ActionProcessingException("No params. SOAP message parameters must either be set as the default message body payload, or set on the body under the key defined in the 'paramsLocation' acton property.");
+            throw new ActionProcessingException("Could not locate SOAP message parameters from payload", e) ;
         }
 
         if(params.isEmpty()) {
@@ -429,7 +434,7 @@
         Map<String, String> map = new LinkedHashMap<String, String>();
 
         try {
-            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
+            DocumentBuilder docBuilder = getDocBuilder() ;
             Document doc = docBuilder.parse(new InputSource(new StringReader(response)));
             Element graphRootElement = getGraphRootElement(doc.getDocumentElement());
 
@@ -500,6 +505,10 @@
         return factory;
     }
 
+    private static synchronized DocumentBuilder getDocBuilder() throws ParserConfigurationException {
+        return docBuilderFactory.newDocumentBuilder();
+    }
+
     private void configureXStreamDeserializer(ConfigTree[] xstreamAliases) throws ConfigurationException {
         responseXStreamDeserialzer = new XStream();
         for(ConfigTree xstreamAlias : xstreamAliases) {

Modified: labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java
===================================================================
--- labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java	2008-01-11 16:01:39 UTC (rev 17730)
+++ labs/jbossesb/trunk/product/services/soapui-client/src/main/java/org/jboss/soa/esb/services/soapui/SoapUIClientService.java	2008-01-11 16:16:41 UTC (rev 17731)
@@ -40,7 +40,6 @@
 import org.jboss.system.ServiceMBeanSupport;
 import org.milyn.xml.XmlUtil;
 import org.milyn.Smooks;
-import org.milyn.SmooksUtil;
 import org.milyn.resource.URIResourceLocator;
 import org.w3c.dom.*;
 import org.xml.sax.SAXException;
@@ -62,7 +61,7 @@
     private static final String IS_CLONE_ATTRIB = "is-clone";
     private static Logger logger = Logger.getLogger(SoapUIClientService.class);
     private Map<String, WsdlInterface[]> wsdls = new HashMap<String, WsdlInterface[]>();
-    private DocumentBuilder docBuilder;
+    private DocumentBuilderFactory docBuilderFactory ;
     private Map<String, Smooks> smooksCache;
     private ESBProperties properties;
 
@@ -72,13 +71,8 @@
     public SoapUIClientService() throws ConfigurationException {
         properties = new ESBProperties("/soapui-client.sar.properties");
 
-        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+        docBuilderFactory = DocumentBuilderFactory.newInstance();
         docBuilderFactory.setNamespaceAware(true);
-        try {
-            docBuilder = docBuilderFactory.newDocumentBuilder();
-        } catch (ParserConfigurationException e) {
-            throw new RuntimeException("Failed to construct DocumentBuilder instance.", e);
-        }
         int smooksLRUCacheSize = properties.getIntProperty("smooks.lru.cache.size", 30);
         smooksCache = new LRUCache<String, Smooks>(smooksLRUCacheSize);
     }
@@ -155,7 +149,7 @@
     }
 
     private String buildRequest(String soapMessage, Map params, String smooksResource, String soapNs) throws IOException, SAXException {
-        Document messageDoc = docBuilder.parse(new ByteArrayInputStream(soapMessage.getBytes()));
+        Document messageDoc = getDocBuilder().parse(new ByteArrayInputStream(soapMessage.getBytes()));
 
         Element docRoot = messageDoc.getDocumentElement();
 
@@ -386,4 +380,13 @@
         element.removeAttributeNS(OGNLUtils.JBOSSESB_SOAP_NS, OGNLUtils.OGNL_ATTRIB);
     }
 
+    private synchronized DocumentBuilder getDocBuilder() throws IOException {
+        try {
+            return docBuilderFactory.newDocumentBuilder();
+        } catch (final ParserConfigurationException pce) {
+            final IOException ioe = new IOException("Could not create document builder") ;
+            ioe.initCause(pce) ;
+            throw ioe ;
+        }
+    }
 }




More information about the jboss-svn-commits mailing list