You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kf...@apache.org on 2012/05/22 11:27:00 UTC

svn commit: r1341370 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/startup/ContextConfig.java webapps/docs/changelog.xml

Author: kfujino
Date: Tue May 22 09:27:00 2012
New Revision: 1341370

URL: http://svn.apache.org/viewvc?rev=1341370&view=rev
Log:
Enable host's xmlBase attribute in ContextConfig.

Modified:
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1341370&r1=1341369&r2=1341370&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java Tue May 22 09:27:00 2012
@@ -559,9 +559,8 @@ public class ContextConfig implements Li
                             "contextConfig.badUrl", defaultContextFile), e);
                 }
             }
-            
-            File hostContextFile = new File(getConfigBase(),
-                    getHostConfigPath(Constants.HostContextXml));
+
+            File hostContextFile = new File(getHostConfigBase(), Constants.HostContextXml);
             if (hostContextFile.exists()) {
                 try {
                     URL hostContextUrl = hostContextFile.toURI().toURL();
@@ -1152,30 +1151,43 @@ public class ContextConfig implements Li
         return configBase;
     }  
 
-    
-    protected String getHostConfigPath(String resourceName) {
-        StringBuilder result = new StringBuilder();
+    protected File getHostConfigBase() {
+        File file = null;
         Container container = context;
-        Container host = null;
-        Container engine = null;
+        Host host = null;
+        Engine engine = null;
         while (container != null) {
-            if (container instanceof Host)
-                host = container;
-            if (container instanceof Engine)
-                engine = container;
+            if (container instanceof Host) {
+                host = (Host)container;
+            }
+            if (container instanceof Engine) {
+                engine = (Engine)container;
+            }
             container = container.getParent();
         }
-        if (engine != null) {
-            result.append(engine.getName()).append('/');
+        if (host != null && host.getXmlBase()!=null) {
+            String xmlBase = host.getXmlBase();
+            file = new File(xmlBase);
+            if (!file.isAbsolute())
+                file = new File(new File(System.getProperty(Globals.CATALINA_BASE_PROP)),
+                        xmlBase);
+        } else {
+            StringBuilder result = new StringBuilder();
+            if (engine != null) {
+                result.append(engine.getName()).append('/');
+            }
+            if (host != null) {
+                result.append(host.getName()).append('/');
+            }
+            file = new File (getConfigBase(), result.toString());
         }
-        if (host != null) {
-            result.append(host.getName()).append('/');
+        try {
+            return file.getCanonicalFile();
+        } catch (IOException e) {
+            return file;
         }
-        result.append(resourceName);
-        return result.toString();
     }
 
-
     /**
      * Scan the web.xml files that apply to the web application and merge them
      * using the rules defined in the spec. For the global web.xml files,
@@ -1686,22 +1698,15 @@ public class ContextConfig implements Li
      * it.
      */
     protected InputSource getHostWebXmlSource() {
-        String resourceName = getHostConfigPath(Constants.HostWebXml);
-        
-        // In an embedded environment, configBase might not be set
-        File configBase = getConfigBase();
-        if (configBase == null)
-            return null;
-        
         String basePath = null;
         try {
-            basePath = configBase.getCanonicalPath();
+            basePath = getHostConfigBase().getCanonicalPath();
         } catch (IOException e) {
             log.error(sm.getString("contextConfig.baseError"), e);
             return null;
         }
 
-        return getWebXmlSource(resourceName, basePath);
+        return getWebXmlSource(Constants.HostWebXml, basePath);
     }
     
     /**

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1341370&r1=1341369&r2=1341370&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue May 22 09:27:00 2012
@@ -112,6 +112,9 @@
         <bug>53067</bug>: Ensure the WebSocket Servlet continues to work when
         requests are wrapped. (markt)
       </fix>
+      <fix>
+        Enable host's xmlBase attribute in ContextConfig. (kfujino)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r1341370 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/startup/ContextConfig.java webapps/docs/changelog.xml

Posted by Konstantin Kolinko <kn...@gmail.com>.
2012/5/28 Keiichi Fujino <kf...@apache.org>:
> Thanks for the review.
> I fixed it.
>
> I implemented the calculation method of host's default config path to
> Host(StanderdHost).
> just like a Host#getAppBaseFile().
> This fix is applied only to trunk.
>
> If there is a different implementation idea, feel free to re-fix.
>

Re: r1343153, r1343155

Looks good. Thank you.

Best regards,
Konstantin Kolinko

> 2012/5/25 Konstantin Kolinko <kn...@gmail.com>:
>> 2012/5/22  <kf...@apache.org>:
>>> Author: kfujino
>>> Date: Tue May 22 09:27:00 2012
>>> New Revision: 1341370
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1341370&view=rev
>>> Log:
>>> Enable host's xmlBase attribute in ContextConfig.
>>>
>>> Modified:
>>>    tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
>>>    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
>>>
>>>(...)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r1341370 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/startup/ContextConfig.java webapps/docs/changelog.xml

Posted by Keiichi Fujino <kf...@apache.org>.
Thanks for the review.
I fixed it.

I implemented the calculation method of host's default config path to
Host(StanderdHost).
just like a Host#getAppBaseFile().
This fix is applied only to trunk.

If there is a different implementation idea, feel free to re-fix.

2012/5/25 Konstantin Kolinko <kn...@gmail.com>:
> 2012/5/22  <kf...@apache.org>:
>> Author: kfujino
>> Date: Tue May 22 09:27:00 2012
>> New Revision: 1341370
>>
>> URL: http://svn.apache.org/viewvc?rev=1341370&view=rev
>> Log:
>> Enable host's xmlBase attribute in ContextConfig.
>>
>> Modified:
>>    tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
>>    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
>>
>> Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
>> URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1341370&r1=1341369&r2=1341370&view=diff
>> ==============================================================================
>> --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
>> +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java Tue May 22 09:27:00 2012
>> @@ -559,9 +559,8 @@ public class ContextConfig implements Li
>>                             "contextConfig.badUrl", defaultContextFile), e);
>>                 }
>>             }
>> -
>> -            File hostContextFile = new File(getConfigBase(),
>> -                    getHostConfigPath(Constants.HostContextXml));
>> +
>> +            File hostContextFile = new File(getHostConfigBase(), Constants.HostContextXml);
>>             if (hostContextFile.exists()) {
>>                 try {
>>                     URL hostContextUrl = hostContextFile.toURI().toURL();
>> @@ -1152,30 +1151,43 @@ public class ContextConfig implements Li
>>         return configBase;
>>     }
>>
>> -
>> -    protected String getHostConfigPath(String resourceName) {
>> -        StringBuilder result = new StringBuilder();
>> +    protected File getHostConfigBase() {
>> +        File file = null;
>>         Container container = context;
>> -        Container host = null;
>> -        Container engine = null;
>> +        Host host = null;
>> +        Engine engine = null;
>>         while (container != null) {
>> -            if (container instanceof Host)
>> -                host = container;
>> -            if (container instanceof Engine)
>> -                engine = container;
>> +            if (container instanceof Host) {
>> +                host = (Host)container;
>> +            }
>> +            if (container instanceof Engine) {
>> +                engine = (Engine)container;
>> +            }
>>             container = container.getParent();
>>         }
>> -        if (engine != null) {
>> -            result.append(engine.getName()).append('/');
>> +        if (host != null && host.getXmlBase()!=null) {
>> +            String xmlBase = host.getXmlBase();
>> +            file = new File(xmlBase);
>> +            if (!file.isAbsolute())
>> +                file = new File(new File(System.getProperty(Globals.CATALINA_BASE_PROP)),
>> +                        xmlBase);
>
> BTW, ContextConfig could call its own ContextConfig.getBaseDir() here
> instead of direct look up of the system property.
>
> The same in 3 other its methods (antiLocking(), fixDocBase(), getConfigBase()).
>
>
>> +        } else {
>> +            StringBuilder result = new StringBuilder();
>> +            if (engine != null) {
>> +                result.append(engine.getName()).append('/');
>> +            }
>> +            if (host != null) {
>> +                result.append(host.getName()).append('/');
>> +            }
>> +            file = new File (getConfigBase(), result.toString());
>>         }
>> -        if (host != null) {
>> -            result.append(host.getName()).append('/');
>> +        try {
>> +            return file.getCanonicalFile();
>> +        } catch (IOException e) {
>> +            return file;
>>         }
>> -        result.append(resourceName);
>> -        return result.toString();
>>     }
>>
>> -
>>     /**
>>      * Scan the web.xml files that apply to the web application and merge them
>>      * using the rules defined in the spec. For the global web.xml files,
>> @@ -1686,22 +1698,15 @@ public class ContextConfig implements Li
>>      * it.
>>      */
>>     protected InputSource getHostWebXmlSource() {
>> -        String resourceName = getHostConfigPath(Constants.HostWebXml);
>> -
>> -        // In an embedded environment, configBase might not be set
>> -        File configBase = getConfigBase();
>> -        if (configBase == null)
>> -            return null;
>> -
>
> The above "return null" case disappears without replacement.
>
>>         String basePath = null;
>>         try {
>> -            basePath = configBase.getCanonicalPath();
>> +            basePath = getHostConfigBase().getCanonicalPath();
>
> getCanonicalFile() is already called inside of getHostConfigBase(), so
> there is double work here.
>
>>         } catch (IOException e) {
>>             log.error(sm.getString("contextConfig.baseError"), e);
>>             return null;
>>         }
>>
>> -        return getWebXmlSource(resourceName, basePath);
>> +        return getWebXmlSource(Constants.HostWebXml, basePath);
>>     }
>>
>>     /**
>>
>
> There is code duplication between
> HostConfig.configBase() and this new method ContextConfig.getHostConfigBase()
>
> I wonder whether it could be simplified. If HostConfig reference
> cannot be reached from ContextConfig,  it could be a static method
> inside of HostConfig to perform the calculation. Calculation of host's
> default config path belongs to the host.
>
> Best regards,
> Konstantin Kolinko
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>

-- 
Keiichi.Fujino

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r1341370 - in /tomcat/tc7.0.x/trunk: java/org/apache/catalina/startup/ContextConfig.java webapps/docs/changelog.xml

Posted by Konstantin Kolinko <kn...@gmail.com>.
2012/5/22  <kf...@apache.org>:
> Author: kfujino
> Date: Tue May 22 09:27:00 2012
> New Revision: 1341370
>
> URL: http://svn.apache.org/viewvc?rev=1341370&view=rev
> Log:
> Enable host's xmlBase attribute in ContextConfig.
>
> Modified:
>    tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
>    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
>
> Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
> URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1341370&r1=1341369&r2=1341370&view=diff
> ==============================================================================
> --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
> +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java Tue May 22 09:27:00 2012
> @@ -559,9 +559,8 @@ public class ContextConfig implements Li
>                             "contextConfig.badUrl", defaultContextFile), e);
>                 }
>             }
> -
> -            File hostContextFile = new File(getConfigBase(),
> -                    getHostConfigPath(Constants.HostContextXml));
> +
> +            File hostContextFile = new File(getHostConfigBase(), Constants.HostContextXml);
>             if (hostContextFile.exists()) {
>                 try {
>                     URL hostContextUrl = hostContextFile.toURI().toURL();
> @@ -1152,30 +1151,43 @@ public class ContextConfig implements Li
>         return configBase;
>     }
>
> -
> -    protected String getHostConfigPath(String resourceName) {
> -        StringBuilder result = new StringBuilder();
> +    protected File getHostConfigBase() {
> +        File file = null;
>         Container container = context;
> -        Container host = null;
> -        Container engine = null;
> +        Host host = null;
> +        Engine engine = null;
>         while (container != null) {
> -            if (container instanceof Host)
> -                host = container;
> -            if (container instanceof Engine)
> -                engine = container;
> +            if (container instanceof Host) {
> +                host = (Host)container;
> +            }
> +            if (container instanceof Engine) {
> +                engine = (Engine)container;
> +            }
>             container = container.getParent();
>         }
> -        if (engine != null) {
> -            result.append(engine.getName()).append('/');
> +        if (host != null && host.getXmlBase()!=null) {
> +            String xmlBase = host.getXmlBase();
> +            file = new File(xmlBase);
> +            if (!file.isAbsolute())
> +                file = new File(new File(System.getProperty(Globals.CATALINA_BASE_PROP)),
> +                        xmlBase);

BTW, ContextConfig could call its own ContextConfig.getBaseDir() here
instead of direct look up of the system property.

The same in 3 other its methods (antiLocking(), fixDocBase(), getConfigBase()).


> +        } else {
> +            StringBuilder result = new StringBuilder();
> +            if (engine != null) {
> +                result.append(engine.getName()).append('/');
> +            }
> +            if (host != null) {
> +                result.append(host.getName()).append('/');
> +            }
> +            file = new File (getConfigBase(), result.toString());
>         }
> -        if (host != null) {
> -            result.append(host.getName()).append('/');
> +        try {
> +            return file.getCanonicalFile();
> +        } catch (IOException e) {
> +            return file;
>         }
> -        result.append(resourceName);
> -        return result.toString();
>     }
>
> -
>     /**
>      * Scan the web.xml files that apply to the web application and merge them
>      * using the rules defined in the spec. For the global web.xml files,
> @@ -1686,22 +1698,15 @@ public class ContextConfig implements Li
>      * it.
>      */
>     protected InputSource getHostWebXmlSource() {
> -        String resourceName = getHostConfigPath(Constants.HostWebXml);
> -
> -        // In an embedded environment, configBase might not be set
> -        File configBase = getConfigBase();
> -        if (configBase == null)
> -            return null;
> -

The above "return null" case disappears without replacement.

>         String basePath = null;
>         try {
> -            basePath = configBase.getCanonicalPath();
> +            basePath = getHostConfigBase().getCanonicalPath();

getCanonicalFile() is already called inside of getHostConfigBase(), so
there is double work here.

>         } catch (IOException e) {
>             log.error(sm.getString("contextConfig.baseError"), e);
>             return null;
>         }
>
> -        return getWebXmlSource(resourceName, basePath);
> +        return getWebXmlSource(Constants.HostWebXml, basePath);
>     }
>
>     /**
>

There is code duplication between
HostConfig.configBase() and this new method ContextConfig.getHostConfigBase()

I wonder whether it could be simplified. If HostConfig reference
cannot be reached from ContextConfig,  it could be a static method
inside of HostConfig to perform the calculation. Calculation of host's
default config path belongs to the host.

Best regards,
Konstantin Kolinko

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org