bloritsch    01/07/13 12:00:37

  Modified:    src/org/apache/cocoon/components/language/generator Tag:
                        cocoon_20_branch GeneratorSelector.java
                        ProgramGeneratorImpl.java
               src/org/apache/cocoon/components/language/programming Tag:
                        cocoon_20_branch CompiledProgrammingLanguage.java
               src/org/apache/cocoon/servlet Tag: cocoon_20_branch
                        CocoonServlet.java
  Log:
  Classloader and ProgramGenerator reloading fixes
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.1.1.2.6 +39 -2     
xml-cocoon2/src/org/apache/cocoon/components/language/generator/GeneratorSelector.java
  
  Index: GeneratorSelector.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/generator/GeneratorSelector.java,v
  retrieving revision 1.1.1.1.2.5
  retrieving revision 1.1.1.1.2.6
  diff -u -r1.1.1.1.2.5 -r1.1.1.1.2.6
  --- GeneratorSelector.java    2001/07/09 14:00:05     1.1.1.1.2.5
  +++ GeneratorSelector.java    2001/07/13 19:00:24     1.1.1.1.2.6
  @@ -23,13 +23,16 @@
   
   import java.util.Map;
   import java.util.HashMap;
  +import java.util.List;
  +import java.util.ArrayList;
  +import java.util.Iterator;
   
   /**
    * This interface is the common base of all Compiled Components.  This
    * includes Sitemaps and XSP Pages
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Berin Loritsch</a>
  - * @version CVS $Revision: 1.1.1.1.2.5 $ $Date: 2001/07/09 14:00:05 $
  + * @version CVS $Revision: 1.1.1.1.2.6 $ $Date: 2001/07/13 19:00:24 $
    */
   public class GeneratorSelector extends ExcaliburComponentSelector implements 
Disposable {
   
  @@ -101,7 +104,7 @@
           this.addGenerator(this.manager, hint, generator);
       }
   
  -    public void addGenerator(ComponentManager newManager, Object hint, Class 
generator) throws ComponentException {
  +    protected void addGenerator(ComponentManager newManager, Object hint, Class 
generator) throws ComponentException {
           try
           {
               final ComponentHandler handler =
  @@ -125,8 +128,42 @@
           }
       }
   
  +    protected void removeGenerator(Object hint) {
  +        ComponentHandler handler = (ComponentHandler) 
this.componentHandlers.remove(hint);
  +        handler.dispose();
  +        this.classManager.reinstantiate();
  +        getLogger().debug( "Removing " + handler.getClass().getName() + " for " + 
hint.toString());
  +    }
  +
       public void dispose() {
           this.manager.release((Component)this.classManager);
  +
  +        synchronized(this)
  +        {
  +            Iterator keys = this.componentHandlers.keySet().iterator();
  +            List keyList = new ArrayList();
  +
  +            while( keys.hasNext() )
  +            {
  +                Object key = keys.next();
  +                ComponentHandler handler =
  +                    (ComponentHandler)this.componentHandlers.get( key );
  +
  +                handler.dispose();
  +
  +                keyList.add( key );
  +            }
  +
  +            keys = keyList.iterator();
  +
  +            while( keys.hasNext() )
  +            {
  +                this.componentHandlers.remove( keys.next() );
  +            }
  +
  +            keyList.clear();
  +        }
  +
           super.dispose();
       }
   }
  
  
  
  1.5.2.6   +2 -1      
xml-cocoon2/src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java
  
  Index: ProgramGeneratorImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java,v
  retrieving revision 1.5.2.5
  retrieving revision 1.5.2.6
  diff -u -r1.5.2.5 -r1.5.2.6
  --- ProgramGeneratorImpl.java 2001/07/07 19:07:48     1.5.2.5
  +++ ProgramGeneratorImpl.java 2001/07/13 19:00:25     1.5.2.6
  @@ -48,7 +48,7 @@
   /**
    * The default implementation of <code>ProgramGenerator</code>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Ricardo Rocha</a>
  - * @version CVS $Revision: 1.5.2.5 $ $Date: 2001/07/07 19:07:48 $
  + * @version CVS $Revision: 1.5.2.6 $ $Date: 2001/07/13 19:00:25 $
    */
   public class ProgramGeneratorImpl extends AbstractLoggable
       implements ProgramGenerator, Contextualizable, Composable, Configurable, 
ThreadSafe, Disposable {
  @@ -214,6 +214,7 @@
               ProgrammingLanguage programmingLanguage = 
(ProgrammingLanguage)this.languageSelector.select(programmingLanguageName);
               programmingLanguage.setLanguageName(programmingLanguageName);
               programmingLanguage.unload(program, normalizedName, this.workDir);
  +            this.cache.removeGenerator(normalizedName);
   
               // Invalidate previous program/instance pair
               program = null;
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.1.1.2.2 +13 -3     
xml-cocoon2/src/org/apache/cocoon/components/language/programming/CompiledProgrammingLanguage.java
  
  Index: CompiledProgrammingLanguage.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/programming/CompiledProgrammingLanguage.java,v
  retrieving revision 1.1.1.1.2.1
  retrieving revision 1.1.1.1.2.2
  diff -u -r1.1.1.1.2.1 -r1.1.1.1.2.2
  --- CompiledProgrammingLanguage.java  2001/07/07 19:07:57     1.1.1.1.2.1
  +++ CompiledProgrammingLanguage.java  2001/07/13 19:00:30     1.1.1.1.2.2
  @@ -22,7 +22,7 @@
    * A compiled programming language. This class extends 
<code>AbstractProgrammingLanguage</code> adding support for compilation
    * and object program files
    * @author <a href="mailto:[EMAIL PROTECTED]";>Ricardo Rocha</a>
  - * @version CVS $Revision: 1.1.1.1.2.1 $ $Date: 2001/07/07 19:07:57 $
  + * @version CVS $Revision: 1.1.1.1.2.2 $ $Date: 2001/07/13 19:00:30 $
    */
   public abstract class CompiledProgrammingLanguage extends 
AbstractProgrammingLanguage implements Contextualizable {
       /** The compiler */
  @@ -79,8 +79,18 @@
        * @exception EXCEPTION_NAME If an error occurs
        */
       protected final void doUnload(Object program, String filename, File 
baseDirectory) throws LanguageException {
  -        File file = new File(baseDirectory, filename + "." + 
this.getObjectExtension());
  -        file.delete();
  +        int index = filename.lastIndexOf(File.separator);
  +        String dir = filename.substring(0, index);
  +        String file = filename.substring(index + 1);
  +
  +        File baseDir = new File(baseDirectory, dir);
  +        File[] files = baseDir.listFiles();
  +
  +        for (int i = 0; i < files.length; i++) {
  +            if (files[i].getName().equals(file)) {
  +                files[i].delete();
  +            }
  +        }
           this.doUnload(program);
       }
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.13.2.5  +24 -16    xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java
  
  Index: CocoonServlet.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java,v
  retrieving revision 1.13.2.4
  retrieving revision 1.13.2.5
  diff -u -r1.13.2.4 -r1.13.2.5
  --- CocoonServlet.java        2001/07/12 13:33:48     1.13.2.4
  +++ CocoonServlet.java        2001/07/13 19:00:33     1.13.2.5
  @@ -59,7 +59,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Nicola Ken Barozzi</a> Aisa
    * @author <a href="mailto:[EMAIL PROTECTED]";>Berin Loritsch</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Carsten Ziegeler</a>
  - * @version CVS $Revision: 1.13.2.4 $ $Date: 2001/07/12 13:33:48 $
  + * @version CVS $Revision: 1.13.2.5 $ $Date: 2001/07/13 19:00:33 $
    */
   
   public class CocoonServlet extends HttpServlet {
  @@ -94,6 +94,7 @@
       protected RepositoryClassLoader classLoader;
   
       protected String forceLoadParameter;
  +    private boolean addClassDirs;
   
       /**
        * Initialize this <code>CocoonServlet</code> instance.  You will
  @@ -118,6 +119,7 @@
           this.initLogger();
   
           this.forceLoadParameter = conf.getInitParameter("load-class");
  +        this.addClassDirs = 
"true".equals(conf.getInitParameter("init-classloader"));
   
           String workDirParam = conf.getInitParameter("work-directory");
           if ((workDirParam != null) && (workDirParam.trim().equals("") == false)) {
  @@ -154,12 +156,12 @@
        */
       public void destroy()
       {
  -     if (this.cocoon != null)
  -     {
  +        if (this.cocoon != null)
  +        {
               log.debug("Servlet destroyed - disposing Cocoon");
  -         this.cocoon.dispose();
  -         this.cocoon = null;
  -     }
  +            this.cocoon.dispose();
  +            this.cocoon = null;
  +        }
       }
   
        /**
  @@ -201,10 +203,13 @@
   
           if(classDir != null) {
               buildClassPath.append(classDir);
  -            try {
  -                classLoader.addDirectory(new File(classDir));
  -            } catch (Exception e) {
  -                log.debug("Could not add directory" + classDir, e);
  +
  +            if (this.addClassDirs) {
  +                try {
  +                    classLoader.addDirectory(new File(classDir));
  +                } catch (Exception e) {
  +                    log.debug("Could not add directory" + classDir, e);
  +                }
               }
           }
   
  @@ -214,10 +219,13 @@
               for (int i = 0; i < libraries.length; i++) {
                   buildClassPath.append(File.pathSeparatorChar)
                                 .append(IOUtils.getFullFilename(libraries[i]));
  -                try {
  -                    classLoader.addDirectory(libraries[i]);
  -                } catch (Exception e) {
  -                    log.debug("Could not add file" + 
IOUtils.getFullFilename(libraries[i]));
  +
  +                if (this.addClassDirs) {
  +                    try {
  +                        classLoader.addDirectory(libraries[i]);
  +                    } catch (Exception e) {
  +                        log.debug("Could not add file" + 
IOUtils.getFullFilename(libraries[i]));
  +                    }
                   }
               }
           }
  @@ -309,8 +317,8 @@
               if (logName == null) {
                   logName = "cocoon.log";
               }
  -     
  -             this.appContext.put(Constants.CONTEXT_LOG_FILE, logName);
  +
  +            this.appContext.put(Constants.CONTEXT_LOG_FILE, logName);
   
               final String path = logDir + logName;
               final AvalonFormatter formatter = new AvalonFormatter();
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to