You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2006/11/28 12:31:05 UTC
svn commit: r480000 -
/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
Author: mturk
Date: Tue Nov 28 03:31:04 2006
New Revision: 480000
URL: http://svn.apache.org/viewvc?view=rev&rev=480000
Log:
Avoid initializing APR for each connector.
Also test the minimum version required.
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java?view=diff&rev=480000&r1=479999&r2=480000
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java Tue Nov 28 03:31:04 2006
@@ -5,9 +5,9 @@
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -65,7 +65,7 @@
public static final boolean RECYCLE_FACADES =
Boolean.valueOf(System.getProperty("org.apache.catalina.connector.RECYCLE_FACADES", "false")).booleanValue();
-
+
// ------------------------------------------------------------ Constructor
@@ -73,8 +73,8 @@
throws Exception {
this(null);
}
-
- public Connector(String protocol)
+
+ public Connector(String protocol)
throws Exception {
setProtocol(protocol);
// Instantiate protocol handler
@@ -87,8 +87,8 @@
("coyoteConnector.protocolHandlerInstantiationFailed", e));
}
}
-
-
+
+
// ----------------------------------------------------- Instance Variables
@@ -193,7 +193,7 @@
/**
- * Maximum size of a POST which will be automatically parsed by the
+ * Maximum size of a POST which will be automatically parsed by the
* container. 2MB by default.
*/
protected int maxPostSize = 2 * 1024 * 1024;
@@ -293,8 +293,8 @@
replacements.put("sslProtocol", "protocol");
replacements.put("sslProtocols", "protocols");
}
-
-
+
+
// ------------------------------------------------------------- Properties
@@ -309,7 +309,7 @@
return IntrospectionUtils.getProperty(protocolHandler, repl);
}
-
+
/**
* Set a configured property.
*/
@@ -321,7 +321,7 @@
IntrospectionUtils.setProperty(protocolHandler, repl, value);
}
-
+
/**
* Return a configured property.
*/
@@ -329,7 +329,7 @@
return getProperty(name);
}
-
+
/**
* Set a configured property.
*/
@@ -337,8 +337,8 @@
setProperty(name, String.valueOf(value));
}
-
- /**
+
+ /**
* remove a configured property.
*/
public void removeProperty(String name) {
@@ -346,7 +346,7 @@
//protocolHandler.removeAttribute(name);
}
-
+
/**
* Return the <code>Service</code> with which we are associated (if any).
*/
@@ -404,7 +404,7 @@
/**
* Return the input buffer size for this Connector.
- *
+ *
* @deprecated
*/
public int getBufferSize() {
@@ -420,7 +420,7 @@
public void setBufferSize(int bufferSize) {
}
-
+
/**
* Return the Container used for processing requests received by this
* Connector.
@@ -428,7 +428,7 @@
public Container getContainer() {
if( container==null ) {
// Lazy - maybe it was added later
- findContainer();
+ findContainer();
}
return (container);
@@ -529,7 +529,7 @@
* Set the maximum size of a POST which will be automatically
* parsed by the container.
*
- * @param maxPostSize The new maximum size in bytes of a POST which will
+ * @param maxPostSize The new maximum size in bytes of a POST which will
* be automatically parsed by the container
*/
public void setMaxPostSize(int maxPostSize) {
@@ -605,32 +605,67 @@
return getProtocolHandlerClassName();
}
+
+ // ---------------------------------------------- APR Version Constants
+ private static final int TCN_REQUIRED_MAJOR = 1;
+ private static final int TCN_REQUIRED_MINOR = 1;
+ private static final int TCN_REQUIRED_PATCH = 3;
+ private static boolean aprInitialized = false;
- /**
- * Set the Coyote protocol which will be used by the connector.
- *
- * @param protocol The Coyote protocol name
- */
- public void setProtocol(String protocol) {
-
- // Test APR support
- boolean apr = false;
+ // APR init support
+ private static synchronized void initializeAPR()
+ {
+ if (aprInitialized) {
+ return;
+ }
+ int major = 0;
+ int minor = 0;
+ int patch = 0;
try {
String methodName = "initialize";
Class paramTypes[] = new Class[1];
paramTypes[0] = String.class;
Object paramValues[] = new Object[1];
paramValues[0] = null;
- Method method = Class.forName("org.apache.tomcat.jni.Library")
- .getMethod(methodName, paramTypes);
+ Class clazz = Class.forName("org.apache.tomcat.jni.Library");
+ Method method = clazz.getMethod(methodName, paramTypes);
method.invoke(null, paramValues);
- apr = true;
+ major = clazz.getField("TCN_MAJOR_VERSION").getInt(null);
+ minor = clazz.getField("TCN_MINOR_VERSION").getInt(null);
+ patch = clazz.getField("TCN_PATCH_VERSION").getInt(null);
} catch (Throwable t) {
- // Ignore
+ return;
+ }
+ if ((major != TCN_REQUIRED_MAJOR) ||
+ (minor != TCN_REQUIRED_MINOR) ||
+ (patch < TCN_REQUIRED_PATCH)) {
+ try {
+ // Terminate the APR in case the version
+ // is below required.
+ String methodName = "terminate";
+ Method method = Class.forName("org.apache.tomcat.jni.Library")
+ .getMethod(methodName, (Class [])null);
+ method.invoke(null, (Object []) null);
+ } catch (Throwable t) {
+ // Ignore
+ }
+ return;
}
+ aprInitialized = true;
+ }
+
+ /**
+ * Set the Coyote protocol which will be used by the connector.
+ *
+ * @param protocol The Coyote protocol name
+ */
+ public void setProtocol(String protocol) {
+
+ // Test APR support
+ initializeAPR();
- if (apr) {
+ if (aprInitialized) {
if ("HTTP/1.1".equals(protocol)) {
setProtocolHandlerClassName
("org.apache.coyote.http11.Http11AprProtocol");
@@ -766,7 +801,7 @@
}
-
+
/**
* Return the scheme that will be assigned to requests received
* through this connector. Default value is "http".
@@ -970,7 +1005,7 @@
}
-
+
protected ObjectName createObjectName(String domain, String type)
throws MalformedObjectNameException {
String encodedAddr = null;
@@ -983,7 +1018,7 @@
+ getPort() + addSuffix);
return _oname;
}
-
+
/**
* Initialize this connector (create ServerSocket here!)
*/
@@ -1207,13 +1242,13 @@
log.error( "Unregistering - can't stop", t);
}
}
-
+
protected void findContainer() {
try {
// Register to the service
ObjectName parentName=new ObjectName( domain + ":" +
"type=Service");
-
+
if(log.isDebugEnabled())
log.debug("Adding to " + parentName );
if( mserver.isRegistered(parentName )) {
@@ -1231,10 +1266,10 @@
if(log.isDebugEnabled())
log.debug("Found engine " + obj + " " + obj.getClass());
container=(Container)obj;
-
+
// Internal initialize - we now have the Engine
initialize();
-
+
if(log.isDebugEnabled())
log.debug("Initialized");
// As a side effect we'll get the container field set
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org