joerg       2004/02/09 13:26:40

  Modified:    src/java/org/apache/cocoon/components/language/programming/java
                        JavaLanguage.java
  Log:
  bug 26791: release of ClassLoaderManager fixed, thanks to Marco Rolappe
  
  Revision  Changes    Path
  1.5       +25 -19    
cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java
  
  Index: JavaLanguage.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/programming/java/JavaLanguage.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JavaLanguage.java 7 Feb 2004 15:20:09 -0000       1.4
  +++ JavaLanguage.java 9 Feb 2004 21:26:40 -0000       1.5
  @@ -92,6 +92,8 @@
       /** Classpath */
       private String classpath;
   
  +    private String classLoaderClass;
  +    
       /**
        * Return the language's canonical source file extension.
        *
  @@ -115,39 +117,39 @@
        * sitemap-specified <code>ClassLoaderManager</code>
        *
        * @param params The configuration parameters
  -     * @exception ParameterException If the class loader manager cannot be 
instantiated
  +     * @throws ParameterException If the class loader manager cannot be
  +     *                            instantiated or looked up.
        */
       public void parameterize(Parameters params) throws ParameterException {
           super.parameterize(params);
   
  -        String classLoaderClass = params.getParameter("class-loader",null);
  -        if (classLoaderClass != null) {
  +        this.classLoaderClass = params.getParameter("class-loader", null);
  +        if (this.classLoaderClass != null) {
               try {
  -                this.classLoaderManager = (ClassLoaderManager) 
ClassUtils.newInstance(classLoaderClass);
  +                this.classLoaderManager = (ClassLoaderManager)
  +                        ClassUtils.newInstance(this.classLoaderClass);
               } catch (Exception e) {
  -                throw new ParameterException("Unable to load class loader: " 
+ classLoaderClass, e);
  +                throw new ParameterException("Unable to load class loader: "
  +                                             + this.classLoaderClass, e);
  +            }
  +        } else {
  +            try {
  +                getLogger().debug("Looking up " + ClassLoaderManager.ROLE);
  +                this.classLoaderManager = (ClassLoaderManager)
  +                        manager.lookup(ClassLoaderManager.ROLE);
  +            } catch (ServiceException e) {
  +                throw new ParameterException("Lookup of ClassLoaderManager 
failed", e);
               }
           }
       }
   
       /**
  -     * Set the global service manager. This methods initializes the class
  -     * loader manager if it was not (successfully) specified in the language
  -     * parameters
  +     * Set the global service manager.
        *
        * @param manager The global service manager
        */
       public void service(ServiceManager manager) throws ServiceException {
           this.manager = manager;
  -        if (this.classLoaderManager == null) {
  -            try {
  -                getLogger().debug("Looking up " + ClassLoaderManager.ROLE);
  -                this.classLoaderManager =
  -                        (ClassLoaderManager) 
manager.lookup(ClassLoaderManager.ROLE);
  -            } catch (Exception e) {
  -                getLogger().error("Could not find component", e);
  -            }
  -        }
       }
   
       public void initialize() throws Exception {
  @@ -299,6 +301,7 @@
                   }
               }
           }
  +
           return buffer.toString();
       }
   
  @@ -306,6 +309,9 @@
        *  dispose
        */
       public void dispose() {
  -        manager.release(this.classLoaderManager);
  +        if (this.classLoaderClass == null && this.classLoaderManager != 
null) {
  +            manager.release(this.classLoaderManager);
  +            this.classLoaderManager = null;
  +        }
       }
   }
  
  
  

Reply via email to