Creator of the Apache Tapestry web application framework and the Apache HiveMind dependency injection container. Howard has been an active member of the Java community since 1997. He specializes in all things Tapestry, including on-site Tapestry training and mentoring, but has lately been spreading out into fun new areas including functional programming (with Clojure), and NodeJS. Howard is a DZone MVB and is not an employee of DZone and has posted 81 posts at DZone. You can read more from them at their website. View Full User Profile

Announcing Tapestry 5.2

  • submit to reddit

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 (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 into URLs as query parameters, and making it available in subsequent requests.


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.


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.


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!



Published at DZone with permission of Howard Lewis Ship, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)



Juan Maya replied on Fri, 2010/12/17 - 2:39am

Thanks to the Tapestry team. Tapestry5 is just a pleasure to work with, thank you for bringing such innovative ideas to the java world!

Cafebabe Ru(ssia) replied on Fri, 2010/12/17 - 3:57am

JSF2 already has all the mentioned and even more, why do I need Tapestry?

P.S. this is not a FUD, I really curious about it

Mladen Girazovski replied on Fri, 2010/12/17 - 5:42am in response to: Cafebabe Ru(ssia)

JSF2 already has all the mentioned and even more, why do I need Tapestry?

You might not be aware of it, but Tapestry is the original inspiration of JSF 2.0 Facelets, JSF has also incoperated proven concepts from other (Web-)Frameworks.

So, you might as well ask "Why do i need JSF?"

The answer is simple: There is so many Webframeworks for Java available (mainly because of the deficiencies of Java WebApp Standards) that it is  really hard to choose which one to take just because of the variety available.

Take the Framework that you and your team are comfortable with and that suits the needs of the project.

For me, JSF 1.x was such a waste of time in so many aspects, that am more than happy to try any other established webframework, except for one: struts 1.x

I have worked with struts since 2002 (RC1) and it has passed its experation date by now since at least 5 years.


Cafebabe Ru(ssia) replied on Fri, 2010/12/17 - 9:29am in response to: Mladen Girazovski

You might not be aware of it, but Tapestry is the original inspiration of JSF 2.0 Facelets, JSF has also incoperated proven concepts from other (Web-)Frameworks.

this is obviously an argument in favor of JSF2, am I right?

So, you might as well ask "Why do i need JSF?"

apparently not, because JSF2 has many other pros, at least it is actively developing standard and is supported by the plenty of developers (unlike some other Java Web Frameworks having one and half developer to develop it and constantly apologizing for delays, unimplemented features and open bugs).

yes I know about how it is difficult for Java developers to choose right web framework and this is why I'm asking what Tapestry will give them?

as for JSF 1.x it was just a platform and not production ready framework but if you equip it with a proper flesh (such as JBoss Seam) you will happy with it

Juan Maya replied on Fri, 2010/12/17 - 9:44am in response to: Cafebabe Ru(ssia)

You can check a brief comparison here: The way Tapestry-ioc is used through the Framework allows the developers to easily override or provide new functionality to the framework. Also, the metaprogramming concepts makes Tapestry a real pleasure to program. It's not only simple but powerful. And well, the main problem of JSF is also its advantage. Being a standard, controled by Oracle, it evolves really slowly. Open source frameworks will always be ahead in terms of innovation.

Cosmin Mutu replied on Fri, 2010/12/17 - 9:47am in response to: Cafebabe Ru(ssia)

Cafebabe, you`re flaming like you`re the creator of JSF2 :) ... relax a little. This guy was just announcing that he released a new version of his framework, why are you so furious? If you`re really interested in why do you need Tapestry, go look on its website, read documentation, write a prototype and then decide what to do.

All that you`re doing is criticising somebody`s hard work (open source) like he had some sort of obligation towards you. That`s just stupid. Now go sit in a corner.

Oh, just for the record I`m also using JSF2 as web framework.

Cafebabe Ru(ssia) replied on Fri, 2010/12/17 - 10:27am in response to: Juan Maya

Thank you for good link on presentation. Yes I agree with you that JCP control (not Oracle actually, because most of JSF2 improvements came from RedHat) is the obstacle. But now I still cannot observe any new impressive innovation ideas from other (non-standard) frameworks and Tapestry is no exception.

This is important to Java developer to know what web framework knowledge he should invest.

P.S. and regarding IoC - modern IoC such as Spring and CDI seamlessly integrate with web frameworks and especially with JSF2

Cafebabe Ru(ssia) replied on Fri, 2010/12/17 - 10:21am in response to: Cosmin Mutu

Cosmin, where did you found I'm furious, please explain? I'm really interested what I will found in Tapestry to prefer it before JSF or something else.

 Currently I go to and it seems I can easily replace 'Tapestry' by 'JSF' in chapter "What is Apache Tapestry?" and all that below.

Actually I'm concerning not about criticising somebody's hard work, but about will I (or you) waste time learning "just another web framework", if you do not understand this pain you apparently did not participate in decision-making.

Howard Lewis Ship replied on Fri, 2010/12/17 - 12:03pm

A framework is more than just a check-list of features; it is also how well those features are implemented, and how well all the features integrate and work together. JSF may have a similar check-list as Tapestry's (though I tend to doubt it), but what it won't have is the consistency that Tapestry brings, the conciseness, and the openness. It certainly doesn't have the performance.

Tapestry maintains a tricky balance: provide a great out-of-the-box experience, but also allow any part of the framework to be extended, customized, or overridden.

Until you've test-driven both of them, you won't have an inkling about Tapestry's advantages ... and until you've used Tapestry on a real project, you won't have a full understanding of the power and simplicity that Tapestry brings to the table.

What I hear time and time again from Tapestry's users is how much they love Tapestry and how much they dread ever having to work with any other web framework, on any other platform, after using Tapestry. This includes quite a few people coming into the Tapestry fold from JSF.

Cafebabe Ru(ssia) replied on Fri, 2010/12/17 - 4:07pm

but what it won't have is the consistency that Tapestry brings, the conciseness, and the openness. It certainly doesn't have the performance.

 Well, that is already something but in quite common terms.

 Ok, may be the Tapestry is more consistent however I doubt it because it is very difficult to achieve consistency for open framework, and it is very strange to expect less consistency from JCP standard than from separately developed framework. 

what about openness I believe JSF is over opened, it will be better for the framework users to have something less opened (but as platform with wide ecosystem it surely has to be open as much as possible). From my side I'd rather prefer to study developers with more narrow API and expect from JSF less ability "to be extended, customized, or overridden"

for example you can see on the mentioned presentation of Tapestry vs JSF that Igor Drobiazko used very compex (rather old-style JSF) way to implement query parameters but JS2 has other really elegant and more powerful solution for this. I don't this this was because the presenter was biased but because JSF is too open and so it can confuse developers

as for performance this is not an issue completely, I had JSF projects with very complex UI but the presentation layer was never be bottleneck, the performance issues much more often to expect at the persistence. Anyway, if I really need highload and high scalable presentation layer (it is 0.0..01% of all java projects) I should choose anything but stateful web framework.

don't get me wrong, JSF is not a silverbullet, it has very difficult learning curve and some other problems, but I still disappointed with such poor Tapestry presentation, I'm sure it actually has something to point over other web frameworks

Bob Harner replied on Fri, 2010/12/17 - 7:42pm

A little over a year ago some devs in my shop, including me, had been working with JSF 1.2 for about 18 months, waiting eagerly for 2.0 to come out.  Meanwhile, other devs had been using Tapestry 4.  Nobody was really thrilled with either, and we were all trying to decide whether JSF 2.0 or Tapestry 5 made the most sense for our future projects, or maybe something else.  I was leaning heavily toward JSF for all the usual reasons -- standards, available books, experienced developers, multiple component libraries, etc. -- but I decided I had owed it to the guys I was arguing with to at least learn what Tap 5 was like.  So I began working my way through the tutorial.

What I found there was a revelation.  Tapestry 5 was worlds different from Tapestry 4 (and my expectations), and at every turn I found that the Tap 5 developers' decisions had matched what I would have chosen myself.  And best of all, coding actually fun again.  I can't remember developing with JSF *ever* being fun.  Live class reloading, post-then-redirect, bookmarkable URLs, clean and simple conventions, built-in (XML-free) IoC, the whole thing really comes together nicely.

Everybody needs to evaluate these frameworks for themselves.  If you are just reading bulleted lists of features and trying to make technology decisions bases on the strong opinions you find in forums like this one then you're not really making smart decisions.  Try the out these frameworks and see what fits you and your developers best.  Don't cheat yourselves by assuming you can devine the real truth by reading some web site descriptions.

Josh Canfield replied on Fri, 2010/12/17 - 8:16pm

Full disclosure; I loved working with Tapestry5 so much that I became a committer.

I've been doing web development long enough to remember when it was a novel idea to keep a process running between requests. (remember writing CGI in C? those where the days...) Tapestry5 is the first framework that I've worked in that wasn't in the way of what I wanted to do. The 5.2 release makes it even easier.

If you like the idea of declarative programming with annotations then the ClassTransformation API Improvements can't be overlooked. One example I've recently been playing with is creating an @AsyncEvent which when added to an event handler adds continuation support from the servlet 3 spec. The setup and teardown for this requires some boilerplate, all nicely hidden by the annotation.

And of course the recent documentation effort is incredible. Those guys have been working hard to make it easier to help others understand what's so great about Tapestry. Definitely a big thank you to those involved in that effort.

Taha Siddiqi replied on Fri, 2010/12/17 - 11:05pm in response to: Cafebabe Ru(ssia)

These features might be present in many frameworks but what matters is how easy it is to learn, use, reuse, extend and master a framework and that is where tapestry is so great!

Mark Ss replied on Sat, 2010/12/18 - 12:42am in response to: Cafebabe Ru(ssia)

One of the main things I like about Tapestry is the way improvements consistently allow me to remove large amounts of code. It seems like every iterations adds several features that let me replace 5 to 10 lines of code with a single line that does what I need 95% of the time. I can always do the 5 lines of code if I need to specify something different from the default. It is nice to work with a tool where you feel like the more you invest in understanding it, the less code you have to write.

Antonio Miguel ... replied on Sat, 2010/12/18 - 6:26am

Thanks to the Tapestry team. I´m using this framework frequently and I want to say that is a Master Piece of Code. In my opinion the next hot-point is to continue enhancing the available documentation (online, books, .. ). I´m waiting the publication of "T5 in action" :D Thinking on the future, the integration of "Reverse Ajax" feature ( WebSocket, Long-Polling, Comet-D,...) would be reallly interesting. Best Regards,

Henk De Boer replied on Sat, 2010/12/18 - 8:40am

I definitely want to check out Tapestry 5 (last time I tried it was Tapestry 4).

As others have indicated, the amount of users of Tapestry is very low. In most surveys it ranks even lower than Wicket. Note that I'm not saying that it ranks so low because of technical deficiencies, just that the number of users is very low.

I'm currently a very happy JSF 2.0 user, so aside from personal curiosity, I would only seriously consider another framework if it significantly improves on JSF 2.0. Just by looking at Tapestry 5 and reading through some posts here I can see that it's "nice", but as of yet I don't see any major advantage.

I will try to code up some hello world stuff for my self, so I can judge better ;)

Prem Kurian Philip replied on Sat, 2010/12/18 - 9:22am

I have been following Tapesty development for several years now and I played with it a bit and was quite impressed.. but I have shied away from using it on any real projects because I found the lack of documentation to be daunting.

I must say that the new set of documentation is stellar! that is perhaps a even better "feature" than the other technical improvements. If even more can be done to clearly document every aspect of Tapestry with examples, it will go a very long way in increasing its adoption. I am now considering using Tapestry for some of my future projects.

My congratulations to Howard Lewis Ship and to the rest of the Tapestry development team.. and my sincerest thank you to the documentation team.

J Halbert replied on Sat, 2010/12/18 - 11:01am

Without doubt T5 is the fastest & simplest framework to develop web apps in Java I have used to date (I have previously used Wicket, Struts & JSF).

It is concise, well thought out & developer friendly. Convention over configuration, yet extensible and maintainable.

It allows for rapid prototyping combined with the power and support of a Java back-end.

Would not hesitate to recommend to anyone.

Greg PT replied on Sat, 2010/12/18 - 5:02pm

The Tapestry community is very active and provide excellent support via the mailing list.

Gunnar Eketrapp replied on Sun, 2010/12/19 - 2:50am

T5 rocks! Kudos to Howard and all other committers ...

The only reason that I would choose another framwork today was that someone else took the decision.

The docs has been sparse but the community has helped me whenever needed. Nowaday the docs starts to get real good ...

T5 - Try it - You'll Like It

Henk De Boer replied on Sun, 2010/12/19 - 5:34am in response to: Howard Lewis Ship

JSF may have a similar check-list as Tapestry's (though I tend to doubt it)

It's humble of you that you doubt it. But I think most users will understand that a small project like Tapestry can not really have all the features on its check-list that a popular framework with so much industry and community support like JSF has. It will probably be difficult to compete with just the core of JSF, but when you take everything provided by third party add-ons, extensions and component libraries into account, it really becomes an uphill battle for Tapestry.

Of course, it doesn't need to matter. If the smaller and more humble check-list of Tapestry satisfies a few users, than it's still worth it ;)

but what it won't have is the consistency that Tapestry brings

Do you refer here to the complete rewrite of each major version of Tapestry? I guess Tapestry is not yet up to par with JSF if those complete rewrites are still necessary, but maybe this is already starting to get better? I.e., is Tapestry 6 going to be a complete rewrite again, or will it be consistent with Tapestry 5?

, the conciseness, and the openness.

Yes, due to JSF's plug-in based architecture combined with liberal open source implementations, basically anyone can extend or modify JSF. This makes JSF (next to Eclipse) probably one of the most open frameworks in existence. I agree it will be difficult to compete with that, but maybe you could start with making some core parts of Tapestry also pluggable and replaceable by the end user?

It certainly doesn't have the performance.

I'm not so sure about that. Is Tapestry really that much slower than JSF? It's true that JSF performs really well, but do you have any benchmarks to back this up? Any particulars where JSF is really faster than Tapestry?

DualSoul none replied on Sun, 2010/12/19 - 7:39am

Have been using tapestry since version 3.   Will say version 4 still better than many frameworks avaliable in java space today.   T5 is simply amazing.

Vangel Ajanovski replied on Sun, 2010/12/19 - 8:10am

Define your problem first, then evaluate and choose your tools. No tool is the best (or the worst) for all problems. You can use a cork screw to open a Cola, but besides being advertised as a tool for opening bottles - it is not the most suitable tool for all types of bottle "closures".

A skilled software architect should be aware of and familiar with many different software paradigms and frameworks and many different programming languages and should be able to propose the one that is most suitable for the problem domain.

So, after learning Basic (in 1985 and later all other and Microsoft and Visual variants), Forth, Logo, Pascal (including all Turbo and Borland and Delphi variants), COBOL, Fortran, C, C++, Prolog, Lisp, Java, Haskell, Perl, PHP, Python - nowadays my language of choice is Java.

After developing web applications since 1995 and mobile web and wap applications since 2002 and working with CGI scripts, ColdFusion, ASP, pure servlets and portlets, pure applets, Oracle PL/SQL and APEX, JSP, JSF, PHP, Python, ASP .Net, script based, OpenXava, Tapestry 5, (and others I don't have time to mention - like lisp based CLIPS web apps for product recommendation based on production-rules) - nowadays my framework of choice is Tapestry 5.

This can be a personal choice and can reflect on the types of projects you have worked on in the past. Being a teaching assistant at a university and working with undergraduate students on tutorials and theory in practice  and having to monitor the process of learning of others as an everyday job might also be the reason for my choice.

If you want to create a bit more complex and interactive web applications, with lot's of custom behaviour (not just what the framework itself provides); if you want to customize how the framework works; if you want to be able to ask questions about the framework and have a prompt answer from skilled web developers and also from the creators of the framework themselves; if you want to code just your program logic (no framework code creeping inside your logic); if you prefer to have a convention for many things instead of configuration - like for example that an event method should be called onSuccess (and so spare a bit of your time, instead of configuring the name of the event inside a xml file, which you can still do but you dont need an additional xml file); if you like live reloading of changed java code (save your changes and press refresh in the browser); and many many other things - read on Tapestry web-sites and the developers' blogs - Tapestry might be a good answer. It is something like a swiss army knife. But a customizable one.

How to make an informed decision? With a prototype:

  • choose one simple and one complex use-case from your problem
  • draw a sketch of the interaction you need for both
  • code the html of the web and have the artists create a prototype graphics design
  • try to develop a working prototype that will be an exact implementation of the sketches and designs in several frameworks (some that you already know, and some that you don't)
  • spend some time to really learn the frameworks' intricacies to be able to create a more optimal solution (with the same look and feel)
  • learning time is not really relevant and comparable because some of them you will already know, and some of them you won't; and the point is to only learn once and code at least few years after that
Then decide on the framework depending on your own criteria (like for example - how easy it was to code, how many possibilites did the framework give you, was it extensible or customizable - you have to think on the future when more complex problems will arrive, how well it is supported - updates, security patches, etc... )


Denis Mccarthy replied on Sun, 2010/12/19 - 1:48pm

Well done Howard - Tapestry is the only Java web framework I've come across that I've actually enjoyed working with. Additionally, the code quality in Tapestry itself is as good as I've seen in the open source Java ecosystem - I used to point our junior developers at the source of the spring framework as a sample of how to write great code (which is still top class, of course), but as of T5 I recommend that they use Tapestry as a reference - concise, consistent, readable code with a number of examples of using advanced java patterns and techniques where they fit.

Chuck Kirng replied on Sun, 2010/12/19 - 8:51pm

I've used Tapestry 5 for over a year now on a data intensive monitoring application that includes reporting, icon-based dashboards, lots of charts and a fairly complex configuration. I have found Tapestry to be very productive and in general if something is hard to do you are not using Tapestry correctly.

The user community is dynamic and I've generally received a prompt answer to questions I've asked. It is true that prior to Tapestry 5.2 documentation for beginners needed improvement but once you get up to speed the framework is easy to use and the existing documentation is sufficient. Having said that documentation has been improved greatly in Tapestry 5.2.

When we started we felt it was a risk to use Tapestry 5 because it was very new but that it would be worth it if Tapestry worked as expected. That bet paid off.

Cosmin Mutu replied on Mon, 2010/12/20 - 2:16am in response to: Cafebabe Ru(ssia)

ok, my bad .. it seems i missinterpreted your "JSF2 already has all the mentioned and even more, why do I need Tapestry?" ... :) .. yes, i know you wrote the "this is not a FUD" but still, in my mind it sounded very aggresive :)

Dave Gubrud replied on Mon, 2010/12/20 - 1:45pm

We've been using Tapestry for several years now.  We are currently very happy with release and will look into the new features available in 5.2.4.  We also still have several older apps that still use T4!

 Thanks to Howard and all the committers for your hard work.  The code, docs, web-site, mailing list and community have all been a great assets.  Keep up the great work!

Josh Canfield replied on Mon, 2010/12/20 - 4:25pm in response to: Henk De Boer

Hi Henk,

One of the primary goals of the Tapestry5 team is to make future versions backward compatibility. We are trying to make upgrading to the latest as easy as possible, shooting for zero code changes for most apps. Obviously with a history of rewrites that stigma is going to be hard to shrug off. I wrote my first Tapestry5 app a little over 3 and a half years ago and upgrading has been about trimming out code that works but is better done using new features in the next release. Come visit us again in a few more years and maybe the team will have earned some trust in our stability? :)

Being built around a very configurable IOC container Tapestry5 lets you replace just about every part of any core service. If you don't want to totally replace an implementation class you can add "advice" and change behavior of individual methods in any of the internal, 3rd party or your own services. You have a lot of control, but most users won't need most of it most of the time ;)

The user list is active and there are more people answering questions all the time so anyone should feel free to run through the tutorial, take a look at the sample apps being built by the community and ask questions. If you see something that's easier to do in another framework point it out so we can make it better.

Michal Gruca replied on Tue, 2010/12/21 - 8:23am

I'm playing and using t5 for about 2 years. On my account is one application that went live and i'm still enthusiastic about that framework as it solves all issues I had with java web development in the past.

Recently i mobilized myself and started to write a blog about T5 to contribute somehow to this project.

Great job Howard and Team. I'm looking forward for next releases

Nicolas Bouillon replied on Thu, 2010/12/23 - 5:50am in response to: Howard Lewis Ship

I'm an entusiast user of tapestry 5 since one year and a half, and I couldn't get back to struts1/2 or any other web framework I used before.

 But when you (Howard) say

Tapestry maintains a tricky balance: provide a great out-of-the-box experience, but also allow any part of the framework to be extended, customized, or overridden

 The core components are sometime a real pain in the ass to extend.

The reason is some compnents use the @Property annotation on private field, instead of plain old public getters and setter. Therefore, a subclass cannot access them. Or because some key methods i would like to override are package-private (no modifier) instead of "protected", there is no way to override them.

Another problem is that the core components sometime uses services or classes in tapestry5.internal  package,  which is decouraged to use by end-users, because backward compatibility is not garanteed. But if the core components need to access those services, it is more likely that people could need them in their own compoonents.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.