Discussions

News: Tapestry 5.0 Final Release - 5.0.18

  1. Tapestry 5.0 Final Release - 5.0.18 (27 messages)

    After nearly three years of development, the final release of Apache Tapestry 5.0 is now available for download. Apache Tapestry 5 is a total rewrite of the Tapestry web application framework, bringing forward Tapestry's core concepts: reusable components, true encapsulation, readable templates, well thought-out localization/internationalization, and easy management of server-side state. Tapestry 5 builds on top of this with a host of new features:
    • True POJO component classes: no base classes to extend, no interfaces to implement.
    • Live class reloading: no need to redeploy to see code changes.
    • XML templates with namespaces.
    • Minimal configuration via naming conventions and annotations.
    • Integrated Ajax support, built on top of Prototype and Scriptaculous.
    • Automatic client-side form input validation.
    • High performance via pooled objects (and by avoiding the use of reflection).
    • Automatic REST-style URLs.
    • Built-in integration with Hibernate and Spring.
    • Best-of-breed exception reporting.
    • Built-in extensible mega-components: BeanEditForm, BeanDisplay and Grid (to edit and display any JavaBean or collection of JavaBeans).
    Tapestry organizes your application into pages, and components within pages; pages and components are ordinary POJOs: not singletons (like servlets). Tapestry combines pages, page templates, components, component templates, and other resources together for you, managing server-side state, the creation of URLs and the dispatch of incoming requests. You build your application in terms of the methods and properties of your objects, not in terms of URLs or the Servlet API. Tapestry features great exception reporting to keep you on track, and live class reloading to keep you agile. Tapestry templates are XML documents, using a namespace for Tapestry-specific elements. Tapestry is designed to be easy to develop, using any standard IDE with an XML editor. Tapestry is simple, sensible and fun. It keeps you productive by freeing you from the boring, mechanical aspects of web application development. You can stay focused on what makes your application interesting and unique, and let Tapestry handle all the ugly plumbing. Tapestry is made available under the Apache Software License 2.0. Tapestry is free to download, free to use, free to redistribute and free to modify. Tapestry 5.0.18

    Threaded Messages (27)

  2. I've been used Tapestry 4 and I was impressed by its complexity... Now I've taken a look to Tapestry 5, I know it is simpler, but still not easy. Now my definitive choice is (without doubt) Jboss Seam + Jboss RichFaces. IMHO Seam is very easy and intuitive to use. Moreover it is significantly integrated with: - Hibernate connections; - Transactions; - page flow; - jsf (it is a popular standard....). bye.
  3. I used Tapestry 5 in one project all this year and Tapestry 5 have neat ideas but if I compare with Wicket, Wicket is more pragmatic and more complete featured framework. I think after used both frameworks I can say that my vote goes to Wicket and for the next projects Wicket will be the choice. The problem I see with Tapestry5 is as many people said the backwards compatibility that is a pain in the neck and it is also one man show, so the development and maintenance of the framework is to slow, in contrast Wicket is pretty quickly and have more momentum right now than Tapestry 5 and also Wicket it is supported as first class in Seam. Action based I will use Stripes, Component based Wicket. 2c.
  4. I've been using Tapestry 5 for about a week and I like what I see so far. It's unit testing support could use a little work (http://www.nabble.com/-T5--Testing-Pages-with-injected-Spring-beans-tt21057429.html), but that's to be expected for a newly released version. As far as Wicket, I like it too, but it seems to require quite a bit more code. Compare the same form implemented in Tapestry and Wicket. Tapestry 5.0.18: http://source.appfuse.org/browse/~raw,r=165/appfuse-light/trunk/tapestry/src/main/java/org/appfuse/web/pages/UserForm.java Wicket 1.3.5: http://source.appfuse.org/browse/~raw,r=151/appfuse-light/trunk/wicket/src/main/java/org/appfuse/web/pages/UserForm.java Then again, it's even simpler with Stripes 1.5. ;-) http://source.appfuse.org/browse/~raw,r=161/appfuse-light/trunk/stripes/src/main/java/org/appfuse/web/UserFormBean.java Of course, if any of these examples can be implemented with less LOC, I'd love to hear about it.
  5. @Matt, Maybe with Grails can be the shortest LOC, Kind of the Stripes one but without setters and getters, without declaration of types and Dao beans and the validation it can do it at the domain.
  6. I think you could cleanup the Tapestry 5 version. Is User a Hibernate entity? In that case, simply place @PageActivationContext on the user field. Also, use @Property so you don't have to write the getter. 5.1 will add the ability to "simulate" annotations on entity classes, so that you can get the equivalent of an @Validate annotation on the various fields; this will allow you to leverage Tapestry's built-in validation even when you can't put annotations right on the entity. However, tapestry5-annotations JAR is about 10KB with no dependencies. Also: String msg = MessageUtil.convert(messages.get("user.saved")); String message = String.format(msg, user.getFullName()); I'm not sure what MessageUtil.convert() does, but I bet there's a way to do this via some meta-programming; i.e., an AppFuse-related annotation, not @Inject, that provides a Messages object that wraps the *real* Messages object and provides this functionality. The UserFormBean's sub-=property validation idea is clever though. Might have to steal it in some fashion.
  7. Re: Tapestry 5.0 Final Release - 5.0.18[ Go to top ]

    On the wicket stuff, Matt, just a quick glance I saw one thing. You set the feedback panel visible every time you add a response and that's not necessary unless you've done something odd to your panel. And the setRedirect() calls aren't really necessary unless you *really* want that redirect. I typically just call setResponsePage() and leave it at that.
    I've been using Tapestry 5 for about a week and I like what I see so far. It's unit testing support could use a little work (http://www.nabble.com/-T5--Testing-Pages-with-injected-Spring-beans-tt21057429.html), but that's to be expected for a newly released version.

    As far as Wicket, I like it too, but it seems to require quite a bit more code. Compare the same form implemented in Tapestry and Wicket.

    Tapestry 5.0.18: http://source.appfuse.org/browse/~raw,r=165/appfuse-light/trunk/tapestry/src/main/java/org/appfuse/web/pages/UserForm.java

    Wicket 1.3.5: http://source.appfuse.org/browse/~raw,r=151/appfuse-light/trunk/wicket/src/main/java/org/appfuse/web/pages/UserForm.java

    Then again, it's even simpler with Stripes 1.5. ;-)

    http://source.appfuse.org/browse/~raw,r=161/appfuse-light/trunk/stripes/src/main/java/org/appfuse/web/UserFormBean.java

    Of course, if any of these examples can be implemented with less LOC, I'd love to hear about it.
  8. Then again, it's even simpler with Stripes 1.5. ;-)

    http://source.appfuse.org/browse/~raw,r=161/appfuse-light/trunk/stripes/src/main/java/org/appfuse/web/UserFormBean.java

    Of course, if any of these examples can be implemented with less LOC, I'd love to hear about it.
    Hi Matt, One small detail about your Stripes example: the @HandlesEvent annotations are all unnecessary, because by default they match the name of the corresponding method. Cheers, Freddy http://www.stripesbook.com
  9. Below
    String message = MapVariableInterpolator.interpolate(getLocalizer().getString("user.saved", this), new MicroMap("name", user.getFullName())); getSession().info(message);
    is just
    getSession().info(getString("user.saved", new Model(new MicroMap("name", user.getFullName()));
    The fragment below can go away as it is unnecessary.
    FeedbackPanel feedback = (FeedbackPanel) responsePage.get("feedback"); feedback.setVisible(true); feedback.setEscapeModelStrings(true);
    Further, if you remove the inner form class with all its abstract methods you will end up with something comparable to T5 LOC-wise. That inner class was only there to improve readability for users uncustomed to anonymous class syntax. The nice thing about Wicket is that you can see everything that is going on in the page without having to look at its markup file.
  10. Clean Code Rules[ Go to top ]

    I like to work with Tapestry a lot. I hate to write infrastructure code or keep xml-files in sync with Java code to make my app work. Tapestry spares me that and does this better than the other Frameworks I know (Struts 1&2, MyFaces). You will be amazed at how clean webapp code can be. Compared to tiles it is extemely easy build up a common site layout and throw in dynamic data where needed. It is also very easy to implement one´s own components. The use of Tapestry´s ioc-container came very natural to me. No difficulties with that either. That being said, I have to admit that it took me quite some time to understand what I consider the advanced parts of Tapestry. But that was the case with the other frameworks too (maybe it´s silly me ;-)). Disagreeing with Otengi I cannot say Tapestry is a one man show. Although I do not know who is writing the actal source code, on the mailing list lots of members are very active in helping each other.
  11. Tapestory has always been inspiration for many web frameworks. I will like someone view on how features of JSF 2 + SEAM (using RichFaces or IceFaces) compares with Tapestory. JSF 2 has template based approach using Facelets, Easy Component development (EzComp) + Ajax standardized (AJax4Jsf) + PDL + Resource Bundling for Skinning + BookMarkable URLs(SEAM) + Conversational scope(SEAM, Bean Outjection) and many other features. With SEAM +Hibernate and Spring integration it seems to be promising. Infact we finished a big project with many CRUDS and some dashbboards using Faceletts and RF and SEAM and it was pretty impressive. Many vendors contributing to custom component like JBoss,IceFaces, IBM, Oracle, BEA. Also clear specs on Portal Integration JSFPortalBridge how does this compares to now Tapestory. Looking for some good comments.
  12. Re: Tapestry 5.0 Final Release - 5.0.18[ Go to top ]

    That's whats so interesting about Tapestry! The template based approach in Facelets was inspired by Tapestry. I think Jacob Hookom would be the first to agree. Easy component development? Again, this is something that's always been eas(ier|y) in Tapestry and that people were clamoring for in JSF. EzComponents are still not up to snuff, comparatively. There's no conversational scope in Tapestry (though, there could be, as everything's configurable), but the idea of outjection - which is a fancy way of saying binding - was in Tapestry first. Heck, if you look at tapestry 3's out parameters, you'll see what I mean. Bookmarkable URLs in Seam are because JSF doesn't know how to do that natively. Tapestry's has had a good story there for the last 4 years at least. JSF and, mainly, Seam has raised the bar for some things, certainly. For example, the ajax support has always been first class. The beanform style components are amazing, too. But, even there, Tapestry has made great competitive advances. There is a huge backwards compatibility chasm, no doubt. I understand however that will change, however. I liken it to moving from MyFaces/Tomahawk/JSP 1.2 and JSF to Ajax4JSF + Facelets and JSF: effectively, you have to rewrite it. Ajax is standardized with Tapestry, but it'snot inextricable should you decide to go some other route. Tapestry supports Hibernate and Spring -- it's just an annotation away. There aren't (m?)any vendors going for Tapestry, but that's because of the backwards compatibility issue. I'd like to believe people will settle on this release and start building supporting tools. In the meantime, it's refreshing to still be able to edit Tapestry pages in DreamWeaver since it's just XHTMLish content :-) Add to all that the long standing focus on performance (Tapestry doesn't persist entire component graphs, just what's unique to the request, since the page structure itself is immutable), the elegance with which evreything's built in (When I first used JSF coming from Tapestry years ago, I didn't realize it was even an option NOT to support internationalization!) Now, of course things have come a long way. You could do worse than to give Tapestry a shot. Congratulations, Howard and team!
  13. A gem of a web framework[ Go to top ]

    I have no doubt there are other very solid Java frameworks out there, but I have been extremely happy with this version of tapestry... there was a time I could have abandoned Tapestry, but now I am glad I stuck with it. I have been using version 5 from first Alpha until present, so have had the pleasure of experiencing its evolution from the outset. I have to say Tapestry 4 was overall a decent web framework, but I had a love hate relationship with it, but Tapestry 5 surpasses anything else I used in the past. The most commendable attribute is its simplicity, its learning curve is greatly reduced from Tapestry 4 so it is suited to even novice Java programmers. Anyone who has used Tapestry 5 in anger knows how little code you need to write to wire together a web application, I highly recommend it. Peter
  14. Happy user inside[ Go to top ]

    I've been using T5 for over a year now, on 3 different projects, of various sizes and scopes. The learning curve might seem a bit steep, but once you get into the philosophy of the framework, you discover that everything is very logical, very well made, and very well organized. Writing pages, assembling components, developping services, everything becomes very fast to write. Prototyping an application can really be made very quickly. The use of true POJOs, annotated methods to be called on form actions, etc... Once you've begun to use that, you dont want to use anything else. I had no problem about the stability of the framework. There was a big effort made to support UTF-8, and everything works flawlessly for me (one of my apps has a bibliography DB that uses arabic, greek and russian references, no kidding). I am a very happy T5 user, and will continue to use and promote it for my future projects, no doubt about it.
  15. Thing I do not like in Wicket[ Go to top ]

    Although it is a good framework, developing GUI with node centric approach (Adding parent and its child etc.) has never been successful and accepted for complex guis. In any enterprise project you have dedicated teams for GUI designing and asking them to code GUI template is not easy. Small pages can be created with this concept. Just imagine modifying a complex page and adding a new table or span in it for animation, coding this change with node centric approach request is not the best way. Facelets(JSF2) solves this problem in the best way.
  16. Having personally worked on four Tapestry 5 projects of significant size and scope, I can say that my experience creating solutions with T5 has been better than with any other web framework I've used to date. While the most endearing thing about Tapestry is the level of productivity it affords, I've found that the most useful aspect of the framework is its extensibility. Its internals are extensively interfaced. Combined with the IoC, this gives you the ability to extend or modify nearly any behavior of the framework. So when a requirement comes along that falls outside of your typical web app behavior, which seems to happen more often than not, you have the tools to change the way values are persisted in the session, database interaction occurs, etc. These kinds of customizations often take surprisingly little code to implement.
  17. Congratulations on the release guys, and pushing the envelope. regards Malcolm Edgar
  18. Another Tapestry release announcement...another total rewrite. *yawn* Page us when you decide to stop redoing things ground up and decide backwards compatibility is a good thing.
  19. Backwards Compatibility[ Go to top ]

    T5 is built for backwards compatibility; Tapestry prior was not. For example, at this moment, I'm building in some significant performance improvements to Tapestry ... without changing any APIs or requiring any changes to user applications. You get the benefits automatically. In the 5.1 code base, I've been adding some significant new features to the property expression language, and to the IoC container ... again, no backwards compatibility issues at all. I'm very excited about the new features that will be coming in 5.1, 5.2 and beyond, and it will all be done in a backwards compatible way. It's all part of the same overall design; the features Andrew was alluding to, about very specific overrides, is a native feature of the IoC container that encourages the small, simple APIs that in turn support backwards compatibility.
  20. Re: Backwards Compatibility[ Go to top ]

    T5 is built for backwards compatibility; Tapestry prior was not.
    Howard, This is exactly what you said when you were re-writing Tapestry for T4.
    I'm very excited about the new features that will be coming in 5.1, 5.2 and beyond, and it will all be done in a backwards compatible way.
    Ok, I believe you when you say that for the 5.x series. I know you won't say that for T6. The history of Tapestry tells us that T6 would be as usaual a re-write from scratch without any regard to backwards compatibility. One doesn't need a crystal ball to be able to predict that. And don't hit that disguising mantra of there won't be a T6. That is what you said when you were doing T4 but here we are with T5. Jan
  21. Jan the Troll[ Go to top ]

    Nothing but the typical bile from you, eh Jan? What is this personal vendetta that you have against Howard? Grow up.
  22. Re: Backwards Compatibility[ Go to top ]

    I know T5 to future will not broke backwards compatibility even I said that a couple of months in one thread to someone because I read your plans of how T5 was designed and is cool that T5 is already released but The problem is from T4 to T5, I have some clients asking me to port their apps from T4 to T5 and I start with one but it was hard, it is painful.
  23. 2 years too late[ Go to top ]

    Having used T3 extensively and T5 some: 1) Some defaults in T5 make no sense (e.g. T5 tries to compute an absolute SSL URL - which breaks when the app server sits behind a web server - a very normal case). 2) Use of scriptaculous and prototype - sorry the world has moved on to JQuery 3) Programming by convention makes for writing good code, but then you need EXCELLENT documentation - far better than anything seen in most open source software. T5 pages still reference outdated versions and are woefully incomplete. At the end of the day T5 is a one man show and that is an hinderance to progress. If you disagree, then what took T5 three years to release?
  24. Good work Howard[ Go to top ]

    I think Tapestry is a great product. Used it extensively from the very early versions. I appreciate the effort Howard and the rest of the team have put into the library. I also applaud the guts to break the API as the design pushes the possibilities thus creating a superior product. I was surprised Howard even bothered announcing it here. I would not have. Same people who have clearly made their choices (which is great) have to chime in with the same old BS and FUD. Evaluate it; If it suites you then great feel free to use it. If something else fits better then also great. I think it is wonderful there are so many products with different approaches all providing choice. Good work Howard.
  25. It is the Tapestry community's choice to either accept the changes the team makes. I applaud the Tapestry team for daring to make such an abrupt change to the very core of their product. Not many projects would undertake such an endeavor. I think that each product should evolve and break compatibility when it is beneficiary to the product and its users. With Wicket we break compatibility too (though admittedly not a whole rewrite of the API). We feel it is necessary to evolve into something better-less lines, less convoluted code, better naming, etc. I think Tapestry is a great framework and with the rebirth in its 5th generation a great way to develop web applications-just not my cup of tea. Congrats to Howard and the rest for seeing this one through-I can imagine the publicity has been rough at times.
  26. Deserved[ Go to top ]

    Great job! T5 shows where today java is going and where JVM frameworks (not only web) will go when there will be not only Java within the JVM. Kudos Howard.
  27. very good,I'll try
  28. Looking quite promising release and feature set. Is there any place we can get a comparison matrix between other frameworks and Tapestry (Like Struts2, Spring, Wicket).