You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mi...@apache.org on 2009/03/03 20:35:10 UTC
svn commit: r749709 - in /ode/trunk: ./
axis2/src/main/java/org/apache/ode/axis2/
axis2/src/main/java/org/apache/ode/axis2/httpbinding/
axis2/src/main/java/org/apache/ode/axis2/soapbinding/
il-common/src/main/java/org/apache/ode/il/config/
Author: midon
Date: Tue Mar 3 19:35:09 2009
New Revision: 749709
URL: http://svn.apache.org/viewvc?rev=749709&view=rev
Log:
ODE-533: shared HTTP connection manager
Modified:
ode/trunk/.gitignore
ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
ode/trunk/axis2/src/main/java/org/apache/ode/axis2/Properties.java
ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapExternalService.java
ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
Modified: ode/trunk/.gitignore
URL: http://svn.apache.org/viewvc/ode/trunk/.gitignore?rev=749709&r1=749708&r2=749709&view=diff
==============================================================================
--- ode/trunk/.gitignore (original)
+++ ode/trunk/.gitignore Tue Mar 3 19:35:09 2009
@@ -8,3 +8,5 @@
*.ipr
*.iws
*.swp
+test-output
+
Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?rev=749709&r1=749708&r2=749709&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java Tue Mar 3 19:35:09 2009
@@ -49,6 +49,8 @@
import org.apache.commons.collections.map.MultiKeyMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
+import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
import org.apache.ode.axis2.deploy.DeploymentPoller;
import org.apache.ode.axis2.hooks.ODEAxisService;
import org.apache.ode.axis2.hooks.ODEMessageReceiver;
@@ -111,6 +113,7 @@
private MultiKeyMap _externalServices = new MultiKeyMap();
private BpelServerConnector _connector;
private ManagementService _mgtService;
+ private MultiThreadedHttpConnectionManager httpConnectionManager;
public void init(ServletConfig config, AxisConfiguration axisConf) throws ServletException {
init(config.getServletContext().getRealPath("/WEB-INF"), axisConf);
@@ -162,6 +165,8 @@
initProcessStore(eprContext);
__log.debug("Initializing BPEL server.");
initBpelServer(eprContext);
+ __log.debug("Initializing HTTP connection manager");
+ initHttpConnectionManager();
// Register BPEL event listeners configured in axis2.properties file.
registerEventListeners();
@@ -302,7 +307,14 @@
__log.error("Unable to cleanup temp files.", t);
}
}
-
+ if(httpConnectionManager!=null){
+ __log.debug("shutting down HTTP connection manager.");
+ try {
+ httpConnectionManager.shutdown();
+ } catch(Throwable t) {
+ __log.error("Unable to shut down HTTP connection manager.", t);
+ }
+ }
try {
__log.debug("cleaning up temporary files.");
TempFileManager.cleanup();
@@ -355,10 +367,10 @@
try {
if (WsdlUtils.useHTTPBinding(def, serviceName, portName)) {
if(__log.isDebugEnabled())__log.debug("Creating HTTP-bound external service " + serviceName);
- extService = new HttpExternalService(pconf, serviceName, portName, _server);
+ extService = new HttpExternalService(pconf, serviceName, portName, _server, httpConnectionManager);
} else if (WsdlUtils.useSOAPBinding(def, serviceName, portName)) {
if(__log.isDebugEnabled())__log.debug("Creating SOAP-bound external service " + serviceName);
- extService = new SoapExternalService(def, serviceName, portName, _axisConfig, pconf);
+ extService = new SoapExternalService(def, serviceName, portName, _axisConfig, pconf, httpConnectionManager);
}
} catch (Exception ex) {
__log.error("Could not create external service.", ex);
@@ -500,6 +512,24 @@
_server.init();
}
+ private void initHttpConnectionManager() throws ServletException {
+ httpConnectionManager = new MultiThreadedHttpConnectionManager();
+ // settings may be overridden from ode-axis2.properties using the same properties as HttpClient
+ int max_per_host = Integer.parseInt(_odeConfig.getProperty(HttpConnectionManagerParams.MAX_HOST_CONNECTIONS, "2"));
+ int max_total = Integer.parseInt(_odeConfig.getProperty(HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS, "20"));
+ if(__log.isDebugEnabled()) {
+ __log.debug(HttpConnectionManagerParams.MAX_HOST_CONNECTIONS+"="+max_per_host);
+ __log.debug(HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS+"="+max_total);
+ }
+ if(max_per_host<1 || max_total <1){
+ String errmsg = HttpConnectionManagerParams.MAX_HOST_CONNECTIONS+" and "+ HttpConnectionManagerParams.MAX_TOTAL_CONNECTIONS+" must be positive integers!";
+ __log.error(errmsg);
+ throw new ServletException(errmsg);
+ }
+ httpConnectionManager.getParams().setDefaultMaxConnectionsPerHost(max_per_host);
+ httpConnectionManager.getParams().setMaxTotalConnections(max_total);
+ }
+
public ProcessStoreImpl getProcessStore() {
return _store;
}
Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/Properties.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/Properties.java?rev=749709&r1=749708&r2=749709&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/Properties.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/Properties.java Tue Mar 3 19:35:09 2009
@@ -20,6 +20,7 @@
package org.apache.ode.axis2;
import org.apache.axis2.Constants;
+import org.apache.axis2.util.JavaUtils;
import org.apache.axis2.client.Options;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.axis2.transport.http.HttpTransportProperties;
@@ -199,6 +200,11 @@
if (headers != null && !headers.isEmpty()) options.setProperty(HTTPConstants.HTTP_HEADERS, headers);
if (proxy != null) options.setProperty(HTTPConstants.PROXY, proxy);
+ // Set properties that canNOT be overridden
+ if(JavaUtils.isTrueExplicitly(options.getProperty(HTTPConstants.REUSE_HTTP_CLIENT))){
+ if (log.isWarnEnabled()) log.warn("This property cannot be overidden, and must always be false. "+ HTTPConstants.REUSE_HTTP_CLIENT);
+ }
+ options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, "false");
return options;
}
}
Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java?rev=749709&r1=749708&r2=749709&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java Tue Mar 3 19:35:09 2009
@@ -79,7 +79,7 @@
protected Binding portBinding;
- public HttpExternalService(ProcessConf pconf, QName serviceName, String portName, BpelServer server) {
+ public HttpExternalService(ProcessConf pconf, QName serviceName, String portName, BpelServer server, MultiThreadedHttpConnectionManager connManager) {
if (log.isDebugEnabled())
log.debug("new HTTP External service, service name=[" + serviceName + "]; port name=[" + portName + "]");
this.portName = portName;
@@ -112,7 +112,7 @@
endpointReference = EndpointFactory.convertToWSA(ODEService.createServiceRef(eprElmt));
httpMethodConverter = new HttpMethodConverter(definition, serviceName, portName);
- connections = new MultiThreadedHttpConnectionManager();
+ connections = connManager;
}
public String getPortName() {
Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java?rev=749709&r1=749708&r2=749709&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java Tue Mar 3 19:35:09 2009
@@ -105,7 +105,7 @@
&& !"digest".equalsIgnoreCase(scheme)) {
throw new IllegalArgumentException("Unknown Authentication scheme: [" + scheme + "] Accepted values are: Basic, Digest, Server-Decides");
} else {
- if(log.isDebugEnabled()) log.debug("credentials provided");
+ if(log.isDebugEnabled()) log.debug("credentials provided: scheme="+scheme+" user="+username+" password=********");
client.getState().setCredentials(
new AuthScope(targetURI.getHost(), targetURI.getPort(), AuthScope.ANY_REALM, scheme),
new UsernamePasswordCredentials(username, password));
Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapExternalService.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapExternalService.java?rev=749709&r1=749708&r2=749709&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapExternalService.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapExternalService.java Tue Mar 3 19:35:09 2009
@@ -21,6 +21,7 @@
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.OperationClient;
import org.apache.axis2.client.Options;
@@ -36,6 +37,7 @@
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.neethi.PolicyEngine;
import org.apache.neethi.Policy;
import org.apache.ode.axis2.ExternalService;
@@ -97,7 +99,7 @@
private ProcessConf _pconf;
public SoapExternalService(Definition definition, QName serviceName, String portName,
- AxisConfiguration axisConfig, ProcessConf pconf) throws AxisFault {
+ AxisConfiguration axisConfig, ProcessConf pconf, MultiThreadedHttpConnectionManager connManager) throws AxisFault {
_definition = definition;
_serviceName = serviceName;
_portName = portName;
@@ -109,6 +111,9 @@
_axisServiceWatchDog = WatchDog.watchFile(fileToWatch, new ServiceFileObserver(fileToWatch));
_axisOptionsWatchDog = new WatchDog<Map, OptionsObserver>(new EndpointPropertiesMutable(), new OptionsObserver());
_configContext = new ConfigurationContext(_axisConfig);
+ _configContext.setProperty(HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER, connManager);
+ // make sure the client is not shared, see also org.apache.ode.axis2.Properties.Axis2
+ _configContext.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, "false");
// initial endpoint reference
Element eprElmt = ODEService.genEPRfromWSDL(_definition, serviceName, portName);
@@ -125,7 +130,7 @@
// Override options are passed to the axis MessageContext so we can
// retrieve them in our session out changeHandler.
- MessageContext mctx = new MessageContext();
+ final MessageContext mctx = new MessageContext();
/* make the given options the parent so it becomes the defaults of the MessageContexgt. That allows the user to override
* specific options on a given message context and not affect the overall options.
*/
@@ -157,7 +162,11 @@
final Operation operation = odeMex.getOperation();
try {
- operationClient.execute(true);
+ try {
+ operationClient.execute(true);
+ } finally {
+ mctx.getTransportOut().getSender().cleanup(mctx);
+ }
MessageContext response = operationClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
MessageContext flt = operationClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_FAULT_VALUE);
if (response != null && __log.isDebugEnabled())
Modified: ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
URL: http://svn.apache.org/viewvc/ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java?rev=749709&r1=749708&r2=749709&view=diff
==============================================================================
--- ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java (original)
+++ ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java Tue Mar 3 19:35:09 2009
@@ -249,11 +249,11 @@
}
- protected String getProperty(String pname) {
+ public String getProperty(String pname) {
return _props.getProperty(_prefix + pname);
}
- protected String getProperty(String key, String dflt) {
+ public String getProperty(String key, String dflt) {
return _props.getProperty(_prefix + key, dflt);
}