Velocity - Velocity Changes

About Overview Getting Started Download Install Design Contributors ChangeLog Coding Standards License TODO Report Issues Community Powered By Velocity Get Involved Mailing Lists CVS Repositories Docs User's Guide (English) User's Guide (Finnish) User's Guide (French) User's Guide (Spanish) Developer's Guide VTL Reference Guide Specification Javadoc Tools Velocity Tools Anakia : XML->doc tool Texen : text generation DVSL : XML xformation Veltag : JSP taglib Migration to Velocity Editors and IDEs Comparisons YMTD VM/WM Differences JSP vs. Velocity XMLC vs. Velocity Site Translations English Japanese |
Velocity Changes
> This document tracks the changes in Velocity between releases.
> 1.4-rc1
> This section describes changes to the 1.4 branch after rc1. It was released as v1.4 on April 14, 2004. Update license to Apache Software License v2.0
> 1.4
> This section describes changes to the main branch after the 1.3 release. They were released as part of 1.4 rc1 on Oct-9-2003. Added support for dynamic selection of output character encoding to VelocityServlet. By default, the selected encoding is the value of the output.encoding Velocity property, but can be made dynamic by overriding the new chooseCharacterEncoding() method. (dlr) Bill Boland pointed out that VelocityServlet's pooling of VelocityWriter was preventing the underlying OutputStreamWriter from being garbage collected. This was fixed by clearing the VelocityWriter's reference to its internal OutputStreamWriter to allow the latter to be GC'd while VelocityWriter is pooled. (#18951) Deprecated org.apache.velocity.runtime.Runtime in favor of the RuntimeInstance and RuntimeSingleton classes. (dlr) Fix to MethodMap part of introspector to make the overloaded method selection work as specified in the JLS, from Attila Szegedi. (gmj) Tiny fix for bug where multiple slashes not getting rendered correctly. (#7380) (gmj) Fix for bug where #set($foo = !true) not working. (#7387) (gmj) Fix for bug where $##(nl) foo ate the $ (#7381) (gmj) Disallow any WORD tokens for directives except 1st arg to #macro() or thi 'in' in foreach. (#7383,#7384) (gmj) Remove '=' as a valid token for anything but #set() as nothing else can do assignment. (#7385) (gmj) Fix problem where VM in stringlit as arg to VM NPE'd. Whoops. (gmj) Deprecated `Velocity.templateExists(String)` in favor of the more appropriately named `Velocity.resourceExists(String)`. (dlr) Deprecated VelocityServlet's `properties` key in favor of the namespace protected `org.apache.velocity.properties` key. (dlr) Update user guide - remove confusing (wrong) content. (gmj) Brought all introspective-ish behavior under one umbrella interface, Uberspect, to allow customizable, pluggable introspection. (gmj) `` Fixes for bug 7684 : make sure event handler called with real reference literal even if a quiet reference. Bug 7183 : fixes to win32 .bat files in examples (gmj) Fix for bugs 8517, 6955 : anything ...#set... was confusing the parser (gmj) Removed deprecated use of DEFAULT_OUTPUTTER.output() in Anaka's NodeList (gmj) Upgraded JDOM to v1.0b9 (gmj)
> 1.3.1-rc2
> This section desscribes changes to the VEL_1_3_BRANCH after the 1.3.1-rc2 release. It was released as 1.3.1 on it's own branch, VEL_1_3_1_BRANCH on March 31, 2003.
> 1.3.1-rc1
> This section describes changes to the VEL_1_3_BRANCH after the 1.3.1-rc1 release. This was released as 1.3.1-rc2 on July 24, 2002. Another fix to primitive argument introspection problem, suggested by Chris Felaco(gmj) Another minor introspection tweak, for null values (gmj)
> 1.3
> This section describes changes to the VEL_1_3_BRANCH after the 1.3 release. This was released as 1.3.1-rc1 on July 22, 2002. Fixed primitive argument introspection problem. (gmj)
> 1.3-rc1
> This section describes changes to the VEL_1_3_BRANCH after the 1.3-rc1 release. This branch was released as v1.3 on July 7, 2002. Fixed javadoc in ClasspathResourceLoader (gmj) Backport from HEAD the #foo("#bar('a')") NPE fix (gmj) Update User's Guide - remove confusing and wrong content. (gmj) Fixed problem discovered by Ivan Bella where concurrent method invocations with varying parameters would be incorrect. (gmj) Brought recent Spanish and French translations of the User's Guide to the 1.3 branch. (gmj)
> 1.3-dev
> This section describes changes to the main branch after the 1.2 release. This was then branched as VEL_1_3_BRANCH in CVS and released as v1.3-rc on March 17, 2002. Fix to LogSystem. ORed when I should have ANDed. Reported by Matt Gould (mpg@mpgsoftware.com). (gmj) Documentation patch for 'getting started', reported by Yuji Kumasaka (kumasaka@mms.intec.co.jp) (gmj) Changed AnakiaTask to not specify Xerces, but let JDOM find a parser. (gmj) Change reported in bug #4256 by Jim Mackraz (jim@mackraz.com) reviewd and fixed by DLR. (gmj) Fixed Velocimacro autoload infinite loop bug. (gmj) Update docs re autoload VM and repeatability of init() (gmj) Added constructors to VelocityContext for plug and play interoperability with the java.util.Map interface (dlr, gmj) Committed Texen patches from Stephane Bailliez (sbailliez@imediation.com) anticipating review by the Texen aficianados in the Velocity community. (gmj) Fix problem where local-scope VMs were interfering with VM library autoloading. (gmj) Added support for primitive arrays in #foreach() re bug #4370 (gmj) Parser fixes for $foo.bar} and $foo.bar#if (gmj) Changed build targets to not include external dependencies in velocity jars by default. (gmj) Added support for an 'ApplicationContext' to allow the application set an Object accessable to custom loaders and loggers. (gmj) Added `cleanup()` hook method to `TexenTask` to easily allow subclasses to perform cleanup activities without overriding `execute()`. (dlr) ResourceManager and ResourceCache are now pluggable. Default implementations work as they always did. (gmj) Added support for allowing user to configure pluggable directives. We supported it, but offered no way of actually configuring it as such. (gmj) Fixed lonely # in #macro() bug reported by Tim Chamberlain (tchamberlain@sportingnews.com) and added template test. (gmj) Deprecation update : AnakiaTask b/c JDOM, default logger b/c LogKit 1.0. (gmj) New simple log4j logger, uses either an existing category if that is passed to it, or just writes to a new file. Log support enhanced to include automatic selection for default file logger using either Jakarta Avalon Logkit or Jakarta Log4j, whichever it finds in the classpath. (gmj) Fix for problem reported by Robert Edgar where a reference-ish entity like \${foo} wouldn't render the preceeding \ Support for is<Property>() introspection. (gmj) Added better resolution of method ambiguity based on invocation parameters so we better choose between overloaded methods. (gmj) Patch from Michael McKibben for introspector to fix problem where public interface methods implemented by a private or default class were skipped when resolving access. (gmj) Modified the Introspector and environs to make it independent of Velocity-specific imports for reuse by others. (gmj) Patch from Dan Finkelstein to fix problem when a resource loader in named, but has no defined parameters, resulting in NPE from ResourceManager. (gmj) Adjusted formatting of the default error output from VelocityServlet as suggested by Igor Fedulov. (gmj) Fix for so-called runt reference bug reported by Lukas Zimmermann such that $foo.bar()RUNT had following RUNT treated as a reference. (gmj) Update servlet1 example to use the 'new' handleRequest() (gmj) Added support for ${user.home}/build.properties to Ant build file. (dlr) VelocityServlet subclasses may now use a web.xml context parameter as the default value for the path to their velocity.properties file. (dlr) Added patch from Sylwester Lachiewicz (matrix@plusnet.pl) for the DataSourceResourceLoader to bring the javadoc up to date re the properties example, and he also added examples for the DataSource configuration as well as the syntax needed to create a compatible table. (gmj) Small fix to enable logical complement #set($foo = !$bar), as reported by Chris Rousseau. (gmj) Doc fixes by many. Thanks all. (gmj) Fix to StringUtils.chop(). (gmj) Fix to StringLiteral bug found by Stephane Bailliez - in high load situations it was possible to get an NPE if the timing worked out just right. Also fixed a side-effect found by Victor Salaman. (gmj) Fix to $foo## bug reported by Nathan Bubna. (gmj) Fix to VM bug found by Paulo Gaspar, where when using inline-scope VMs and VM recursion the namespace got dumped at the wrong time, killing the recursion. (gmj) Add class to provide bean-like access to Texen. (jvz) Small introspection side-effect fix suggested by Sven Meier, prevents Obj[] from getting altered in event of null value. (gmj) Log4jLogSystem deprecated in favor of the simpler SimpleLog4jLogSystem. (gmj)
> 1.2
> 1.2 was released on December 9, 2001.
> 1.2-rc3
> This section describes changes to the VEL_1_2_BRANCH after the 1.2-rc3 release. 1.2-rc3 was released on November 7, 2001 for a quick community check. It is intended to be the final rc for the 1.2 release. Small fix to Velocity.java and VelocityEngine.java for invokeVelocimacro() - the were broken in the last major VM change (months ago) and never noticed. (gmj) Added notes re the new no-dep jar. (gmj)
> 1.2-rc2
> This section describes changes to the VEL_1_2_BRANCH after the 1.2-rc2 release. 1.2-rc2 was released on October 18, 2001 as an administrative fix for 1.2-rc1 (files were damaged.) Backport the 'disappearing curly' and 'nit' fixes from 1.3 (gmj) Backport autoreload infinte loop and local-scope interferance bugs. (gmj ) Backport Texen patches from Stephane Bailliez and follow-on fixes from jvz and dlr. (gmj) Changed build targets to not include external dependencies in velocity jars by default. (gmj)
> 1.2-rc1
> This section describes changes to the VEL_1_2_BRANCH after the 1.2-rc1 release. These are updates working towards a rc2 or final. Fix to LogSystem. ORed when I should have ANDed. Reported by Matt Gould (mpg@mpgsoftware.com). (gmj) Documentation patch for 'getting started', reported by Yuji Kumasaka (kumasaka@mms.intec.co.jp) (gmj) Changed AnakiaTask to not specify Xerces, but let JDOM find a parser. (gmj) Change reported in bug #4256 by Jim Mackraz (jim@mackraz.com) reviewd and fixed by DLR. (gmj)
> 1.2-dev
> This section describes changes to the main branch after the 1.1 release. This was then branched as VEL_1_2_BRANCH in CVS and released as v1.2-rc1 on September 26, 2001. Fix to AbstractContext to 'roll forward' EventCartridges to ensure that the last one added is available at render time. (gmj) Small changes to developer docs re jar-src target and docs target. (gmj) Small changes to AND and OR nodes to support the legal but wacky use like #set( $foo = ($woog || $bar ) ). (gmj) Major change to Parser char stream - no longer using the stock, javacc generated ASCII 8-bit char stream but rather a Unicode 'custom' char stream. This solves the problems reported with 16 bit characters that unluckily have a 0a or 0d in the low-order byte. (gmj) Added additional templates to encoding test using contributions from Ilkka Priha, Michael Zhou and Vitaly Repetenko. Thanks guys! (gmj) Update from Russel Edens to clear fileWriter cache for Texen's Generator.java. (JSS) Fix to VM system to prevent dumping of VM namespace when using namespaces (in local.scope). (gmj) Fix to VM system to have correct 'schmoo' output of a non-reference passed as arg to VM. Thanks to DLR and Paulo for flogging this out of me :) (gmj) Updates to StringUtils from Robert Burrell Donkin. (gmj) Added MIE propogation from #parse() and VMs to propogate out. Thanks to Michael Salmon for pointing this out. (gmj) Added logging interface to Velocity class for completeness. (gmj) Patch by Michael Salmon to WebMacro converter tool to let arbitrary set of files be converted. (gmj) TokenManagerError now thrown as ParserException to allow catching at application level. (Suggested by Tim Joyce.) (gmj) Small parser fix to get ObjectArrray and IntegerRange handling right everywhere. (gmj) Speed optimzations for test provider. (dlr) Enhancement to MIE message suggested by Conor MacNeill to make interpretation of exception more useful when debugging. (gmj) Small fix to #parse() and #include() such that when the template/resource was not file based but stream based, there was no 'parent template' encoding to use for decoding the arg to #parse/#include. Runtime default is used. Thanks to Dan Finkelstein for finding this bug. (gmj) Fix to problem reported by Andreas Wikberger (and patch too!) where two loads were required to have template refresh after change when time-based caching was enabled. (gmj) Updated log4j adapter to be compatible with 1.1.x and updated jars in build/lib to match. (gmj) Changed VMFactory to not output scary messages when library is not found or empty string. Suggested by Tal Dayan. (gmj) Added auto alternator functionality to VelocityFormatter. (dlr) Modified Velocity to support separate runtime instances and added application support class o.a.v.app.VelocityEngine (gmj) Updated junit to v3.7 in build/lib (gmj) Checked in patches from Attila Szegedi which improves the XPath support in Anakia. These are fully backwards compatible with previous versions. (jss) Fixed the build/test.sh convenience script to use Ant. (jss) Intrspector fix using contributions from Attila Szegedi (szegedia@freemail.hu) - removes problems associated with access to inner classes and public interfaces on default or private facades. (gmj) Added new autoreload feature for VM system - VM global libraries will be automatically reloaded on use. See 'Configuration' section of developers guide for more info. (gmj) Logging changes : moved prefix out of RuntimeInstance into logger impl to support better log4j users who don't need it. Changed ExternalLoggerTest to support that as well as sep runtime instance. Needed to support log4j adapter contrib from Jeroen C. van Gelderen. Also, LogSystem.init() now can throw an Exception. (gmj) Also added AvalonLogSystem switch to allow user to simply specify by name a logger from the existing hierarchy. Thanks to Carsten Ziegeler. (gmj) Texen enhancement - allow to use template resources from a jar. (jvz) Allow proper propagation of VelocityExceptions (RNFE, PEE, and MIE) from #parse() and #include(), where appropriate. (gmj) Bug fix to allow formal reference to be passed into VMs. (gmj) Revamping of Introspector to allow dump of cache when classloader change is detected, by Attila Szegedi and Paulo Gaspar. (gmj) Added testcase to verify introspection cache dumped when classloader changed. (gmj) Added PrimordialLogSystem and changed RuntimeInstance to use it. (gmj) Minor fixes to ASTRefernce presentation. (gmj) Texen enhancement - allow multiple properties files to be specified. (jvz)
> 1.1-rc2
> This section describes changes to the VEL_1_1_BRANCH after the 1.1-rc2 release. This was released as v1.1 on June 16, 2001. Update from Russel Edens to clear fileWriter cache for Texen's Generator.java. (JSS)
> 1.1-rc1
> This section describes changes to VEL_1_1_BRANCH after the 1.1-rc1 release. This was released as v1.1-rc2 on June 2, 2001. Fix to AbstractContext to 'roll forward' EventCartridges to ensure that the last one added is available at render time. (gmj) Small changes to developer docs re jar-src target and docs target. (gmj) Small changes to AND and OR nodes to support the legal but wacky use like #set( $foo = ($woog || $bar ) ). (gmj) Major change to Parser char stream - no longer using the stock, javacc generated ASCII 8-bit char stream but rather a Unicode 'custom' char stream. This solves the problems reported with 16 bit characters that unluckily have a 0a or 0d in the low-order byte. (gmj) Added additional templates to encoding test using contributions from Ilkka Priha, Michael Zhou and Vitaly Repetenko. Thanks guys! (gmj)
> 1.1-dev
> This section describes changes to the main branch after the 1.0.1 release. This was then branched as VEL_1_1_BRANCH in CVS and released as v1.1-rc1 on May 20, 2001. Removed build.sh and build.bat scripts in favor of making people "install" Ant. Added Kent's, others and my changes to VelocityServlet. Fundamental change is changing handleRequest() to take a req, resp and ctx args, as well as making returning `null` permissible to indicate that request is taken care of. (gmj) Added support for alternate encoding for templates (input sources). It is now controllable by two properties (input and output), and tested with UTF-8. UTF-8 rocks. Why are there others? :) Also added testcase. (gmj) Fixed problem where MethodInvocationExceptions were not correctly generated for method exceptions in a few places. All seems to work now. (gmj) Added fix from Charles Bennet for build.xml to include all necessary parts in classpath for building examples. (gmj) Performance improvment additions for the AST, the majority from Kent Johnson, plus his suggestions for Configuration and ResourceManager (gmj) More MethodInvocationExceptions fun : the LHS of a #set() could throw an Exception, and we wouldn't propogate it. (gmj) EventCartridge support. See docs :) (gmj) Documentation : basic EventCartridge description. (gmj) Added request specific encoding specification for templates. (gmj) Additions from Tim Joyce for more Method Exception propogation and exception event handling. (gmj) Performance patches from Kaspar Nielsen for ASTDirective and Include. (gmj) Texen patch from Robert Burrell Donkin which makes Texen throw all exceptions rather than eating them, and some javadoc. (gmj) Fix for the much acclaimed and dreaded #$foo, $$foo #$#$foofoo, etc bug. (gmj) Added some autoconfigure support for the servlet example to hele users new to Servlets, and added a little README to help then find Tomcat and setup a webapp. (gmj) Removed the .close() of the output stream in VelocityServlet and symmetrized VelocityWriter recycle. (gmj) Converted from using the Velocity Configuration class (now deprecated) to the Jakarta Commons collections component's ExtendedProperties class. (Which came from Velocity and was renamed.) Should result in no changes other than deprecation of Configuration and one deprecated method in o.a.v.app.Velocity. (gmj) Removed build/build.sh and build/build.bat and build/lib/ant*.jar to move to explicit Ant-based build. (jss) Changed JarResourceLoader to use normal 'path' configuration key and added jar test to MultiLoaderTestCase. (gmj) Updated the regexp in the WM conversion tool. (dlr) Added EventHandler test case and example, and removed NullReferenceEventHandler as redundant. (gmj) Moved all event-realated things to o.a.v.app.event package, updated all things that depend upon it, and modified the context stuff to support a public event interface. Also renamed the null set method to something more appropos, and added arg to method. (gmj) Added switch to turn off 'resource found' messages in ResourceManager. Default is on. Key is 'resource.manager.logwhenfound'. (gmj)
> 1.0.1-dev
> Released as v1.0.1-rc1 on April 10, 2001. No changes following rc1. Released as v1.0.1 on April 22, 2001. Small fix to ASTGENode.java to catch NPE if LHS or RHS is null or not int or Integer. (gmj) Added examples-clean-forumdemo target to build.xml for cleaning up after building the forumdemo. (JSS) Small fix to ASTAndNode.java to short circuit if LHS is false, and to log an error of LHS or RHS is null. (gmj) Small fix to ASTGTNode.jave to catch NPE if LHS or RHS is null. (gmj) Documentation : changed license instructions in coding-standards.xml (gmj) Added 'throws Exception' to handleRequest() in VelocityServlet.java (suggestion from Christoph Reck) (gmj) Updates to README.txt and examples/README.txt as suggested by Kent Johnson (gmj) Added Enumerator as a valid iteration type for #foreach() - added warnings to use of same to documentation. (gmj) Added panic sqawk in AvalonLogSystem() to also go to stderr. (gmj) Finished all comparison nodes (NPE prevention and good logging) and enhanced logical.vm test template to try them all. (gmj) Added xmlapp_example to examples, and added to examples build target. Was moved from whiteboard. (gmj)
> 1.0b3
> Released as version 1.0 on April 2, 2001 Documentation: Fix the VTL Reference guide for the #if statement. Thanks to Joaquim Carvalho for the find. (JSS) Documentation: Fixed the html in the user guide that generates the TOC so that the numbers come out in proper order. (JSS) Added common base class for application-level exceptions in package org.apache.velocity.exception. Thanks to Kyle Downey for the suggestion. (gmj) Added javadoc to o.a.v.context.AbstractContext clarifying which of the internalXXX methods are required. Thanks to Joshua Levy for the suggestion. (gmj) Added license and javadoc to examples/context_example/DBContext.java to clarify why some internalXXX methods are stubbed out. (gmj) Documentation : Clarification of VM properties and added note on VM declaration / usage order in user guide. (gmj) Fixed HttpServletRequestWrap.java - getInputStream() wasn't calling the method on the wrapped HttpServletRequest. Thanks to Shahar Solomianik. (gmj) Removed build.compiler from the build.xml file. (JSS) Fixed problem found by jon where high concurrency would lead to a dry parser pool, which would lead to vast unpleasantness masked as resource access errors. All seems to be better now. Simple fix, so little risk. (gmj) Added `parser.pool.size` as a configuration parameter to help tune Velocity configurations for high concurrency loads. (gmj) Documentation : developers-guide - information/example on making a custom logger, and start of work on documenting resource loaders. (gmj) Removed some debugging gibberish from InternalContextAdapterImpl.java (gmj) Committed John McNally's Texen patch to texen's Generator.java to keep from accumulating introspection cache data in iterative calls to parse() with template caching off. (gmj) Documentation : added some special-case Context information and a secion on Vel and XML in the developers guide. (gmj)
> 1.0b2
> Released as version 1.0 beta 2 on March 26, 2001 Make the distribution have CRLF for all of the text files (JSS). Fixed release packaging to create things in the right directory structure (JSS). Re-added 'include' support for Configuration. (JVZ) Fixed VMProxy bug when reference arg was null. (#1074) (gmj) Fixed nullpointer problem in cache refresh in ResourceManager (reported by Ilkka Priha) (gmj) VelocityServlet now respects the 'default.contentType' property again. That must have fallen out during the 'request process' rework in VelServlet. (reported by csterg@aias.gr) (gmj) Changed AnakiaTask and TexenTask to use the canonical template file path rather than the literal string specified. Motivated for ease of gump-tion. Also added failonerror to the testcases.xml for the same reason. (gmj) Added Sam's suggestion for normalizing \n[\r] when comparing results to expected results in the testbed via BaseTestCase (gmj) Qualified import statments in Generator.java. Added tests for automatic boolean mapping in TexenTestCase.java. Added default boolean mapping to texen for properties used with the contextProperties option. Allow variants on boolean values in Configuration.java, and changes to relevant templates in testbed. Added default objects to context in TexenTask.java. (JVZ) Documentation changes to Configuration.java (DLR) Augmented the MethodInvocationException message in ASTMethod to make the stacktraces more useful - noted from some traffic on Turbine list. (gmj) Added powered by logo. Look in xdocs/images/powered-by-logo.psd/.gif (JSS) Changed the internals of the Configuration class so that setProperty(K,V) will replace the value at K with V; addProperty(K,V) works the way setProperty(K,V) used to: if there is a value already stored at K then V is added to the vector. If nothing is being stored at K then the scalar V is simply added. setProperty(K,V) is basically a short form for clearProperty(K)/addProperty(K,V). Also added setConfiguration(C), so that an application using velocity could easily take a subset of the application configuration using C.subset(velocityProps) and set the whole velocity configuration at once. This is now how the velocity service works in Turbine. (JVZ) Added support to the Runtime/Velocity classes for addProperty(K,V). (JVZ) Added support to Runtime/Velocity classes for setConfiguration. (JVZ) Confirmed that the build.bat works on Win98 as well as made the classpath that the build.bat generates equal to the one that build.sh generates. (JSS)
> 1.0b1
> Initial release.
Copyright © 1999-2004, The Apache Software Foundation