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