Blog

As noted on Manning's MEAP blog, Tapestry 5 In Action is the top book in the MEAP (Manning Early Access Program) list for the week ending March 31st, 2011:

  • Tapestry 5 in Action
  • Spring in Action, Third Edition
  • Scala in Action
  • Scala in Depth
  • Liferay in Action
  • Secrets of the JavaScript Ninja
  • Mahout in Action
  • Activiti in Action
  • Clojure in Action
  • Groovy in Action, Second Edition

That really reflects some pent-up demand, and I hope to see that level of interest continue.

Tapestry Kudos

A very happy Tapestry user, Adam Zimowski, recently posted to the Tapestry users mailing list a short description of his progress with a major Tapestry application:

Today I'm more in love with Tapestry 5 than ever before. I had a milestone demo at work which went well, and could actually show a good portion of a re-written website running and working! I'm at the heights of my project development. I'm sure there are still few more dark evenings loaded with frustration in store for my future, but I'm going to enjoy today...

From my daily work with T5 over past few months I can say with confidence it is a love-hate relationship. I get frustrated trying to get over the learning curve when things don't work. I don't enjoy stepping into the framework's guts unless I absolutely have to... But then... when I finally get things to work, it's like EVERY TIME the code is so elegant and gorgeous, it just makes me love Tapestry that much more. It's an amazing feeling, one I haven't had in many years as a Java developer.

And we love our new Spring-less world of Tapestry! We love that Tapesty IoC allows us to painlessly inject remote EJB proxies (smile) LOVE IT !!! Our app layer is as light as it can be. We literally run only on:

  • Tapestry
  • Apache commons-lang
  • And, of course, our EJB client libraries

In practice, we are able to concurrently run two completely different teams: Tapestry Devs and EJB/Hibernate devs. Both are experts within their own domain, no stepping on each other's toes (smile) Sure, this could be done with any framework, it's just that Tapestry makes it so darn easy and most importantly F-U-N (smile)

Thank you for this great framework!

Adam

You're welcome ... and lets hope the recent efforts on the Tapestry documentation, as well as Igor's new book, will help with those frustrations.

As expected, Tapestry 5.2.5 has been voted up as the latest stable version for Tapestry 5.2; we can now recommend that all users upgrade from 5.2.4 to 5.2.5.

The main fix in this release is TAP5-1208, which fixes the issue with null values of mutable fields of components, when debugging applications. This bug has been introduced in 5.2.4 with the deprecation of page pooling. The official release notes can be found here.

Tapestry 5.2.5 can be downloaded in either binary or source format. The release is also available via Maven:

<dependency>
  <groupId>org.apache.tapestry</groupId>
  <artifactId>tapestry-core</artifactId>
  <version>5.2.5</version>
</dependency>

I'm pleased to announce that the long awaited Tapestry 5 in Action book is available through MEAP now. Order the book here and start reading today.

Tapestry 5 in Action is a comprehensive guide that introduces Apache Tapestry and its approach to building modern web applications. The book walks you through Tapestry 5, from a simple Hello World application to rich Ajax-enabled applications. Written by a core committer, it provides deep insight into the architecture of Tapestry 5.

Kalle Kohonen, well known in the Tapestry community for his work on Tynamo and its many popular and independently reusable sub-modules, has been voted in as a Tapestry committer. Let's all welcome him aboard!

I recently stumbled across a blog post by Kalle Korhonen: Why Tapestry?. Kalle has been very busy with Tapestry as the force behind Tynamo, a RAD toolkit built on top of Tapestry.

On the subject of performance:

the performance of the framework itself, both in terms of CPU and memory consumption, is simply phenomenal. Performance matters.

On how Tapestry compares with the competition:

What I really like to give as an answer to people who ask why one should use Tapestry is this: because it is well-balanced and comprehensive. There are a lot of other web frameworks that are optimized with a certain thing in mind and in that narrow field, they typically beat the competition. It's difficult though to be a good all-around contender but that's exactly what Tapestry is all about.

On the effectiveness of Tapestry as a solution:

Today's Java is far from your grandfather's Java a few years back and Tapestry makes the best use of the more advanced, modern JVM techniques available today, such as bytecode manipulation, annotation-based meta programming and introspection without reflection. Tapestry code is purposefully remarkably succinct.

On how Tapestry enables modularity:

Perhaps we've gone a bit overboard with modularity, but since it's just that simple with Tapestry, most of our modules are independently usable but seamlessly work together in the same web application as soon as you add them to the classpath.

There's quite a bit more, and it is both favorable to Tapestry and well balanced. Read the full posting.

I'm very proud to announce that the next major release of Tapestry, release 5.2, is now available as Tapestry version 5.2.4.

This is the first stable release of Tapestry since 5.1.0.5 (back in April 2009), which is far too long a cycle. You might wonder: what's been the holdup? The answer, for myself personally, is that I've been using Tapestry on two very, very different applications for two very, very different clients and I've been updating Tapestry to embrace the real world concerns of both of them. At the same time, I've done about a dozen public and private Tapestry training sessions and gathered reams of input from my students.

Let's talk about some of the major enhancements in this release:

Removal of Page Pooling

Prior versions of Tapestry used a page pool; for each page, Tapestry would track multiple instances of the page, binding one page instance to a particular request. This was an important part of Tapestry's appeal ... all the issues related to multi-threading were taken over by the framework, and you could code your pages and components as simple POJOs, without worrying about the threading issues caused by running inside a servlet container.

Unfortunately pages are big: it's not just one object but instead the root of a large tree of objects: components and templates, bindings for component parameters, component resources, and all the extra infrastructure (lists and maps and such) to tie it together. Some of the largest Tapestry projects have hit memory problems when they combined deeply componentized pages with large numbers of parallel threads.

Tapestry 5.2 rewrites the rules here; only a single page tree is now needed for each page; the page and component classes have an extra transformation step that moves per-request data out of the objects themselves and into a per-thread Map object. Now, any number of requests can operate at the same time, without requiring additional page instances. Even better, the old page pooling mechanism included some locking and blocking that also gets jettisoned in the new approach. It's just a big win all around.

Live Service Reloading

People love the ability to change page and component classes in a Tapestry application and see the changes immediately; prior to 5.2 the same people would be disappointed that they couldn't change their services and see changes just as immediately. Tapestry 5.2 eliminates that restriction in most cases.

This is super handy for services such as DAOs (data access objects) where it is now possible to tweak a Hibernate query and see the results as immediately as changing some content in a template. This is another Tapestry feature that you'll find you can't live without once you use it the first time!

ClassTransformation API Improvements

At the heart of Tapestry is the Class Transformation API; the extensible pipeline that is the basis for how Tapestry transforms simple POJOs into working components. Prior to 5.2, if you wanted to do any interesting transformations, you had to master the Javassist psuedo-Java language.

Tapestry 5.2 reworks the API; it is now possible to do all kinds of interesting transformations in strict Java code; Javassist has been walled off, with an eventual goal to eliminate it entirely.

Query Parameter Support

Tapestry traditionally has stored information in the HTTP request path. For example, a URL might be /viewaccount/12345; the viewaccount part of the URL is the name of a page, and the 12345 part is the ID of an Account object. Tapestry calls the latter part the page activation context (which can contain one or more values).

That works well when the a page has a fixed set of values for the page activation context, but not so well when the values may vary. For instance, you may be doing a search and want to store optional query parameters to identify the query term or the page number.

Tapestry 5.2 adds the @ActivationRequestParameter annotation that automates the process of gathering such data, encoding that data into URLs as query parameters, and making it available in subsequent requests.

Testing

A lot of work has gone into Tapestry's testing support, especially the base classes that support integration testing using Selenium. The new base classes make it easy to write test cases that work independently, or as part of a larger test, automatically starting and stopping Selenium and Jetty as appropriate. Further, Tapestry expands on Selenium's failure behavior, so that failures result in a capture of the page contents as both HTML and a PNG image file. It is simply much faster and much easier to write real, useful tests for Tapestry.

JSR-303 Support

Tapestry now supports the Bean Validation JSR, converting the standard validation annotations into client-side and server-side validations.

Documentation

Tapestry's documentation has always been a challenge; for Tapestry 5.2 we've been doing a massive rework; doing a better job of getting you started using Tapestry; it's still a work in progress, but since it's based on a live Confluence wiki (and no longer tied to the release process) the documentation is free to quickly evolve.

Better yet, you don't have to be a committer to write documentation ... just sign your Apache Contributor License Agreement.

And in terms of exhaustive guides ... Igor Drobiazko's book is being translated from German to English as Tapestry 5 In Action.

Summary

I'm very proud of what we've accomplished over the last 18 months; we've added new committers, new documentation, and lots of new features. We even have a fancy new logo, and a new motto: Code Less, Deliver More.

Tapestry 5 was designed so that it would be possible to make big improvements to the internals and add new features to the framework without impacting existing users and applications; Tapestry 5.2 has validated that design and philosophy. It delivers a lot of punch in a non-disruptive way.

So, if you are looking for a high-productivity, high-performance web framework that doesn't get in your way, it's a great time to take a closer look at Tapestry!

Tapestry 5.2 Released

As expected, Tapestry 5.2.4 has been voted up as the stable version for Tapestry 5.2; we can now recommend that all users upgrade from 5.1.0.5 to 5.2.4. With minor exceptions, noted in the release notes, the upgrade should be as simple as changing version numbers in your POM (or otherwise dropping the latest version of the JARs into your project).

There is always a flurry of frantic help requests on the mailing list when people upgrade; more often than not, this is caused by a build process that leaves the old version JARs lying around rather than replacing them with the new version JARs. Please check your WARs carefully, and make sure that your servlet container is cleaning things up properly.

Tapestry 5.2.4 has been available to all users for nearly a month; only one important bug, TAP5-1372, was reported in that time (and at the last minute); this will be addressed in a subsequent bug fix release.

Tapestry can be downloaded from the Apache Mirrors, or via the central Maven repository:

 
<dependency> 
  <groupId>org.apache.tapestry</groupId> 
  <artifactId>tapestry-core</artifactId> 
  <version>5.2.4</version> 
</dependency> 

Curious to see a real Tapestry application live? Your wish is fulfilled; the Hotel Booking Demo is now available.It's based on a well-known Seam demo, but updated to make use of Tapestry, including some fancy Ajax updates. The code is available at GitHub.

Following a successful vote, the Tapestry team has released the latest (and likely, final) beta release of Tapestry 5.2, version 5.2.4.

This release consists of a modest number of bug fixes to 5.2.2, along with a few non-disruptive last minute improvements. Full release notes are available.

It is expected that Tapestry 5.2.4 will be voted as the stable 5.2 release in a few weeks time, barring any serious bugs being discovered in the meantime.

Tapestry can be downloaded from the Apache Mirrors, or via the central Maven repository:

 
<dependency> 
<groupId>org.apache.tapestry</groupId> 
<artifactId>tapestry-core</artifactId> 
<version>5.2.4</version> 
</dependency> 

Tapestry 5.2.3 was not released due to a problem with the Maven quickstart archetype, which was corrected in 5.2.4.

Following a successful vote, the Tapestry team has released the second beta release of Tapestry 5.2, version 5.2.2.

This release consists of a modest number of bug fixes to 5.2.1, along with a few non-disruptive last minute improvements. Full release notes are available.

Tapestry can be downloaded from the Apache Mirrors, or via the central Maven repository:

<dependency>
    <groupId>org.apache.tapestry</groupId>
    <artifactId>tapestry-core</artifactId>
    <version>5.2.2</version>
</dependency>

Following a successful vote, the Tapestry team has released the first beta release of Tapestry 5.2, version 5.2.1.

This release consists mostly of bug fixes on top of release 5.2.0. Full release notes are available. Mainly, this release improves live service reloading and a number of issues related to JavaScript and Ajax.

Tapestry can be downloaded from the Apache Mirrors, or via the central Maven repository:

<dependency>
    <groupId>org.apache.tapestry</groupId>
    <artifactId>tapestry-core</artifactId>
    <version>5.2.1</version>
</dependency>

Christophe Cordenier, known for his work on the collaborative authoring site Wooki, has been voted in as a Tapestry committer.

Robin Komiwes, known for his work on the collaborative authoring site Wooki, has been voted in as a Tapestry committer.

Ulrich Stärk, a very active Tapestry community member, has been voted in as a Tapestry committer. Welcome aboard, Uli!