I am both happy and proud to announce the release of Tapestry 4.1.2 and OGNL 2.7. The official change list can be found both here (Tapestry) and here (OGNL).

There has been such an immense amount of work put in to both of these releases that it doesn’t do them justice to just link to a simple jira change list:

  • Performance - The biggest reason for the delay in this release of Tapestry has been in waiting for the new OGNL bytecode compiler enhancements to stabilize. None of this would have been possible without the kind support / dedication of resources by Patrick Lightbody of OpenSymphony/WebWork/Struts2/Selenium/others I don’t know about. Thanks Patrick! The actual performance boost when using this new OGNL version for existing Tapestry 4 users will be like night and day. The numbers are roughly available in the previous post on the subject - but you are looking at something around 6 times faster than the old interpreted mode was capable of doing.
  • Memory consumption / More Performance - The ever consuming obsession that has become YourKit has done almost as much for performance and memory consumption that the OGNL bytecode enhancements have. Development mode issues with running out of jvm memory have been eliminated completely - as well as a number of unneccessary memory consumers in various internal portions of the framework. Page/component instances are now pooled by a much more robust / configurable pool implementation that finally allows idle pages / components to be discarded from the pool - thus reclaiming valuable heap space in production applications at non peak times. As for the performance improvements, well - let me just say that if you have used YourKit before then you’ll know what “the only hot spots left are in the servlet container itself” means. It’s damn fast, ok? :)
  • Testing - A common complaint in the past is that the framework hasn’t really been very giving in sharing how it tests components/pages internally. Obviously people like to test things these days so it makes sense to help with that. We’ve refactored things/moved code around some and now have a new tapestry-test library that you can use to help test your Tapestry applications here: http://tapestry.apache.org/tapestry4.1/tapestry-test/index.html .
  • Asset caching - What we feel constitutes one of the higher quality image/javascript/resource caching systems available for standard out of the box servlet apps - (even rivaling some servlet containers in many instances) - is also now available. The details of why/how that came about can be read about here. These enhacements do all kinds of nice things for your assets for you automatically - such as gzipping javascript and css resources as well as handling Etag header fields and similar logic - all while appropriately handling all of the various inevitable browser version quirks that constitute the bain of every web developers existence..
  • Google rounded corners / drop shadow image services - Since we know many of you will only be lured by shiny baubles (myself included) - we have added a little something extra to entice you with via the very robust image generation services.
  • Documentation - We know people haven’t been very happy about this aspect of things in the past. A number of big changes have slowly been happening in this area - the biggest being a great new series of tutorials covering almost all of the common issues you’ll run across in Tapestry 4 development by Alexander Kolesnikov. They can be found here. Many updates/additions/improvements have been made to the overall documentation effort of Tapestry 4 as well whenever we have found any obvious holes. What’s even better than documentation though? Not needing it to begin with. While we have spent a great deal of time updating and adding to the documentation we have also spent a lot of time improving the framework in general and eliminating any obvious quirks that might have previously lead people to wanting more documentation to begin with. We think you’ll find that a lot more of your typical every day tasks will really “just work” as expected.
  • Dojo && Prototype/Scriptaculous integration - The bundled version of Dojo provided by Tapestry has been upgraded to the latest 0.4.3 version. (ok, the latest is technically 0.9 but first things first..) This has allowed us to not only get all of the great bug fixes / improvements made by the team but also to take advantage of the new layered build system developed by James Burke of AOL. The layered build system has increased the speed of the overall page load time of any given page substantially and we are very happy/thankful for his awesome work in this area. This version also features integration of the latest versions of Prototype/Script.aculo.us libraries and the requisite component that uses them which has been named “Suggest“.
  • Ajax / JSON Support - Second only to the performance improvements has been the amount of work put in to refining and improving the Tapestry AJAX/JSON support. Client side profiling / performance improvements have overall also been substantially improved. New documentation has been added covering various key areas of this portion of the API as well as some new naturaldocs generated apidocs for our client side javascript library. I don’t feel bad in saying that Tapestry 4.1.2 probably represents one of the most robust java web framework libraries available for AJAX applications in the open source java world today. We’ve been doing this for a really long time now and kind of have this area covered. Show me something that does as much as Tapestry does while also being flexible / debuggable enough to allow you to easily branch off and do things your own way and I’ll concede defeat. Until then….it’s well worth checking out if you haven’t tried this particular side of Tapestry yet.

  1. Gravatar IconBorut

    Congratulations!

    Now that the core of the framework is stable, may I suggest a coordinated effort in collecting, documenting and publishing more (ajax) components and/or libraries on the main T page.

    Also, as Tapestry is aimed at building enterprise applications, such section is very much needed on the front page. Security (acegi) and first class documentation on integration with other popular frameworks is crucial for introducing Tapestry in corporations.

    Thanks again for all the hard work.

  2. Gravatar IconAshwin Jayaprakash

    I’m very pleased to see the improvements made to OGNL. I don’t see the new 2.7 version on the OGNL Website. Can’t we download OGNL 2.7 separately?

  3. Gravatar IconAshwin

    Hi, I’m facing a problem with the new API:

    The expression.getAccessor() sent to the “Ognl.getValue(expression.getAccessor(), .. .. ” method throws a ClassCast Exception. I’d appreciate it if you could tell me what I’m doing wrong.


    public static void main(String[] args) throws Exception {
    SimpleNode expression = (SimpleNode) Ognl.compileExpression(new OgnlContext(), null,
    “a[0] <= 30″);

    ExprRoot root = new ExprRoot();
    Object[] array = new Object[] { “AJ”, 250000, 10.0 };
    root.setA(array);

    Map<Object, Object> context = new HashMap<Object, Object>();

    context.put(”rowStatus”, “-12″);
    Object retVal = Ognl.getValue(expression.getAccessor(), context, root);
    System.out.println(retVal);
    }

    Exception in thread “main” java.lang.ClassCastException: ognl.ASTLessEq227815440Accessor cannot be cast to ognl.Node
    at ognl.Ognl.getValue(Ognl.java:489)
    at ognl.Ognl.getValue(Ognl.java:458)
    at temp.OgnlExpressionTest.main(OgnlExpressionTest.java:125)

  4. Gravatar IconFrances

    Is there an upgrade guide anywhere? I’m having a heck of a time upgrading an Ant project. I’m kludging together a Tacos 4.1.0 jar but it’s slow going. More information would be immensely helpful.

Leave a Comment