Nick, thanks for pointing out the earlier e-mail.
Unfortunately, it doesn't deal with how to auto-reload html
templates. Tapestry5DevClassLoader only ensures class files are
reloaded.
Any other suggestions?
On 28/09/2007, at 9:24 PM, Nick Westgate wrote:
Geoff Callender wrote:
> T5 isn't picking up changes to templates and component classes in my
> environment. T5.0.5 is a jar in an exploded WAR in an exploded EAR,
> which JBoss has been told to use (it's pointed to in
> jboss-service.xml). When I make changes to the web app they are
copied
> immediately to the exploded ear but T5 just isn't picking them up.
>
> I saw on Howard's blog that he'd had a problem with JBoss/Tomcat...
>
> http://tapestryjava.blogspot.com/2007/02/fighting-with-
tomcat.html
> http://issues.apache.org/bugzilla/show_bug.cgi?id=41664
>
> ...but the 5.0.5 source looks like it has the necessary fix.
Besides,
> I'm using an ear that's already exploded so I shouldn't be getting
> Howard's problem. True?
>
> Does anyone have a theory on why it isn't working?
> Alternatively can anyone point me to the scanner class so I can
debug
> what it isn't doing?
>
> Geoff
The problem with Tomcat was identified in the following email as a
classloader caching issue. I've not tested this though.
Cheers,
Nick.
-------- Original Message --------
Subject: RE: T5 developing with WTP and TOMCAT
Date: Wed, 5 Sep 2007 17:59:14 +0200
From: Brysbaert Gregory <[EMAIL PROTECTED]>
Reply-To: Tapestry users <users@tapestry.apache.org>
To: Tapestry users <users@tapestry.apache.org>
Hello,
About this topic, I tried some investigations on my side, and I found
out that the reason why classes don't auto-reload is that the
WebappClassLoader of tomcat 5 (I currently use tomcat 5.0, but I guess
it's the same on Tomcat 5.5) keeps in cache (in a Hashtable more
precisely) all classes it already loaded once. And this cache is never
cleared, except when the WebappClassLoader is stopped. So, when the
class file is modified on the disk, tapestry 5 clears its own
cache, and
then asks to the parent classloader (WebAppClassLoader) to reload the
class, which then serves the previous version of the class from its
cache. The result is that the class is never actually updated until
the
next restart of tomcat.
So, as a temporary solution, I tried to develop a class extending
WebappClassLoader that does not cache classes for packages containing
".pages." and ".components.". The source of this class is :
public class Tapestry5DevClassLoader extends WebappClassLoader{
private static String[] noCacheElements={".pages.","/
pages/",".components.","/components/"};
public Tapestry5DevClassLoader() {
super();
}
public Tapestry5DevClassLoader(ClassLoader arg0) {
super(arg0);
}
@Override
protected InputStream findLoadedResource(String arg0) {
InputStream is=super.findLoadedResource(arg0);
if (is!=null){
if (isNoCacheElement(arg0))
return null;
}
return is;
}
private boolean isNoCacheElement(String name){
for (int i=0;i<noCacheElements.length;i++){
if (name.indexOf(noCacheElements[i])>=0)
return true;
}
return false;
}
}
To make it work, you have to do 2 things :
- Compile the class and add it to the server/classes (or server/lib if
you package it in a jar) directory of your tomcat installation
directory.
- in your server.xml file, modify the context declaration and disable
tomcat's auto-reloading functionality, and declare the newly created
classloader instead of the default one :
<Context docBase="testtapestry5" path="/testtapestry5"
reloadable="false" source="org.eclipse.jst.j2ee.server:testtapestry5">
<Loader
loaderClass="net.atos.mm.fwk.tapestry5.classloader.Tapestry5DevClassLo
ader">
</Loader>
</Context>
This is of course a temporary solution, but I tried it and it works
for me.
Waiting for something better, I hope it can help.
Gregory Brysbaert
-----Message d'origine-----
De : Thiago H de Paula Figueiredo [mailto:[EMAIL PROTECTED]
Envoye : jeudi 16 aout 2007 18:59
A : Tapestry users
Objet : Re: T5 developing with WTP and TOMCAT
On Thu, 16 Aug 2007 12:54:31 -0300, Denny <[EMAIL PROTECTED]> wrote:
> Ok, now, I am using jettylauncher eclipse plugin to develop T5. I
hope T5
> can fix the problem about working with tomcat. There are many people
> using tomcat for develop and product.
It's a Tomcat issue, not a Tapestry one. Howard explains the
problem here:
http://tapestryjava.blogspot.com/2007/02/fighting-with-tomcat.html
--
Thiago H. de Paula Figueiredo
Desenvolvedor, Instrutor e Consultor de Tecnologia
Eteg Tecnologia da Informacao Ltda.
http://www.eteg.com.br
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]