remm 2003/09/22 12:32:04 Modified: catalina/src/share/org/apache/catalina/core StandardContext.java Log: - Save the config file to the config base in situations where the context would not be persistent after a restart. - I don't think I broke anything. Let me know ... Revision Changes Path 1.94 +102 -17 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java Index: StandardContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java,v retrieving revision 1.93 retrieving revision 1.94 diff -u -r1.93 -r1.94 --- StandardContext.java 14 Sep 2003 12:19:42 -0000 1.93 +++ StandardContext.java 22 Sep 2003 19:32:04 -0000 1.94 @@ -64,6 +64,7 @@ import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -108,6 +109,8 @@ import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleListener; import org.apache.catalina.Loader; +import org.apache.catalina.Server; +import org.apache.catalina.ServerFactory; import org.apache.catalina.Wrapper; import org.apache.catalina.deploy.ApplicationParameter; import org.apache.catalina.deploy.ContextEjb; @@ -3903,16 +3906,43 @@ // Set config file name File configBase = getConfigBase(); - if ((getConfigFile() == null) && (configBase != null)) { - String name = getName(); - if (name.equals("")) { - name = "ROOT"; - } - if (name.startsWith("/")) { - name = name.substring(1); + if (configBase != null) { + if (getConfigFile() == null) { + File file = new File(configBase, getDefaultConfigFile()); + setConfigFile(file.getPath()); + // If the docbase is outside the appBase, we should save our + // config + try { + File appBaseFile = new File(getAppBase()); + if (!appBaseFile.isAbsolute()) { + appBaseFile = new File(engineBase(), getAppBase()); + } + String appBase = appBaseFile.getCanonicalPath(); + String basePath = + (new File(getBasePath())).getCanonicalPath(); + if (!basePath.startsWith(appBase)) { + Server server = ServerFactory.getServer(); + ((StandardServer) server).storeContext(this); + } + } catch (Exception e) { + log.warn("Error storing config file", e); + } + } else { + try { + String canConfigFile = + (new File(getConfigFile())).getCanonicalPath(); + if (!canConfigFile.startsWith + (configBase.getCanonicalPath())) { + File file = + new File(configBase, getDefaultConfigFile()); + if (copy(new File(canConfigFile), file)) { + setConfigFile(file.getPath()); + } + } + } catch (Exception e) { + log.warn("Error setting config file", e); + } } - File file = new File(configBase, name.replace('/', '_') + ".xml"); - setConfigFile(file.getPath()); } // Add missing components as necessary @@ -4558,20 +4588,20 @@ break; container = container.getParent(); } - if (container == null) { - docBase = (new File(engineBase(), getDocBase())).getPath(); - } else { - File file = new File(getDocBase()); - if (!file.isAbsolute()) { + File file = new File(getDocBase()); + if (!file.isAbsolute()) { + if (container == null) { + docBase = (new File(engineBase(), getDocBase())).getPath(); + } else { // Use the "appBase" property of this container String appBase = ((Host) container).getAppBase(); file = new File(appBase); if (!file.isAbsolute()) file = new File(engineBase(), appBase); docBase = (new File(file, getDocBase())).getPath(); - } else { - docBase = file.getPath(); } + } else { + docBase = file.getPath(); } return docBase; } @@ -4619,6 +4649,61 @@ } configBase.mkdirs(); return configBase; + } + + + /** + * Given a context path, get the config file name. + */ + protected String getDefaultConfigFile() { + String basename = null; + String path = getPath(); + if (path.equals("")) { + basename = "ROOT"; + } else { + basename = path.substring(1).replace('/', '_'); + } + return (basename + ".xml"); + } + + + /** + * Copy a file. + */ + private boolean copy(File src, File dest) { + FileInputStream is = null; + FileOutputStream os = null; + try { + is = new FileInputStream(src); + os = new FileOutputStream(dest); + byte[] buf = new byte[4096]; + while (true) { + int len = is.read(buf); + if (len < 0) + break; + os.write(buf, 0, len); + } + is.close(); + os.close(); + } catch (IOException e) { + return false; + } finally { + try { + if (is != null) { + is.close(); + } + } catch (Exception e) { + // Ignore + } + try { + if (os != null) { + os.close(); + } + } catch (Exception e) { + // Ignore + } + } + return true; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]