costin 2003/03/25 09:56:01
Modified: catalina/src/share/org/apache/catalina/core
StandardContext.java
Log:
First impl of reloading. Right now I put it in destroy() - so you need
stop()/destroy()/init()/start().
Probably it can be in stop().
It needs some refactoring to deal with classes that extend StandardContext - probably
"recreateContext()" method that can be overriden.
Revision Changes Path
1.32 +67 -4
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.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- StandardContext.java 21 Mar 2003 07:34:39 -0000 1.31
+++ StandardContext.java 25 Mar 2003 17:55:59 -0000 1.32
@@ -497,6 +497,7 @@
*/
private boolean cachingAllowed = true;
+ private boolean lazy=true;
/**
* Non proxied resources.
@@ -876,6 +877,14 @@
}
+ // experimental
+ public boolean isLazy() {
+ return lazy;
+ }
+
+ public void setLazy(boolean lazy) {
+ this.lazy = lazy;
+ }
/**
* Return descriptive information about this Container implementation and
@@ -1969,7 +1978,7 @@
* will have been called, but no properties will have been set.
*/
public Wrapper createWrapper() {
-
+ //log.info( "Create wrapper" );
Wrapper wrapper = new StandardWrapper();
wrappers.add(wrapper);
@@ -3749,7 +3758,7 @@
* @exception LifecycleException if a startup error occurs
*/
public synchronized void start() throws LifecycleException {
-
+ //if (lazy ) return;
if (started) {
log.info(sm.getString("containerBase.alreadyStarted", logName()));
return;
@@ -4106,14 +4115,68 @@
// Reset application context
context = null;
+ wrappers = new ArrayList();
+
// Notify our interested LifecycleListeners
lifecycle.fireLifecycleEvent(AFTER_STOP_EVENT, null);
+
if (log.isDebugEnabled())
log.debug("Stopping complete");
-
}
+ /** Destroy needs to clean up the context completely.
+ *
+ * The problem is that undoing all the config in start() and restoring
+ * a 'fresh' state is impossible. After stop()/destroy()/init()/start()
+ * we should have the same state as if a fresh start was done - i.e
+ * read modified web.xml, etc. This can only be done by completely
+ * removing the context object and remapping a new one, or by cleaning
+ * up everything.
+ *
+ * XXX Should this be done in stop() ?
+ *
+ */
+ public void destroy() throws Exception {
+ super.destroy();
+
+
+ // Restore the original state ( pre reading web.xml in start )
+ // If you extend this - override this method and make sure to clean up
+ children=new HashMap();
+
+ StandardContext repl=new StandardContext();
+ // All configurable options
+ repl.setAltDDName(altDDName);
+ repl.setCachingAllowed(cachingAllowed);
+ repl.setCharsetMapperClass(mapperClass);
+ repl.setConfigFile(configFile);
+ repl.setCookies(cookies);
+ repl.setCrossContext(crossContext);
+ repl.setDefaultWebXml(defaultWebXml);
+ //repl.setDistributable(distributable); // this is from web.xml
+ repl.setDocBase(docBase);
+ repl.setJ2EEApplication(j2EEApplication);
+ repl.setJ2EEServer(j2EEServer);
+ repl.setLazy(lazy);
+ repl.setMapperClass(mapperClass);
+ repl.setName(name);
+ repl.setOverride(override);
+ repl.setPath(getPath());
+ repl.setPrivileged(privileged);
+ repl.setReloadable(reloadable);
+ repl.setReplaceWelcomeFiles(replaceWelcomeFiles);
+ repl.setSessionTimeout(sessionTimeout);
+ repl.setUseNaming(useNaming);
+ repl.setWrapperClass(wrapperClass);
+ repl.setWorkDir(workDir);
+ repl.setSwallowOutput(swallowOutput);
+
+ if( oname != null )
+ mserver.unregisterMBean(oname);
+ Registry.getRegistry().registerComponent(repl, oname, null);
+
+ }
/**
* Return a String representation of this component.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]