tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Tapestry > Announcing Tapestry 5.2
Date Sun, 19 Dec 2010 00:12:00 GMT
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/1810/9/12/_/styles/combined.css?spaceKey=TAPESTRY&amp;forWysiwyg=true"
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://cwiki.apache.org/confluence/display/TAPESTRY/2010/12/17/Announcing+Tapestry+5.2">Announcing
Tapestry 5.2</a></h2>
    <h4>Blog post <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~karesti">Katia
        <div id="versionComment">
        Reverted from v. 2<br />
                         <h4>Changes (0)</h4>
<div id="page-diffs">
            <table class="diff" cellpadding="0" cellspacing="0">
            <tr><td class="diff-snipped" >...<br></td></tr>
</div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <p>I'm very proud to announce that the next major release of Tapestry, release
5.2, is now available as <a href="/confluence/display/TAPESTRY/Download" title="Download">Tapestry
version 5.2.4</a>.</p>

<p>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. </p>

<p>Let's talk about some of the major enhancements in this release:</p>

<h2><a name="AnnouncingTapestry5.2-RemovalofPagePooling"></a>Removal of
Page Pooling</h2>

<p>Prior versions of Tapestry used a <em>page pool</em>; 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.</p>

<p>Unfortunately pages are <em>big</em>: 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.</p>

<p>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.</p>

<h2><a name="AnnouncingTapestry5.2-LiveServiceReloading"></a>Live Service

<p>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. </p>

<p>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!</p>

<h2><a name="AnnouncingTapestry5.2-ClassTransformationAPIImprovements"></a>ClassTransformation
API Improvements</h2>

<p>At the heart of Tapestry is the Class Transformation API; the <em>extensible</em>
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 <a
href="http://www.jboss.org/javassist" class="external-link" rel="nofollow">Javassist</a>
psuedo-Java language.</p>

<p>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

<h2><a name="AnnouncingTapestry5.2-QueryParameterSupport"></a>Query Parameter

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

<p>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.</p>

<p>Tapestry 5.2 adds the @<a href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/ActivationRequestParameter.html"
class="external-link" rel="nofollow">ActivationRequestParameter</a> annotation that
automates the process of gathering such data, encoding that data into URLs as query parameters,
and making it available in subsequent requests.</p>

<h2><a name="AnnouncingTapestry5.2-Testing"></a>Testing</h2>

<p>A lot of work has gone into Tapestry's testing support, especially the base classes
that support integration testing using <a href="http://seleniumhq.org/" class="external-link"
rel="nofollow">Selenium</a>.  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.</p>

<h2><a name="AnnouncingTapestry5.2-JSR303Support"></a>JSR-303 Support</h2>

<p>Tapestry now supports the <a href="http://jcp.org/en/jsr/detail?id=303" class="external-link"
rel="nofollow">Bean Validation</a> JSR, converting the standard validation annotations
into client-side and server-side validations.</p>

<h2><a name="AnnouncingTapestry5.2-Documentation"></a>Documentation</h2>

<p>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 <a href="http://www.atlassian.com/software/confluence/"
class="external-link" rel="nofollow">Confluence</a> wiki (and no longer tied to the
release process) the documentation is free to quickly evolve. </p>

<p>Better yet, you don't have to be a committer to write documentation ... just sign
your <a href="http://www.apache.org/licenses/icla.txt" class="external-link" rel="nofollow">Apache
Contributor License Agreement</a>.</p>

<p>And in terms of exhaustive guides ... Igor Drobiazko's book is being translated from
German to English as <a href="/confluence/display/TAPESTRY/Books#Books-Tapestry5inAction">Tapestry
5 In Action</a>.</p>

<h2><a name="AnnouncingTapestry5.2-Summary"></a>Summary</h2>

<p>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: <b>Code Less, Deliver More</b>.</p>

<p>Tapestry 5 was designed so that it would be possible to make big improvements to
the internals and add new features to the framework <em>without</em> 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.</p>

<p>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!</p>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href="https://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
        <a href="https://cwiki.apache.org/confluence/display/TAPESTRY/2010/12/17/Announcing+Tapestry+5.2">View
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=24190247&revisedVersion=5&originalVersion=4">View

View raw message