fhanik 2004/01/12 10:44:05 Modified: catalina/src/share/org/apache/catalina Manager.java catalina/src/share/org/apache/catalina/core StandardContext.java Log: Rolled back changes to backgroundProcess Revision Changes Path 1.5 +1 -7 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Manager.java Index: Manager.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Manager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Manager.java 12 Jan 2004 05:21:48 -0000 1.4 +++ Manager.java 12 Jan 2004 18:44:04 -0000 1.5 @@ -186,7 +186,7 @@ * Get a session from the recycled ones or create a new empty one. * The PersistentManager manager does not need to create session data * because it reads it from the Store. - */ + */ public Session createEmptySession(); /** @@ -260,11 +260,5 @@ */ public void unload() throws IOException; - /** - * This method will be invoked by the context/container on a periodic - * basis and allows the manager to implement - * a method that executes periodic tasks, such as expiring sessions etc. - */ - public void backgroundProcess(); } 1.106 +124 -123 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.105 retrieving revision 1.106 diff -u -r1.105 -r1.106 --- StandardContext.java 12 Jan 2004 05:21:48 -0000 1.105 +++ StandardContext.java 12 Jan 2004 18:44:04 -0000 1.106 @@ -71,7 +71,6 @@ import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.io.Serializable; -import java.lang.reflect.Method; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; @@ -207,14 +206,14 @@ /** * The set of instantiated application event listener objects</code>. */ - private transient Object applicationEventListenersObjects[] = + private transient Object applicationEventListenersObjects[] = new Object[0]; /** * The set of instantiated application lifecycle listener objects</code>. */ - private transient Object applicationLifecycleListenersObjects[] = + private transient Object applicationLifecycleListenersObjects[] = new Object[0]; @@ -229,12 +228,12 @@ * The application available flag for this Context. */ private boolean available = false; - + /** - * The broadcaster that sends j2ee notifications. + * The broadcaster that sends j2ee notifications. */ private NotificationBroadcasterSupport broadcaster = null; - + /** * The Locale to character set mapper for this application. */ @@ -304,7 +303,7 @@ private String displayName = null; - /** + /** * Override the default web xml location. ContextConfig is not configurable * so the setter is not used. */ @@ -374,7 +373,7 @@ /** * The mapper associated with this context. */ - private org.apache.tomcat.util.http.mapper.Mapper mapper = + private org.apache.tomcat.util.http.mapper.Mapper mapper = new org.apache.tomcat.util.http.mapper.Mapper(); @@ -492,7 +491,7 @@ * The notification sequence number. */ private long sequenceNumber = 0; - + /** * The status code error pages for this web application, keyed by * HTTP status code (as an Integer). @@ -623,7 +622,7 @@ private long tldScanTime; /** Name of the engine. If null, the domain is used. - */ + */ private String engineName = null; private String j2EEApplication="none"; private String j2EEServer="none"; @@ -1308,7 +1307,7 @@ } - + /** * Set the context path for this Context. * <p> @@ -1646,9 +1645,9 @@ /** Get the absolute path to the work dir. * To avoid duplication. - * + * * @return - */ + */ public String getWorkPath() { File workDir = new File(getWorkDir()); if (!workDir.isAbsolute()) { @@ -1663,7 +1662,7 @@ } return workDir.getAbsolutePath(); } - + /** * Return the work directory for this Context. */ @@ -1761,7 +1760,7 @@ String jspFile = wrapper.getJspFile(); if ((jspFile != null) && !jspFile.startsWith("/")) { if (isServlet22()) { - log.debug(sm.getString("standardContext.wrapper.warning", + log.debug(sm.getString("standardContext.wrapper.warning", jspFile)); wrapper.setJspFile("/" + jspFile); } else { @@ -2568,8 +2567,8 @@ public Context findMappingObject() { return (Context) getMappingObject(); } - - + + /** * Return the message destination with the specified name, if any; * otherwise, return <code>null</code>. @@ -3866,9 +3865,9 @@ } // Register the cache in JMX if (isCachingAllowed()) { - ObjectName resourcesName = - new ObjectName(this.getDomain() + ":type=Cache,host=" - + getHostname() + ",path=" + ObjectName resourcesName = + new ObjectName(this.getDomain() + ":type=Cache,host=" + + getHostname() + ",path=" + (("".equals(getPath()))?"/":getPath())); Registry.getRegistry().registerComponent (proxyDirContext.getCache(), resourcesName, null); @@ -3901,10 +3900,10 @@ } // Unregister the cache in JMX if (isCachingAllowed()) { - ObjectName resourcesName = + ObjectName resourcesName = new ObjectName(this.getDomain() - + ":type=Cache,host=" - + getHostname() + ",path=" + + ":type=Cache,host=" + + getHostname() + ",path=" + (("".equals(getPath()))?"/" :getPath())); Registry.getRegistry().unregisterComponent(resourcesName); @@ -3984,14 +3983,14 @@ log.info(sm.getString("containerBase.alreadyStarted", logName())); return; } - if( !initialized ) { + if( !initialized ) { try { init(); } catch( Exception ex ) { throw new LifecycleException("Error initializaing ", ex); } } - + String logName = "tomcat." + getParent().getName() + "." + ("".equals(getName()) ? "ROOT" : getName()) + ".Context"; log = org.apache.commons.logging.LogFactory.getLog(logName); @@ -4001,7 +4000,7 @@ // Set JMX object name for proper pipeline registration preRegisterJMX(); - if ((oname != null) && + if ((oname != null) && (Registry.getRegistry().getMBeanServer().isRegistered(oname))) { // As things depend on the JMX registration, the context // must be reregistered again once properly initialized @@ -4029,7 +4028,7 @@ appBaseFile = new File(engineBase(), getAppBase()); } String appBase = appBaseFile.getCanonicalPath(); - String basePath = + String basePath = (new File(getBasePath())).getCanonicalPath(); if (!basePath.startsWith(appBase)) { Server server = ServerFactory.getServer(); @@ -4040,11 +4039,11 @@ } } else { try { - String canConfigFile = + String canConfigFile = (new File(getConfigFile())).getCanonicalPath(); if (!canConfigFile.startsWith (configBase.getCanonicalPath())) { - File file = + File file = new File(configBase, getDefaultConfigFile()); if (copy(new File(canConfigFile), file)) { setConfigFile(file.getPath()); @@ -4089,24 +4088,24 @@ } } - // Look for a realm - that may have been configured earlier. + // Look for a realm - that may have been configured earlier. // If the realm is added after context - it'll set itself. if( realm == null ) { ObjectName realmName=null; try { - realmName=new ObjectName( getEngineName() + ":type=Host,host=" + + realmName=new ObjectName( getEngineName() + ":type=Host,host=" + getHostname() + ",path=" + getPath()); if( mserver.isRegistered(realmName ) ) { - mserver.invoke(realmName, "init", + mserver.invoke(realmName, "init", new Object[] {}, new String[] {} - ); + ); } } catch( Throwable t ) { log.debug("No realm for this host " + realmName); } } - + if (getLoader() == null) { ClassLoader parent = null; if (getPrivileged()) { @@ -4216,7 +4215,7 @@ try { tldConfig.execute(); } catch (Exception ex) { - log.error("Error reading tld listeners " + log.error("Error reading tld listeners " + ex.toString(), ex); //ok=false; } @@ -4314,16 +4313,16 @@ } startTime=System.currentTimeMillis(); - - // Send j2ee.state.running notification + + // Send j2ee.state.running notification if (ok && (this.getObjectName() != null)) { - Notification notification = - new Notification("j2ee.state.running", this.getObjectName(), + Notification notification = + new Notification("j2ee.state.running", this.getObjectName(), sequenceNumber++); broadcaster.sendNotification(notification); } - // Close all JARs right away to avoid always opening a peak number + // Close all JARs right away to avoid always opening a peak number // of files on startup if (getLoader() instanceof WebappLoader) { ((WebappLoader) getLoader()).closeJARs(true); @@ -4336,11 +4335,11 @@ //cacheContext(); } - + private void cacheContext() { try { File workDir=new File( getWorkPath() ); - + File ctxSer=new File( workDir, "_tomcat_context.ser"); FileOutputStream fos=new FileOutputStream( ctxSer ); ObjectOutputStream oos=new ObjectOutputStream( fos ); @@ -4367,27 +4366,27 @@ try { // Stop our filters filterStop(); - + // Finalize our character set mapper setCharsetMapper(null); - + // Stop our application listeners listenerStop(); - + // Stop resources resourcesStop(); - + super.stop(); } finally { - + // Unbinding thread unbindThread(oldCCL); - + } - + // Reset application context context = null; - + wrappers = new ArrayList(); } @@ -4408,15 +4407,15 @@ // Notify our interested LifecycleListeners lifecycle.fireLifecycleEvent(BEFORE_STOP_EVENT, null); - - // Send j2ee.state.stopping notification + + // Send j2ee.state.stopping notification if (this.getObjectName() != null) { - Notification notification = - new Notification("j2ee.state.stopping", this.getObjectName(), + Notification notification = + new Notification("j2ee.state.stopping", this.getObjectName(), sequenceNumber++); broadcaster.sendNotification(notification); } - + // Mark this application as unavailable while we shut down setAvailable(false); @@ -4483,26 +4482,26 @@ } - // Send j2ee.state.stopped notification + // Send j2ee.state.stopped notification if (this.getObjectName() != null) { - Notification notification = - new Notification("j2ee.state.stopped", this.getObjectName(), + Notification notification = + new Notification("j2ee.state.stopped", this.getObjectName(), sequenceNumber++); broadcaster.sendNotification(notification); } - + // Reset application context context = null; wrappers = new ArrayList(); - // This object will no longer be visible or used. + // This object will no longer be visible or used. try { resetContext(); } catch( Exception ex ) { log.error( "Error reseting context " + this + " " + ex, ex ); } - + // Notify our interested LifecycleListeners lifecycle.fireLifecycleEvent(AFTER_STOP_EVENT, null); @@ -4512,28 +4511,28 @@ } /** Destroy needs to clean up the context completely. - * - * The problem is that undoing all the config in start() and restoring + * + * 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 + * 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 { - if( oname != null ) { - // Send j2ee.object.deleted notification - Notification notification = - new Notification("j2ee.object.deleted", this.getObjectName(), + if( oname != null ) { + // Send j2ee.object.deleted notification + Notification notification = + new Notification("j2ee.object.deleted", this.getObjectName(), sequenceNumber++); broadcaster.sendNotification(notification); - } + } super.destroy(); } - + private void resetContext() throws Exception, MBeanRegistrationException { // Restore the original state ( pre reading web.xml in start ) // If you extend this - override this method and make sure to clean up @@ -4572,10 +4571,12 @@ count = (count + 1) % managerChecksFrequency; if ((getManager() != null) && (count == 0)) { - try { - getManager().backgroundProcess(); - } catch ( Exception x ) { - log.error("Unable to execute the managers background process",x); + if (getManager() instanceof StandardManager) { + ((StandardManager) getManager()).processExpires(); + } else if (getManager() instanceof PersistentManagerBase) { + PersistentManagerBase pManager = + (PersistentManagerBase) getManager(); + pManager.backgroundProcess(); } } @@ -4763,7 +4764,7 @@ * Get config base. */ private File getConfigBase() { - File configBase = + File configBase = new File(System.getProperty("catalina.base"), "conf"); if (!configBase.exists()) { return null; @@ -5181,14 +5182,14 @@ MBeanUtils.createObjectName(managed.getDomain(), resourceLink); return (oname.toString()); } - - + + /** JSR77 deploymentDescriptor attribute * - * @return string deployment descriptor + * @return string deployment descriptor */ public String getDeploymentDescriptor() { - + InputStream stream = null; ServletContext servletContext = getServletContext(); if (servletContext != null) { @@ -5211,11 +5212,11 @@ return ""; } - return sb.toString(); - + return sb.toString(); + } - - + + /** JSR77 servlets attribute * * @return list of all servlets ( we know about ) @@ -5228,14 +5229,14 @@ } return result; } - + public ObjectName createObjectName(String hostDomain, ObjectName parentName) throws MalformedObjectNameException { String onameStr; StandardHost hst=(StandardHost)getParent(); - + String pathName=getName(); String hostName=getParent().getName(); String name= "//" + ((hostName==null)? "DEFAULT" : hostName) + @@ -5248,18 +5249,18 @@ onameStr="j2eeType=WebModule,name=" + name + suffix; if( log.isDebugEnabled()) log.debug("Registering " + onameStr + " for " + oname); - + // default case - no domain explictely set. if( getDomain() == null ) domain=hst.getDomain(); ObjectName oname=new ObjectName(getDomain() + ":" + onameStr); - return oname; - } - + return oname; + } + private void preRegisterJMX() { try { StandardHost host = (StandardHost) getParent(); - if ((oname == null) + if ((oname == null) || (oname.getKeyProperty("j2eeType") == null)) { oname = createObjectName(host.getDomain(), host.getJmxName()); controller = oname; @@ -5278,12 +5279,12 @@ if(! Registry.getRegistry().getMBeanServer().isRegistered(oname)) { controller = oname; Registry.getRegistry().registerComponent(this, oname, null); - - // Send j2ee.object.created notification + + // Send j2ee.object.created notification if (this.getObjectName() != null) { Notification notification = new Notification( - "j2ee.object.created", - this.getObjectName(), + "j2ee.object.created", + this.getObjectName(), sequenceNumber++); broadcaster.sendNotification(notification); } @@ -5336,7 +5337,7 @@ if( this.getParent() == null ) { ObjectName parentName=getParentName(); - + if( ! mserver.isRegistered(parentName)) { log.debug("No host, creating one " + parentName); StandardHost host=new StandardHost(); @@ -5357,15 +5358,15 @@ } } super.init(); - - // Send j2ee.state.starting notification + + // Send j2ee.state.starting notification if (this.getObjectName() != null) { - Notification notification = new Notification("j2ee.state.starting", - this.getObjectName(), + Notification notification = new Notification("j2ee.state.starting", + this.getObjectName(), sequenceNumber++); broadcaster.sendNotification(notification); } - + } public ObjectName getParentName() throws MalformedObjectNameException { @@ -5400,7 +5401,7 @@ "type=Host,host=" + hostName); return parentName; } - + public void create() throws Exception{ init(); } @@ -5420,7 +5421,7 @@ /** * Return the naming resources associated with this web application. - * FIXME: Fooling introspection ... + * FIXME: Fooling introspection ... */ public javax.naming.directory.DirContext findStaticResources() { @@ -5440,68 +5441,68 @@ - /** Support for "stateManageable" JSR77 - * + /** Support for "stateManageable" JSR77 + * */ public boolean isStateManageable() { return true; } - + public void startRecursive() throws LifecycleException { // nothing to start recursive, the servlets will be started by load-on-startup start(); } - + public int getState() { if( started ) { return 1; // RUNNING } if( initialized ) { - return 0; // starting ? + return 0; // starting ? } - if( ! available ) { + if( ! available ) { return 4; //FAILED } // 2 - STOPPING return 3; // STOPPED } - + /** * The J2EE Server ObjectName this module is deployed on. - */ + */ private String server = null; - + /** * The Java virtual machines on which this module is running. - */ + */ private String[] javaVMs = null; - + public String getServer() { return server; } - + public String setServer(String server) { return this.server=server; } - + public String[] getJavaVMs() { return javaVMs; } - + public String[] setJavaVMs(String[] javaVMs) { return this.javaVMs = javaVMs; } - + public long getStartTime() { return startupTime; } - + public boolean isEventProvider() { return false; } - + public boolean isStatisticsProvider() { return false; } - + }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]