Author: midon
Date: Tue Mar 3 02:18:25 2009
New Revision: 749508
URL: http://svn.apache.org/viewvc?rev=749508&view=rev
Log:
ODE-533: shared HTTP connection manager
Modified:
ode/branches/APACHE_ODE_1.X/.gitignore
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/Properties.java
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
Modified: ode/branches/APACHE_ODE_1.X/.gitignore
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/.gitignore?rev=749508&r1=749507&r2=749508&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.X/.gitignore (original)
+++ ode/branches/APACHE_ODE_1.X/.gitignore Tue Mar 3 02:18:25 2009
@@ -14,3 +14,4 @@
bin
target
reports
+test-output
Modified:
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?rev=749508&r1=749507&r2=749508&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
(original)
+++
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
Tue Mar 3 02:18:25 2009
@@ -26,6 +26,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;
@@ -125,6 +127,8 @@
private ManagementService _mgtService;
+ private MultiThreadedHttpConnectionManager httpConnectionManager;
+
public void init(ServletConfig config, AxisConfiguration axisConf) throws
ServletException {
init(config.getServletContext().getRealPath("/WEB-INF"), axisConf);
@@ -175,6 +179,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();
@@ -315,7 +321,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();
@@ -369,10 +382,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, _executorService, _scheduler, _server);
+ extService = new HttpExternalService(pconf, serviceName,
portName, _executorService, _scheduler, _server, httpConnectionManager);
} else if (WsdlUtils.useSOAPBinding(def, serviceName, portName)) {
if(__log.isDebugEnabled())__log.debug("Creating SOAP-bound
external service " + serviceName);
- extService = new SoapExternalService(pconf, serviceName,
portName, _executorService, _axisConfig, _scheduler, _server);
+ extService = new SoapExternalService(pconf, serviceName,
portName, _executorService, _axisConfig, _scheduler, _server,
httpConnectionManager);
}
} catch (Exception ex) {
__log.error("Could not create external service.", ex);
@@ -530,6 +543,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/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/Properties.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/Properties.java?rev=749508&r1=749507&r2=749508&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/Properties.java
(original)
+++
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/Properties.java
Tue Mar 3 02:18:25 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;
@@ -201,6 +202,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/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java?rev=749508&r1=749507&r2=749508&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
(original)
+++
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/SoapExternalService.java
Tue Mar 3 02:18:25 2009
@@ -32,9 +32,11 @@
import org.apache.axis2.description.OutOnlyAxisOperation;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.transport.jms.JMSConstants;
+import org.apache.axis2.transport.http.HTTPConstants;
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.Policy;
import org.apache.neethi.PolicyEngine;
import org.apache.ode.axis2.util.SoapMessageConverter;
@@ -100,7 +102,7 @@
private ProcessConf _pconf;
public SoapExternalService(ProcessConf pconf, QName serviceName, String
portName, ExecutorService executorService,
- AxisConfiguration axisConfig, Scheduler sched,
BpelServer server) throws AxisFault {
+ AxisConfiguration axisConfig, Scheduler sched,
BpelServer server, MultiThreadedHttpConnectionManager connManager) throws
AxisFault {
_definition = pconf.getDefinitionForService(serviceName);
_serviceName = serviceName;
_portName = portName;
@@ -115,6 +117,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);
@@ -131,7 +136,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.
*/
@@ -175,7 +180,12 @@
_executorService.submit(new Callable<Object>() {
public Object call() throws Exception {
try {
- operationClient.execute(true);
+ try {
+ operationClient.execute(true);
+ } finally {
+ // make sure the HTTP connection is
released to the pool!
+
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/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java?rev=749508&r1=749507&r2=749508&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
(original)
+++
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpExternalService.java
Tue Mar 3 02:18:25 2009
@@ -83,7 +83,9 @@
protected Binding portBinding;
- public HttpExternalService(ProcessConf pconf, QName serviceName, String
portName, ExecutorService executorService, Scheduler scheduler, BpelServer
server) {
+ public HttpExternalService(ProcessConf pconf, QName serviceName, String
portName,
+ ExecutorService executorService, Scheduler
scheduler, BpelServer server,
+ MultiThreadedHttpConnectionManager connManager)
{
if (log.isDebugEnabled())
log.debug("new HTTP External service, service name=[" +
serviceName + "]; port name=[" + portName + "]");
this.portName = portName;
@@ -117,7 +119,7 @@
endpointReference =
EndpointFactory.convertToWSA(ODEService.createServiceRef(eprElmt));
httpMethodConverter = new HttpMethodConverter(definition, serviceName,
portName);
- connections = new MultiThreadedHttpConnectionManager();
+ connections = connManager;
}
public String getPortName() {
Modified:
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java?rev=749508&r1=749507&r2=749508&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
(original)
+++
ode/branches/APACHE_ODE_1.X/axis2/src/main/java/org/apache/ode/axis2/httpbinding/HttpHelper.java
Tue Mar 3 02:18:25 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/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
URL:
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java?rev=749508&r1=749507&r2=749508&view=diff
==============================================================================
---
ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
(original)
+++
ode/branches/APACHE_ODE_1.X/bpel-epr/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
Tue Mar 3 02:18:25 2009
@@ -247,11 +247,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);
}