blob: c5ac68d76462cb78801fe52537ee6249ea47574c [file] [log] [blame]
[0] rationale
Tapestry, currently housed at the SourceForge? (http://tapestry.sf.net),
is a component-based web application framework. Tapestry falls
generally into the pull-MVC model of development.
Tapestry is designed specifically around the creation of completely
re-usable components. Components can easily be packaged into
libraries and distributed within Jar files, even when they contain
assets such as image files and stylesheets.
Tapestry is organized around an abstraction that isolates
application-specific logic from the details of the servlet API,
such as HttpSession?, request, response, URLs and query parameters.
Tapestry is highly pluggable, allowing any and all behavior to be
customized by subclassing appropriate base classes.
Tapestry is specifically not a JSP taglib. Tapestry uses its own
method for instrumenting HTML that is extremely non-obtrusive (it
still previews properly in a WYSIWYG editor). Tapestry has well
specified, separate roles for HTML producers and Java developers,
and allows them to work together without interfering with each
other.
The goal of Tapestry is to shift much of the burden of developing
web applications onto the framework, and free the developer to work
cleanly and effectively without concern for the many small details
of web application development. The primary function of Tapestry
is the automatic creation of URLs by the framework, facilitating
a fine-grained dispatch model. The bird's-eye view is that, in
Tapestry, actions (such as clicking a link, or submitting a form)
are associated with a particular component and, through a simple
delegation system, a particular bit of user code. There is no global
registry of actions, as in Struts, and it's easy to create reusable
components that define their own behaviors (in terms of links or
forms), independent of the containing page.
Tapestry applications can be extremely sophisticated with surprisingly
little code.
Tapestry includes a significant amount of documentation describing
its strengths and features in great detail, available at
http://tapestry.sf.net. Live demos, a great collection of user
quotes, extensive documentation (HTML and PDF) and a recent code
coverage report are all online.
Tapestry has been an open-source project on SourceForge? since June
2000. Milestone releases (such as 2.1 in July, or the just-released
2.2) result in 6K - 7K downloads (increasing by over 1K downloads
with each successive release). Tapestry has averaged over 3000
downloads a month during 2002, with peaks above 8K/month.
Tapestry has recently adopted Apache meritocracy rules to govern
the project. The license for Tapestry has been changed from LGPL
to Apache Software License.
[0.1] criteria
Meritocracy: Tapestry follows the Apache meritocracy rules, with
a core of committers.
Community: Tapestry has a modest, but very active community, centered
around a user's mailing list (approx. 200 members), a developer's
mailing list, and the Tapestry Wiki (http://tapestry.sf.net/wiki).
The mailing lists have an exceptionally good signal-to-noise ratio;
discussions typically revolve around planning new extensions to
the framework, creating new components and documentation, and
diagnosing developer issues. The developer's mailing list is used
primarily for voting, and for discussions about votes. A secondary
project, to provide a community component repository is now underway
(http://sf.net/projects/tacos).
Core Developers. Tapestry has an active and dedicated team of
committers. The project was founded by Howard Lewis Ship, who is
extremely dedicated to Tapestry and authored the majority of the
codebase. Richard Lewis-Shell and Mind Bridge are frequent contributors
of components and bug fixes as well as some significant extensions.
Neil Clayton and Malcolm Edgar provide code and significant amounts
of documentation. Geoff Longman has created an excellent plugin
for the Eclipse IDE (as a separate project) and provides code to
keep the two projects in sync. Several other developers contribute
bug fixes, components and documentation.
Alignment: Tapestry makes use of the ORO, commons-lang and
commons-logging packages internally.
Scope: Tapestry is entirely a server-side framework, well aligned
with the overall goals of the Jakarta project.
[0.2] warning signs
Orphaned products. Tapestry is far from orphaned, it was originally
conceived and executed specifically as an open-source project.
Inexperience: Howard Lewis Ship has been coding, documenting,
mentoring and managing this open source project for nearly three
years. Others on the team have been actively using, supporting and
extending Tapestry for over a year.
Homogeneous Developers: The current Tapestry committers include
representatives from Canada, England, Australia and New Zealand;
other, more occasional, contributors represent South America and
Asia. This is just the opposite of the "smoke filled room".
Reliance on Salaried Developers: Tapestry is largely developed
during free time. Many contributions are developed by consultants
to address specific needs of their clients, then modularized and
provided back to the community (for example, Geoff is developing
a workflow management subsystem for Tapestry that may be released
into the framework proper when completed). Increasingly, developers
are finishing projects with Tapestry and contributing components
created for those projects back into the project.
No ties to other Apache Products: As stated above, Tapestry makes
use of the ORO and commons packages and has numerous places where
greater integration with Jakarta could occur. It is servlet container
agnostic, working well with Tomcat, Jetty, Resin and others.
Fascination with Apache Brand: Tapestry has been, and always will
be an open-source project.
[0.3] overlap with Turbine
Turbine has a similar model to Tapestry, but the focus of the two
projects is somewhat divergent. Turbine is a service-oriented where
Tapestry is component-oriented. Turbine provides a larger toolkit
(in the form of services) for aspects of the application not related
directly to the presentation layer. Tapestry provides more flexibility
and power in the presentation layer but doesn't provide any other
services (such as scheduling, database access, security, etc.).
Many Tapestry users are employing Tapestry for the presentation
layer, but leverage the many Turbine services (especially Torque).
[1] scope of subproject
The project shall create and maintain packages written in the Java
programming language constituting the framework itself, a standard
library of additional components, documentation, a web site and
additional examples.
[2] identify the initial source from which the project is to be
populated
The project currently resides on the SourceForge? (http://tapestry.sf.net).
[3] identify the Jakarta resources to be created
[3.1] mailing lists(s)
tapestry-user tapestry-dev tapestry-cvs
[3.2] CVS repositories
jakarta-tapestry
[3.3] Bugzilla
framework - tapestry components - web site, contrib library,
documentation, examples
[3.4] Wiki
It is desired that a Wiki be setup. Use of the current Wiki
(http://tapestry.sf.net/wiki) has proven highly successful in
supporting distributed design, discussion and decision making, as
well as providing a home for temporary documentation until permanent
documentation changes occur. We would prefer MoinMoin?, a Python
Wiki implementation.
[4] identify the initial set of committers
Mind Bridge mindbridge mindbridgeweb@yahoo.com
Neil Clayton nclayton neil@cloudnine.net.nz
Malcolm Edgar medgar malcolm_edgar@hotmail.com
Richard Lewis-Shell rlewisshell rlewisshell@mac.com
Howard Lewis Ship hlship hlship@attbi.com
Geoff Longman glongman glongman@intelligentworks.com
[5] identify apache sponsoring individual
Andrew C. Oliver
dIon Gillard