costin      2003/04/04 19:56:07

  Modified:    catalina/src/share/org/apache/catalina/core
                        StandardContext.java
  Log:
  Few more fixes - Amy, that should solve reloading problems ( at least it does for me 
).
  
  I'm not sure if we do reset everything completely - that's what I'm experimenting
  with the new method. What needs to happen after stop() is similar with
  the recycle() in request - no trace of the old context and config should
  remain.
  unregister deals with the mapper.
  
  Doing few dozens restarts and looking at memory use will probably help
  
  Revision  Changes    Path
  1.33      +85 -54    
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.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- StandardContext.java      25 Mar 2003 17:55:59 -0000      1.32
  +++ StandardContext.java      5 Apr 2003 03:56:07 -0000       1.33
  @@ -83,6 +83,8 @@
   import javax.management.ObjectName;
   import javax.management.MBeanServer;
   import javax.management.MalformedObjectNameException;
  +import javax.management.InstanceNotFoundException;
  +import javax.management.MBeanRegistrationException;
   import org.apache.naming.ContextBindings;
   import org.apache.naming.resources.BaseDirContext;
   import org.apache.naming.resources.FileDirContext;
  @@ -4023,6 +4025,44 @@
   
       }
   
  +    /**
  +     * Stop this Context component. Experimental, please ignore.
  +     *
  +     * @exception LifecycleException if a shutdown error occurs
  +     */
  +    public synchronized void stopNew() throws LifecycleException {
  +        // Mark this application as unavailable while we shut down
  +        setAvailable(false);
  +
  +        // Binding thread
  +        ClassLoader oldCCL = bindThread();
  +
  +        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();
  +    }
   
       /**
        * Stop this Context component.
  @@ -4116,11 +4156,18 @@
           context = null;
   
           wrappers = new ArrayList();
  +
  +        // 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);
           
  -
  +        
           if (log.isDebugEnabled())
               log.debug("Stopping complete");
       }
  @@ -4139,42 +4186,17 @@
        */ 
       public void destroy() throws Exception {
           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
           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);
  +        log.info("resetContext " + oname + " " + mserver);
  +        if( oname != null ) { 
  +            Registry.getRegistry().unregisterComponent(oname); 
  +        }
  +        Registry.getRegistry().registerComponent(this, oname, null);
           
       }
   
  @@ -4761,31 +4783,39 @@
           return result;
       }
   
  +    public ObjectName createObjectName(String domain, ObjectName parentName)
  +            throws MalformedObjectNameException
  +    {
  +        String onameStr;
  +        StandardHost ctx=(StandardHost)getParent();
  +        
  +        String pathName=getName();
  +        String hostName=getParent().getName();
  +        String name= "//" + ((hostName==null)? "DEFAULT" : hostName) +
  +                (("".equals(pathName))?"/":pathName );
  +
  +        String suffix=",J2EEApplication=" +
  +                getJ2EEApplication() + ",J2EEServer=" +
  +                getJ2EEServer();
  +
  +        onameStr="j2eeType=WebModule,name=" + name + suffix;
  +        if( log.isDebugEnabled())
  +            log.debug("Registering " + onameStr + " for " + oname);
  +
  +        ObjectName oname=new ObjectName(ctx.getDomain()+ ":" + onameStr);
  +        return oname;        
  +    }    
  +    
       private void registerJMX() {
  -        String onameStr=null;
           try {
  +            StandardHost ctx=(StandardHost)getParent();
               if( oname==null || oname.getKeyProperty("j2eeType")==null ) {
  -                StandardHost ctx=(StandardHost)parent;
  -                String pathName=getName();
  -                String hostName=getParent().getName();
  -                String name= "//" + ((hostName==null)? "DEFAULT" : hostName) +
  -                        (("".equals(pathName))?"/":pathName );
  -
  -                String suffix=",J2EEApplication=" +
  -                        getJ2EEApplication() + ",J2EEServer=" +
  -                        getJ2EEServer();
  -
  -                onameStr="j2eeType=WebModule,name=" + name + suffix;
  -                if( log.isDebugEnabled())
  -                    log.debug("Registering " + onameStr + " for " + oname);
  -
  -                ObjectName oname=new ObjectName(ctx.getDomain()+ ":" + onameStr);
  +                oname=createObjectName(ctx.getDomain(), ctx.getObjectName());
                   log.debug("Checking for " + oname );
                   if(! Registry.getRegistry().getMBeanServer().isRegistered(oname))
                   {
  -                    Registry.getRegistry().registerComponent(this,
  -                            ctx.getDomain(),
  -                            "StandardContext", onameStr);
  +                    controller=oname;
  +                    Registry.getRegistry().registerComponent(this,oname, null);
                   }
               }
               for( Iterator it=wrappers.iterator(); it.hasNext() ; ) {
  @@ -4795,7 +4825,7 @@
               }
           } catch( Exception ex ) {
               log.info("Error registering ctx with jmx " + this + " " +
  -                    onameStr + " " + ex.toString(), ex );
  +                    oname + " " + ex.toString(), ex );
           }
       }
   
  @@ -4847,6 +4877,7 @@
               ContextConfig config = new ContextConfig();
               this.addLifecycleListener(config);
   
  +            log.debug( "AddChild " + parentName + " " + this);
               mserver.invoke(parentName, "addChild", new Object[] { this },
                       new String[] {"org.apache.catalina.Container"});
           }            
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to