You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by am...@apache.org on 2002/08/02 03:37:43 UTC
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core StandardContext.java StandardHostDeployer.java StandardServer.java
amyroh 2002/08/01 18:37:43
Modified: catalina/src/share/org/apache/catalina Context.java
catalina/src/share/org/apache/catalina/core
StandardContext.java StandardHostDeployer.java
StandardServer.java
Log:
Add install method where you can specify the configuration file to save the
Context information.
Revision Changes Path
1.2 +20 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Context.java
Index: Context.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Context.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Context.java 18 Jul 2002 16:47:37 -0000 1.1
+++ Context.java 2 Aug 2002 01:37:42 -0000 1.2
@@ -166,6 +166,20 @@
/**
+ * Return the path to a file to save this Context information.
+ */
+ public String getConfigFile();
+
+
+ /**
+ * Set the path to a file to save this Context information.
+ *
+ * @param configFile The path to a file to save this Context information.
+ */
+ public void setConfigFile(String configFile);
+
+
+ /**
* Return the "correctly configured" flag for this Context.
*/
public boolean getConfigured();
@@ -275,7 +289,7 @@
/**
* Set the naming resources for this web application.
- *
+ *
* @param namingResources The new naming resources
*/
public void setNamingResources(NamingResources namingResources);
@@ -347,7 +361,7 @@
/**
* Set the privileged flag for this web application.
- *
+ *
* @param privileged The new privileged flag
*/
public void setPrivileged(boolean privileged);
1.2 +39 -13 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StandardContext.java 18 Jul 2002 16:48:09 -0000 1.1
+++ StandardContext.java 2 Aug 2002 01:37:43 -0000 1.2
@@ -214,6 +214,12 @@
/**
+ * The path to a file to save this Context information.
+ */
+ private String configFile = null;
+
+
+ /**
* The "correctly configured" flag for this Context.
*/
private boolean configured = false;
@@ -378,7 +384,7 @@
* Should the next call to <code>addWelcomeFile()</code> cause replacement
* of any existing welcome files? This will be set before processing the
* web application's deployment descriptor, so that application specified
- * choices <strong>replace</strong>, rather than append to, those defined
+ * choices <strong>replace</strong>, rather than append to, those defined
* in the global descriptor.
*/
private boolean replaceWelcomeFiles = false;
@@ -618,6 +624,26 @@
}
+ /**
+ * Return the path to a file to save this Context information.
+ */
+ public String getConfigFile() {
+
+ return (this.configFile);
+
+ }
+
+
+ /**
+ * Set the path to a file to save this Context information.
+ *
+ * @param configFile The path to a file to save this Context information.
+ */
+ public void setConfigFile(String configFile) {
+
+ this.configFile = configFile;
+ }
+
/**
* Return the "correctly configured" flag for this Context.
@@ -864,7 +890,7 @@
/**
* Set the naming resources for this web application.
- *
+ *
* @param namingResources The new naming resources
*/
public void setNamingResources(NamingResources namingResources) {
@@ -965,7 +991,7 @@
/**
* Set the privileged flag for this web application.
- *
+ *
* @param privileged The new privileged flag
*/
public void setPrivileged(boolean privileged) {
@@ -3342,9 +3368,9 @@
ok = false;
}
if (ok) {
- DirContext dirContext =
+ DirContext dirContext =
((ProxyDirContext) resources).getDirContext();
- if ((dirContext != null)
+ if ((dirContext != null)
&& (dirContext instanceof BaseDirContext)) {
((BaseDirContext) dirContext).allocate();
}
@@ -3436,7 +3462,7 @@
((Lifecycle) children[i]).start();
}
- // Start the Valves in our pipeline (including the basic),
+ // Start the Valves in our pipeline (including the basic),
// if any
if (pipeline instanceof Lifecycle)
((Lifecycle) pipeline).start();
@@ -3579,7 +3605,7 @@
if (resources instanceof Lifecycle) {
((Lifecycle) resources).stop();
} else if (resources instanceof ProxyDirContext) {
- DirContext dirContext =
+ DirContext dirContext =
((ProxyDirContext) resources).getDirContext();
if (dirContext != null) {
if (debug >= 1) {
@@ -3719,12 +3745,12 @@
/**
* Bind current thread, both for CL purposes and for JNDI ENC support
* during : startup, shutdown and realoading of the context.
- *
+ *
* @return the previous context class loader
*/
private ClassLoader bindThread() {
- ClassLoader oldContextClassLoader =
+ ClassLoader oldContextClassLoader =
Thread.currentThread().getContextClassLoader();
if (getResources() == null)
1.3 +92 -4 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardHostDeployer.java
Index: StandardHostDeployer.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardHostDeployer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StandardHostDeployer.java 1 Aug 2002 01:40:49 -0000 1.2
+++ StandardHostDeployer.java 2 Aug 2002 01:37:43 -0000 1.3
@@ -266,6 +266,94 @@
/**
+ * Install a new web application, whose web application archive is at the
+ * specified URL, into this container with the specified context path.
+ * A context path of "" (the empty string) should be used for the root
+ * application for this container. Otherwise, the context path must
+ * start with a slash.
+ * <p>
+ * If this application is successfully installed, a ContainerEvent of type
+ * <code>PRE_INSTALL_EVENT</code> will be sent to registered listeners
+ * before the associated Context is started, and a ContainerEvent of type
+ * <code>INSTALL_EVENT</code> will be sent to all registered listeners
+ * after the associated Context is started, with the newly created
+ * <code>Context</code> as an argument.
+ *
+ * @param contextPath The context path to which this application should
+ * be installed (must be unique)
+ * @param war A URL of type "jar:" that points to a WAR file, or type
+ * "file:" that points to an unpacked directory structure containing
+ * the web application to be installed
+ * @param configFile The path to a file to save the Context information.
+ * If configFile is null, the Context information is saved in server.xml;
+ * if it is NOT null, the Context information is saved in configFile.
+ *
+ * @exception IllegalArgumentException if the specified context path
+ * is malformed (it must be "" or start with a slash)
+ * @exception IllegalStateException if the specified context path
+ * is already attached to an existing web application
+ * @exception IOException if an input/output error was encountered
+ * during installation
+ */
+ public synchronized void install(String contextPath, URL war,
+ String configFile) throws IOException {
+
+ // Validate the format and state of our arguments
+ if (contextPath == null)
+ throw new IllegalArgumentException
+ (sm.getString("standardHost.pathRequired"));
+ if (!contextPath.equals("") && !contextPath.startsWith("/"))
+ throw new IllegalArgumentException
+ (sm.getString("standardHost.pathFormat", contextPath));
+ if (findDeployedApp(contextPath) != null)
+ throw new IllegalStateException
+ (sm.getString("standardHost.pathUsed", contextPath));
+ if (war == null)
+ throw new IllegalArgumentException
+ (sm.getString("standardHost.warRequired"));
+
+ // Calculate the document base for the new web application
+ host.log(sm.getString("standardHost.installing",
+ contextPath, war.toString()));
+ String url = war.toString();
+ String docBase = null;
+ if (url.startsWith("jar:")) {
+ url = url.substring(4, url.length() - 2);
+ }
+ if (url.startsWith("file://"))
+ docBase = url.substring(7);
+ else if (url.startsWith("file:"))
+ docBase = url.substring(5);
+ else
+ throw new IllegalArgumentException
+ (sm.getString("standardHost.warURL", url));
+
+ // Install the new web application
+ try {
+ Class clazz = Class.forName(host.getContextClass());
+ Context context = (Context) clazz.newInstance();
+ context.setPath(contextPath);
+ context.setDocBase(docBase);
+ context.setConfigFile(configFile);
+ if (context instanceof Lifecycle) {
+ clazz = Class.forName(host.getConfigClass());
+ LifecycleListener listener =
+ (LifecycleListener) clazz.newInstance();
+ ((Lifecycle) context).addLifecycleListener(listener);
+ }
+ host.fireContainerEvent(PRE_INSTALL_EVENT, context);
+ host.addChild(context);
+ host.fireContainerEvent(INSTALL_EVENT, context);
+ } catch (Exception e) {
+ host.log(sm.getString("standardHost.installError", contextPath),
+ e);
+ throw new IOException(e.toString());
+ }
+
+ }
+
+
+ /**
* <p>Install a new web application, whose context configuration file
* (consisting of a <code><Context></code> element) and (optional)
* web application archive are at the specified URLs.</p>
1.2 +61 -19 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardServer.java
Index: StandardServer.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardServer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StandardServer.java 18 Jul 2002 16:48:11 -0000 1.1
+++ StandardServer.java 2 Aug 2002 01:37:43 -0000 1.2
@@ -203,7 +203,7 @@
/**
* ServerLifecycleListener classname.
*/
- private static String SERVER_LISTENER_CLASS_NAME =
+ private static String SERVER_LISTENER_CLASS_NAME =
"org.apache.catalina.mbeans.ServerLifecycleListener";
@@ -382,7 +382,7 @@
/**
* Set the global naming resources.
- *
+ *
* @param namingResources The new global naming resources
*/
public void setGlobalNamingResources
@@ -828,7 +828,7 @@
}
}
return(filtered.toString());
- }
+ }
/**
@@ -1078,6 +1078,33 @@
private void storeContext(PrintWriter writer, int indent,
Context context) throws Exception {
+ String configFile = context.getConfigFile();
+
+ if (configFile != null) {
+
+ File config = new File(configFile);
+ if (!config.isAbsolute()) {
+ config = new File(System.getProperty("catalina.base"),
+ configFile);
+ }
+
+ // Open an output writer for the new configuration file
+ writer = null;
+ try {
+ writer = new PrintWriter(new FileWriter(config));
+ } catch (IOException e) {
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (Throwable t) {
+ ;
+ }
+ }
+ throw (e);
+ }
+
+ }
+
// Store the beginning of this element
for (int i = 0; i < indent; i++) {
writer.print(' ');
@@ -1156,7 +1183,7 @@
storeRealm(writer, indent + 2, realm);
}
}
-
+
// Store nested <Resources> element
DirContext resources = context.getResources();
if (resources != null) {
@@ -1205,6 +1232,21 @@
}
writer.println("</Context>");
+ if (configFile != null) {
+
+ // Flush and close the output file
+ try {
+ writer.flush();
+ } catch (Exception e) {
+ throw (e);
+ }
+ try {
+ writer.close();
+ } catch (Exception e) {
+ throw (e);
+ }
+ }
+
}
@@ -1304,7 +1346,7 @@
}
}
*/
-
+
// Store nested <Resources> element
DirContext resources = dcontext.getResources();
if (resources != null) {
@@ -1474,7 +1516,7 @@
}
-
+
/**
* Store the specified Host properties.
*
@@ -1718,7 +1760,7 @@
private void storeNamingResources(PrintWriter writer, int indent,
NamingResources resources)
throws Exception {
-
+
// Store nested <Ejb> elements
ContextEjb[] ejbs = resources.findEjbs();
if (ejbs.length > 0) {
@@ -1731,7 +1773,7 @@
writer.println("/>");
}
}
-
+
// Store nested <Environment> elements
ContextEnvironment[] envs = resources.findEnvironments();
if (envs.length > 0) {
@@ -1744,7 +1786,7 @@
writer.println("/>");
}
}
-
+
// Store nested <LocalEjb> elements
ContextLocalEjb[] lejbs = resources.findLocalEjbs();
if (lejbs.length > 0) {
@@ -1757,7 +1799,7 @@
writer.println("/>");
}
}
-
+
// Store nested <Resource> elements
ContextResource[] dresources = resources.findResources();
for (int i = 0; i < dresources.length; i++) {
@@ -1844,11 +1886,11 @@
writer.print("<ResourceLink");
storeAttributes(writer, false, resourceLinks[i]);
writer.println("/>");
- }
+ }
}
-
-
+
+
/**
* Store the specified Realm properties.
*
@@ -1946,7 +1988,7 @@
}
writer.println("</GlobalNamingResources>");
}
-
+
// Store nested <Service> elements
Service services[] = server.findServices();
for (int i = 0; i < services.length; i++) {
@@ -2137,7 +2179,7 @@
/**
- * Get the lifecycle listeners associated with this lifecycle. If this
+ * Get the lifecycle listeners associated with this lifecycle. If this
* Lifecycle has no listeners registered, a zero-length array is returned.
*/
public LifecycleListener[] findLifecycleListeners() {
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>