Author: hlship
Date: Mon Feb 5 16:33:15 2007
New Revision: 503934
URL: http://svn.apache.org/viewvc?view=rev&rev=503934
Log:
Change how CtClass instances are converted into Class instances to use the
correct class loader (the current architecture caused ClassCastExceptions
inside tapestry-core).
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/pom.xml
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java
Modified: tapestry/tapestry5/tapestry-ioc/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/pom.xml?view=diff&rev=503934&r1=503933&r2=503934
==============================================================================
--- tapestry/tapestry5/tapestry-ioc/trunk/pom.xml (original)
+++ tapestry/tapestry5/tapestry-ioc/trunk/pom.xml Mon Feb 5 16:33:15 2007
@@ -4,12 +4,12 @@
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-ioc</artifactId>
<packaging>jar</packaging>
- <version>5.0.1</version>
+ <version>5.0.2-SNAPSHOT</version>
<!-- This should change to tapestry-project -->
<parent>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-project</artifactId>
- <version>5.0.1</version>
+ <version>5.0.2-SNAPSHOT</version>
<relativePath>../tapestry-project/pom.xml</relativePath>
</parent>
<name>Tapestry Inversion of Control Container</name>
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java?view=diff&rev=503934&r1=503933&r2=503934
==============================================================================
---
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java
(original)
+++
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryClassPool.java
Mon Feb 5 16:33:15 2007
@@ -26,15 +26,13 @@
/**
* Used to ensure that [EMAIL PROTECTED]
javassist.ClassPool#appendClassPath(javassist.ClassPath)} is invoked
- * within a synchronized lock, and also handles tricky class loading issues
(caused by the creation of
- * classes, and class loaders, at runtime).
+ * within a synchronized lock, and also handles tricky class loading issues
(caused by the creation
+ * of classes, and class loaders, at runtime).
*
* @author Howard Lewis Ship
*/
public class ClassFactoryClassPool extends ClassPool
{
- // This is the loader with the widest visibility yet seen.
-
private ClassLoader _loader;
private ClassPath _priorClassPath;
@@ -70,7 +68,7 @@
if (_priorClassPath != null) removeClassPath(_priorClassPath);
- appendClassPath(path);
+ insertClassPath(path);
_priorClassPath = path;
@@ -87,14 +85,5 @@
public ClassLoader getLoader()
{
return _loader;
- }
-
- /**
- * Invoked to convert an fabricated class into a real class.
- */
- @Override
- public synchronized Class toClass(CtClass ctClass) throws
CannotCompileException
- {
- return ctClass.toClass(_loader);
}
}
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java?view=diff&rev=503934&r1=503933&r2=503934
==============================================================================
---
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java
(original)
+++
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/ClassFactoryImpl.java
Mon Feb 5 16:33:15 2007
@@ -63,7 +63,7 @@
_pool = pool;
- _classSource = new CtClassSource(_pool);
+ _classSource = new CtClassSource(_pool, classLoader);
_log = log;
}
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java?view=diff&rev=503934&r1=503933&r2=503934
==============================================================================
---
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java
(original)
+++
tapestry/tapestry5/tapestry-ioc/trunk/src/main/java/org/apache/tapestry/ioc/internal/services/CtClassSource.java
Mon Feb 5 16:33:15 2007
@@ -14,6 +14,8 @@
package org.apache.tapestry.ioc.internal.services;
+import java.security.ProtectionDomain;
+
import javassist.CtClass;
import javassist.NotFoundException;
@@ -29,6 +31,10 @@
{
private final ClassFactoryClassPool _pool;
+ private final ClassLoader _loader;
+
+ private final ProtectionDomain _domain = getClass().getProtectionDomain();
+
private int _createdClassCount = 0;
/**
@@ -39,9 +45,10 @@
return _createdClassCount;
}
- public CtClassSource(ClassFactoryClassPool pool)
+ public CtClassSource(ClassFactoryClassPool pool, ClassLoader loader)
{
_pool = pool;
+ _loader = loader;
}
public CtClass getCtClass(Class searchClass)
@@ -76,12 +83,11 @@
public synchronized Class createClass(CtClass ctClass)
{
- if (WRITE_DIR != null)
- writeClass(ctClass);
+ if (WRITE_DIR != null) writeClass(ctClass);
try
{
- Class result = _pool.toClass(ctClass);
+ Class result = _pool.toClass(ctClass, _loader, _domain);
_createdClassCount++;
Modified:
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java?view=diff&rev=503934&r1=503933&r2=503934
==============================================================================
---
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java
(original)
+++
tapestry/tapestry5/tapestry-ioc/trunk/src/test/java/org/apache/tapestry/ioc/internal/services/ClassFabImplTest.java
Mon Feb 5 16:33:15 2007
@@ -60,7 +60,7 @@
pool.addClassLoaderIfNeeded(threadLoader);
- _source = new CtClassSource(pool);
+ _source = new CtClassSource(pool, threadLoader);
}
private ClassFab newClassFab(String className, Class superClass)