I thought I'd weigh in here on the positives and negatives of Tapestry. Don't expect me to go gushing on about community and the generosity of the committers and all that; I stay pretty well focused on the technology.
Beautiful Things In Tapestry * Live Class Reloading Can't live without it. Encourages an exploratory style that's very agile. Negatives: everyone wants it for non-component classes. ClassLoader issues passing components "outside the box". Doesn't pick up new files perfectly, just changed. * Exception Reporting Best of breed, nothing rivals it. Come on, we color code the stack frames and hide the ones that are uninteresting! Negatives: Exceptions can get nested very deeply. * Templates Tapestry templates are simple and concise. They are readable. Their structure on the server is very close to the final output on the client. It's very easy to move back and forth, and you don't have the kind of visual impedance and clutter that you see in JSPs and other templating systems. Negatives: A couple too many ways to do things (three different ways for an element to be a component). XML causes grief if including HTML entities without a DOCTYPE. A few minor ambiguities (mostly about doctypes and namespaces). Should never have allowed page templates in the context folder. * Rendering Tapestry isn't about rendering character data; rendering at all steps is a process by which objects (ultimately parsed from XML templates) render as ... objects (the DOM) and it is the DOM that's rendered as a character stream. Post-processing of the DOM simplifies everything (Tapestry 5 doesn't need Shell and Body components, like T4). Rendering is not tail recursive and its very easy to manipulate the render order to accomplish very dynamic effects within Tapestry's static structure dictum. Negatives: more memory intensive, and slower to first-byte (on the client). * Naming Conventions, Annotations, Parameters Everything works together so that Tapestry can "do the magic". Code is concise, Tapestry fills in around the edges. Very smart defaults (that is, active code defaults rather that simply declarative). Negatives: Many are more comfortable extending classes or implementing interfaces. Documentation gets tricky with th wealth of options and approaches. Some annotations have odd names. Annotations should have been divided up more clearly to indicate which apply to POJOs and which are only useful with components. * Performance Tapestry is really fast! Especially in 5.1 where some effort was made to speed it up and streamline it. Lots of room for caching and optimizations. Negatives: JSPs can be faster sometimes. * Service Configurations and Module Autoloading Allows Tapestry to be extended just by "dropping in a JAR". Modules are loaded, services provided, contributions contributed, everything just wires itself together. Negatives: Modules can only be loaded at startup. Configurations can be tricky to master. Lots of modules makes it harder to understand how everything fits together. * TypeCoercer Magic that lets data flow from component to component, efficiently and without regards to type. For example, lets you pass a List to a Grid component, even though the source parameter is type GridDataSource ... the List is coerced. And its extensible, central to configuration, quite efficient. Negatives: It's so central that naive contributions (to extend it) too often result in Tapestry IoC startup failures that are hard to diagnose. * Friendly URLs Tapestry built-in URL generation creates sensible rest-like URLs. Negatives: People want absolute control over URLs; 5.1 provides this, but the jury is still out. * Public vs. Internal T5 does what prior Tapestry did wrong: clear separation between internal code (subject to change at any time) and public APIs. Negatives: people still need to use internals sometimes and face difficulties moving up from 5.0 to 5.1. * Extensibility Every aspect of Tapestry can be overridden, extended, decorated, advised, improved, replaced, etc. The term "seam" has come into vogue as representing a location where code can be extended ... Tapestry is pretty much nothing but seams. Negatives: Almost two hundred services and all those configurations and contributions make it hard to find where to apply a change to reach a desired effect. .... I think that are some of the main ones. -- Howard M. Lewis Ship Creator of Apache Tapestry Director of Open Source Technology at Formos --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org