You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by mi...@apache.org on 2003/10/04 01:45:31 UTC

cvs commit: jakarta-tapestry/framework/src/org/apache/tapestry/enhance/javassist EnhancedClassFactory.java

mindbridge    2003/10/03 16:45:31

  Modified:    framework/src/org/apache/tapestry/enhance
                        IEnhancedClassFactory.java
                        DefaultComponentClassEnhancer.java
               framework/src/org/apache/tapestry/enhance/javassist
                        EnhancedClassFactory.java
  Log:
  Fixed a memory leak when org.apache.tapestry.disable-caching is true.
  Unused classes were not discarded.
  
  Revision  Changes    Path
  1.2       +2 -1      jakarta-tapestry/framework/src/org/apache/tapestry/enhance/IEnhancedClassFactory.java
  
  Index: IEnhancedClassFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/org/apache/tapestry/enhance/IEnhancedClassFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- IEnhancedClassFactory.java	21 Jun 2003 19:47:24 -0000	1.1
  +++ IEnhancedClassFactory.java	3 Oct 2003 23:45:30 -0000	1.2
  @@ -67,5 +67,6 @@
    */
   public interface IEnhancedClassFactory
   {
  +    void reset();
       IEnhancedClass createEnhancedClass(String className, Class parentClass);
   }
  
  
  
  1.10      +2 -1      jakarta-tapestry/framework/src/org/apache/tapestry/enhance/DefaultComponentClassEnhancer.java
  
  Index: DefaultComponentClassEnhancer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/org/apache/tapestry/enhance/DefaultComponentClassEnhancer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DefaultComponentClassEnhancer.java	21 Jun 2003 19:47:24 -0000	1.9
  +++ DefaultComponentClassEnhancer.java	3 Oct 2003 23:45:30 -0000	1.10
  @@ -107,6 +107,7 @@
       public synchronized void reset()
       {
           _cachedClasses.clear();
  +        _factory.reset();
       }
   
       public IResourceResolver getResourceResolver()
  
  
  
  1.2       +40 -16    jakarta-tapestry/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClassFactory.java
  
  Index: EnhancedClassFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClassFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EnhancedClassFactory.java	21 Jun 2003 19:47:24 -0000	1.1
  +++ EnhancedClassFactory.java	3 Oct 2003 23:45:31 -0000	1.2
  @@ -86,15 +86,34 @@
       public EnhancedClassFactory(IResourceResolver resourceResolver)
       {
           _resourceResolver = resourceResolver;
  +
  +        reset();
  +    }
  +    
  +    protected ClassPool createClassPool()
  +    {
           ClassLoader loader = _resourceResolver.getClassLoader();
           
  -        _enhancedClassLoader = new EnhancedClassLoader(loader);
  -
  -        // get the default ClassPool and make sure it uses the application resource resolver 
  -        _classPool = ClassPool.getDefault();
  -        _classPool.insertClassPath(new LoaderClassPath(loader));
  +        // create a new ClassPool and make sure it uses the application resource resolver 
  +        ClassPool classPool = new ClassPool(null);
  +        classPool.insertClassPath(new LoaderClassPath(loader));
  +        
  +        return classPool;
  +    }
  +    
  +    /**
  +     * @see org.apache.tapestry.enhance.IEnhancedClassFactory#reset()
  +     */
  +    public synchronized void reset()
  +    {
  +        // create a new class pool and discard the previous one
  +        _classPool = createClassPool();
  +        _typeMap = new ClassMapping(_classPool);
   
  +        ClassLoader loader = _resourceResolver.getClassLoader();
  +        _enhancedClassLoader = new EnhancedClassLoader(loader);
       }
  +   
   
       /**
        * @see org.apache.tapestry.enhance.IEnhancedClassFactory#createEnhancedClass(java.lang.String, java.lang.Class)
  @@ -111,8 +130,6 @@
   
       public ClassMapping getClassMapping()
       {
  -        if (_typeMap == null)
  -            _typeMap = new ClassMapping(_classPool);
           return _typeMap;
       }
   
  @@ -129,14 +146,21 @@
   
           if (result == null)
           {
  -            try
  -            {
  -                result = _classPool.get(type);
  -                getClassMapping().recordType(type, result);
  -            }
  -            catch (NotFoundException e)
  -            {
  -                throw new CodeGenerationException(e);
  +            synchronized (this) {
  +                result = getClassMapping().getType(type);
  +
  +                if (result == null)
  +                {
  +                    try
  +                    {
  +                        result = _classPool.get(type);
  +                        getClassMapping().recordType(type, result);
  +                    }
  +                    catch (NotFoundException e)
  +                    {
  +                        throw new CodeGenerationException(e);
  +                    }
  +                }
               }
           }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org