This is a bug in Resin.  Tapestry uses the thread context class
loader, which should be a descendent of the default class loader.
Whenever someone gets really wierd behavior with Tapestry, my first
question is: "Are you using Resin?".

On 5/8/05, Pete Bevin <[EMAIL PROTECTED]> wrote:
> Hi,
> 
> I have been trying to get the hangman1 example from Tapestry In Action
> to run under Resin 3.0.13.  It works fine on Linux, but on Windows I
> get the following exception:
> 
> ---------------------------------------------
> 500 Servlet Exception
> javassist.NotFoundException: java.lang.Object
>         at javassist.ClassPoolTail.openClassfile(ClassPoolTail.java:294)
>         at javassist.ClassPoolTail.checkClassName(ClassPoolTail.java:177)
>         at javassist.ClassPool.checkClassName(ClassPool.java:679)
>         at javassist.ClassPool.get0(ClassPool.java:542)
>         at javassist.ClassPool.get(ClassPool.java:531)
>         at 
> org.apache.tapestry.enhance.javassist.ClassMapping.loadType(ClassMapping.java:89)
>         at 
> org.apache.tapestry.enhance.javassist.ClassMapping.initialize(ClassMapping.java:73)
>         at 
> org.apache.tapestry.enhance.javassist.ClassMapping.<init>(ClassMapping.java:48)
>         at 
> org.apache.tapestry.enhance.javassist.EnhancedClassFactory.reset(EnhancedClassFactory.java:70)
>         at 
> org.apache.tapestry.enhance.javassist.EnhancedClassFactory.<init>(EnhancedClassFactory.java:49)
>         at 
> org.apache.tapestry.enhance.DefaultComponentClassEnhancer.createEnhancedClassFactory(DefaultComponentClassEnhancer.java:72)
>         at 
> org.apache.tapestry.enhance.DefaultComponentClassEnhancer.<init>(DefaultComponentClassEnhancer.java:66)
>         at 
> org.apache.tapestry.engine.AbstractEngine.createComponentClassEnhancer(AbstractEngine.java:2207)
>         at 
> org.apache.tapestry.engine.AbstractEngine.setupForRequest(AbstractEngine.java:1262)
>         at 
> org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:824)
>         at 
> org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:197)
>         at 
> org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:158)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:113)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:90)
>         at 
> com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:99)
>         at 
> com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:163)
>         at 
> com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:208)
>         at 
> com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:259)
>         at com.caucho.server.port.TcpConnection.run(TcpConnection.java:341)
>         at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:490)
>         at com.caucho.util.ThreadPool.run(ThreadPool.java:423)
>         at java.lang.Thread.run(Thread.java:595)
> 
> Resin-3.0.13 (built Fri, 06 May 2005 10:06:25 PDT)
> ---------------------------------------------
> 
> I'd like to blame Resin, but after a bit of digging, I found a
> strangeness in the way Tapestry sets up the class pool for Javassist,
> which led to the attached patch.  I don't know whether this is the
> Right Thing, but it fixes the problem on Resin/Windows and still works
> on Resin/Linux.
> 
> Is there a reason why Tapestry doesn't use the default class pool?
> 
> Pete.
> 
> --- 
> Tapestry-3.0.3/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClassFactory.java
>        2005-03-28 21:28:27.000000000 -0500
> +++ 
> Tapestry-3.0.3-resin/framework/src/org/apache/tapestry/enhance/javassist/EnhancedClassFactory.java
>  2005-05-08 13:30:19.000000000 -0400
> @@ -54,7 +54,7 @@
>          ClassLoader loader = _resourceResolver.getClassLoader();
> 
>          // create a new ClassPool and make sure it uses the
> application resource resolver
> -        ClassPool classPool = new ClassPool(null);
> +        ClassPool classPool = ClassPool.getDefault();
>          classPool.insertClassPath(new LoaderClassPath(loader));
> 
>          return classPool;
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


-- 
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Jakarta Tapestry
Creator, Jakarta HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to