You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2011/06/15 15:51:03 UTC
svn commit: r1136043 - in /tomcat/trunk:
java/org/apache/catalina/startup/Bootstrap.java webapps/docs/changelog.xml
Author: kkolinko
Date: Wed Jun 15 13:51:03 2011
New Revision: 1136043
URL: http://svn.apache.org/viewvc?rev=1136043&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50677
Allow ANT style variables in the common.loader and other *.loader properties in conf/catalina.properties
I do not implement the substitution for any property as suggested by BZ 50677,
but only for the class loader ones. I think this is sufficient for the use case
and does not break backwards compatibility.
Most of the code is copied from ClassLoaderLogManager.replace().
Modified:
tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java?rev=1136043&r1=1136042&r2=1136043&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/Bootstrap.java Wed Jun 15 13:51:03 2011
@@ -59,12 +59,6 @@ public final class Bootstrap {
private static final Log log = LogFactory.getLog(Bootstrap.class);
- // -------------------------------------------------------------- Constants
-
-
- protected static final String CATALINA_HOME_TOKEN = "${" + Globals.CATALINA_HOME_PROP + "}";
- protected static final String CATALINA_BASE_TOKEN = "${" + Globals.CATALINA_BASE_PROP + "}";
-
// ------------------------------------------------------- Static Variables
@@ -116,38 +110,16 @@ public final class Bootstrap {
if ((value == null) || (value.equals("")))
return parent;
+ value = replace(value);
+
List<Repository> repositories = new ArrayList<Repository>();
- int i;
StringTokenizer tokenizer = new StringTokenizer(value, ",");
while (tokenizer.hasMoreElements()) {
- String repository = tokenizer.nextToken();
-
- // Local repository
- boolean replace = false;
- String before = repository;
- while ((i=repository.indexOf(CATALINA_HOME_TOKEN))>=0) {
- replace=true;
- if (i>0) {
- repository = repository.substring(0,i) + getCatalinaHome()
- + repository.substring(i+CATALINA_HOME_TOKEN.length());
- } else {
- repository = getCatalinaHome()
- + repository.substring(CATALINA_HOME_TOKEN.length());
- }
- }
- while ((i=repository.indexOf(CATALINA_BASE_TOKEN))>=0) {
- replace=true;
- if (i>0) {
- repository = repository.substring(0,i) + getCatalinaBase()
- + repository.substring(i+CATALINA_BASE_TOKEN.length());
- } else {
- repository = getCatalinaBase()
- + repository.substring(CATALINA_BASE_TOKEN.length());
- }
+ String repository = tokenizer.nextToken().trim();
+ if (repository.length() == 0) {
+ continue;
}
- if (replace && log.isDebugEnabled())
- log.debug("Expanded " + before + " to " + repository);
// Check for a JAR URL repository
try {
@@ -159,6 +131,7 @@ public final class Bootstrap {
// Ignore
}
+ // Local repository
if (repository.endsWith("*.jar")) {
repository = repository.substring
(0, repository.length() - "*.jar".length());
@@ -193,6 +166,51 @@ public final class Bootstrap {
}
+ /**
+ * System property replacement in the given string.
+ *
+ * @param str The original string
+ * @return the modified string
+ */
+ protected String replace(String str) {
+ // Implementation is copied from ClassLoaderLogManager.replace(),
+ // but added special processing for catalina.home and catalina.base.
+ String result = str;
+ int pos_start = str.indexOf("${");
+ if (pos_start >= 0) {
+ StringBuilder builder = new StringBuilder();
+ int pos_end = -1;
+ while (pos_start >= 0) {
+ builder.append(str, pos_end + 1, pos_start);
+ pos_end = str.indexOf('}', pos_start + 2);
+ if (pos_end < 0) {
+ pos_end = pos_start - 1;
+ break;
+ }
+ String propName = str.substring(pos_start + 2, pos_end);
+ String replacement;
+ if (propName.length() == 0) {
+ replacement = null;
+ } else if (Globals.CATALINA_HOME_PROP.equals(propName)) {
+ replacement = getCatalinaHome();
+ } else if (Globals.CATALINA_BASE_PROP.equals(propName)) {
+ replacement = getCatalinaBase();
+ } else {
+ replacement = System.getProperty(propName);
+ }
+ if (replacement != null) {
+ builder.append(replacement);
+ } else {
+ builder.append(str, pos_start, pos_end + 1);
+ }
+ pos_start = str.indexOf("${", pos_end + 1);
+ }
+ builder.append(str, pos_end + 1, str.length());
+ result = builder.toString();
+ }
+ return result;
+ }
+
/**
* Initialize daemon.
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1136043&r1=1136042&r2=1136043&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Jun 15 13:51:03 2011
@@ -45,6 +45,11 @@
<section name="Tomcat 7.0.17 (markt)">
<subsection name="Catalina">
<changelog>
+ <add>
+ <bug>50677</bug>: Allow system property variables to be used in the
+ values of "common.loader" and other "*.loader" properties in the
+ <code>catalina.properties</code> file. (kkolinko)
+ </add>
<fix>
<bug>51376</bug>: When adding a Servlet via
ServletContext#addServlet(String, Servlet), the Servlet was not
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org