Actually, the resource loader is the issue. The ClasspathResourceLoader is not as full featured as the FileResourceLoader or the WebappLoader (from VelocityTools). Specifically, it doesn't have functional implementations of isSourceModified() or getLastModified(), these always return false and 0 respectively for the ClasspathResourceLoader. Without any way to tell if the macro library has changed, there is no way to reload it.
If you are able to use a different resource loader during development, that should do the trick for you. I don't believe there is a way (at least not for a component like Velocity) to check for file modifications on the classpath, but if you know of one, we'd love a patch! On 12/6/06, Peter Locke <[EMAIL PROTECTED]> wrote:
I've searched the archives and have seen this discussed before, although I've failed to find a definitive answer, and I'm hoping to get one. I also have not seen evidence that this is addressed in Velocity 1.5. My templates reload on the fly as expected if changed, but changes to the macro library macros used by these same templates do not take effect until a Tomcat restart. According to the documentation setting velocimacro.library.autoreload to true should mean that they take effect immediately. This is a real annoyance when developing Here are my relevant config properties for the development environment. Velocity 1.4, Tomcat 4.1. Note I'm including the fact that I'm using a custom ClasspathResourceLoader in case that is relevant, although I don't see why it would be. I need to do this because it seems velocity's built in one must be loaded from a different class loader then my .jar that contains the templates as it won't find them. Code below. p.setProperty(Velocity.RESOURCE_LOADER, "class"); p.setProperty("class.resource.loader.class", ABEVelocityTemplateLoader.class.getName()); p.setProperty("class.resource.loader.cache", "false"); p.setProperty("velocimacro.library.autoreload", "true"); p.setProperty("runtime.log.invalid.references", "true"); thanks, Peter ------------- public class ABEVelocityTemplateLoader extends ClasspathResourceLoader { public ABEVelocityTemplateLoader() { } public synchronized InputStream getResourceStream(String name) throws ResourceNotFoundException { InputStream result = null; if(name == null || name.length() == 0) throw new ResourceNotFoundException("No template name provided"); try { ClassLoader classLoader = getClass().getClassLoader(); result = classLoader.getResourceAsStream(name); if (result == null) { result = ClassLoader.getSystemResourceAsStream(name); } } catch(Exception fnfe) { throw new ResourceNotFoundException(fnfe.getMessage()); } return result; } public static String getDefaultResourceLocation(Class classUsingResource) { if (classUsingResource == null) { throw new IllegalArgumentException("classUsingResource cannot be null"); } return classUsingResource.getPackage().getName().replace('.', '/') + '/'; } -- Peter Locke Senior Engineer / Dev Lead www.abebooks.com <http://www.abebooks.com/> t: 250.412.3240 f: 250.475-6014 e: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> -- P.S. I'm currently reading Rainbow Six <http://www.abebooks.com/servlet/SearchResults?bx=off&sts=t&ds=30&bi=0&an=Tom +Clancy&tn=Rainbow+Six> by Tom Clancy
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]