You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2011/01/03 19:54:07 UTC
svn commit: r1054708 - in /tapestry/tapestry5/trunk: ./ src/site/apt/
tapestry-tutorial1/ tapestry-tutorial1/src/
tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/data/
tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/entiti...
Author: hlship
Date: Mon Jan 3 18:54:06 2011
New Revision: 1054708
URL: http://svn.apache.org/viewvc?rev=1054708&view=rev
Log:
TAP5-1397: Remove Tutorial source from SVN
Removed:
tapestry/tapestry5/trunk/tapestry-tutorial1/LICENSE-2.0.txt
tapestry/tapestry5/trunk/tapestry-tutorial1/NOTICE.txt
tapestry/tapestry5/trunk/tapestry-tutorial1/pom.xml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/data/Honorific.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/entities/Address.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/pages/GameOver.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/pages/Guess.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/pages/Index.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/pages/address/CreateAddress.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/java/org/apache/tapestry5/tutorial/services/AppModule.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/resources/hibernate.cfg.xml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/resources/log4j.properties
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/resources/org/apache/tapestry5/tutorial/pages/address/CreateAddress.properties
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/webapp/GameOver.tml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/webapp/Guess.tml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/webapp/Index.tml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/webapp/WEB-INF/web.xml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/webapp/address/CreateAddress.tml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/main/webapp/favicon.ico
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/apt/env.apt
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/apt/first.apt
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/apt/forms.apt
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/apt/forms2.apt
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/apt/hilo.apt
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/apt/index.apt
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/address-v1.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/address-v2.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/address-v3.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/address-v5.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/address-v6.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/address-v7.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/address-v8.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/app-live-reload.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/eclipse-import-folder.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/eclipse-import.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/eclipse-launch.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/eclipse-run.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/hilo-exception.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/hilo-feedback.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/hilo-flow.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/hilo-guess-v1.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/hilo-number.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/hilo-start.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/index-grid-v1.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/resources/startpage.png
tapestry/tapestry5/trunk/tapestry-tutorial1/src/site/site.xml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/t5-chap-3-figures.graffle
tapestry/tapestry5/trunk/tapestry-tutorial1/src/test/conf/testng.xml
tapestry/tapestry5/trunk/tapestry-tutorial1/src/test/java/PLACEHOLDER
tapestry/tapestry5/trunk/tapestry-tutorial1/src/test/java/org/apache/tapestry5/tutorial/services/AppSuite.java
tapestry/tapestry5/trunk/tapestry-tutorial1/src/test/resources/PLACEHOLDER
Modified:
tapestry/tapestry5/trunk/pom.xml
tapestry/tapestry5/trunk/src/site/apt/index.apt
Modified: tapestry/tapestry5/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/pom.xml?rev=1054708&r1=1054707&r2=1054708&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/pom.xml (original)
+++ tapestry/tapestry5/trunk/pom.xml Mon Jan 3 18:54:06 2011
@@ -202,8 +202,6 @@
<module>quickstart</module>
<!-- And the Maven plugin. -->
<module>tapestry-component-report</module>
- <!-- Tutorials -->
- <module>tapestry-tutorial1</module>
</modules>
<dependencyManagement>
<dependencies>
Modified: tapestry/tapestry5/trunk/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/index.apt?rev=1054708&r1=1054707&r2=1054708&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/index.apt (original)
+++ tapestry/tapestry5/trunk/src/site/apt/index.apt Mon Jan 3 18:54:06 2011
@@ -2,261 +2,4 @@
Apache Tapestry 5
----
-What is Apache Tapestry?
-
- Apache Tapestry is an open-source framework for creating dynamic, robust, highly scalable web applications in Java.
- Tapestry complements and builds upon the standard Java Servlet API, and so it works in any servlet container or application server.
-
- Tapestry divides a web application into a set of pages, each constructed from components. This provides a consistent structure,
- allowing the Tapestry framework to assume responsibility for key concerns such as URL construction and dispatch, persistent state
- storage on the client or on the server, user input validation, localization/internationalization, and exception reporting.
- Developing Tapestry applications involves creating HTML templates using plain HTML, and combining the templates with small amounts of
- Java code. In Tapestry, you create your application in terms of objects, and the methods and properties of those
- objects -- and specifically not in terms of URLs and query parameters.
- Tapestry brings true object oriented development to Java web applications.
-
- Tapestry is specifically designed to make creating new components very easy,
- as this is a routine approach when building applications.
-
- Tapestry is architected to scale from tiny, single-page applications all the way up to
- massive applications consisting of hundreds of individual pages, developed by
- large, diverse teams. Tapestry has significant Ajax features baked right in. On the server-side, Tapestry easily integrates with any kind of backend, including JEE,
- Spring and Hibernate.
-
- It's more than what you <can> do with Tapestry ... it's also <how> you do it! Tapestry is a vastly productive environment.
- Java developers love it because they can make <Java code> changes and see them immediately ... no redeploy, no restart! And it's blazingly fast to boot
- (even when files change). Designers
- love it because Tapestry templates are so close to ordinary HTML, without all the cruft and confusion seen in JavaServer Pages. Managers love it because
- it makes it easy for large teams to work together, and because they know important features (including localization) are baked right in. Once you work
- in Tapestry there's no going back!
-
- Tapestry is released under the Apache Software License 2.0.
-
-New And Of Note
-
- * New {{{apidocs/org/apache/tapestry5/annotations/QueryParameterMapped.html}QueryParameterMapped}} annotation to
- automatically map fields of a page to query parameters.
-
- * Service <implementation> classes may now be {{{tapestry-ioc/reload.html}live reloaded}}, much like page and component classes.
-
- * New {{{apidocs/org/apache/tapestry5/annotations/QueryParameter.html}QueryParameter}} annotation for parameters to event handler methods.
-
- * Submit components can now be used to cancel a form (bypassing client-side validation).
-
- * Tapestry no longer uses a StAX parser to parse templates (it uses a standard SAX parser), meaning fewer dependencies and
- better compatibility with Google App Engine.
-
- * A {{{guide/testing.html}guide to integration testing}} is now available.
-
- * The {{{guide/persist.html}@SessionAttribute}} annotation can be used on component fields to
- read and update HttpSession attributes.
-
- * The {{{tapestry-beanvalidator}JSR-303 Bean Validation Integration Library}} is now available.
-
- []
-
-Roadmap
-
- The goal is to produce new releases on a regular schedule, every 4 - 6 months.
-
- High priorities for 5.2 include Spring Web Flow integration, and support for developing Tapestry applications as Portlets.
-
-Third Party Libraries, Tutorials and Resources
-
- A number of Third Party Libraries, Tutorials and Resources are listed on
- the {{{http://tapestry.apache.org/}Tapestry Home Page}}.
-
-Adaptive API
-
- A key feature of Tapestry 5 is <adaptive API>.
-
- In traditional Java frameworks, including Tapestry 4, user code is expected to
- conform to the framework. You create classes that extend from framework-provided
- base classes, or implement framework-provided interfaces.
-
- This works well until you upgrade to the next release of the framework: with
- the new features of the upgrade, you will more often than not experience breaks
- in backwards compatibility. Interfaces or base classes will have changed and your
- existing code will need to be changed to match.
-
- In Tapestry 5, the framework <adapts to your code>. You have control over the
- names of the methods, the parameters they take, and the value that is returned. This
- is driven by annotations, which tell Tapestry under what circumstances your
- methods are to be invoked.
-
- For example, you may have a login form and have a method that gets invoked
- when the form is submitted:
-
-+----+
-public class Login
-{
- @Persist
- @Property
- private String userId;
-
- @Property
- private String password;
-
- @Component
- private Form form;
-
- @Inject
- private LoginAuthenticator authenticator;
-
- void onValidateFromForm()
- {
- if (! authenticator.isValidLogin(userId, password))
- {
- form.recordError("Invalid user name or password.");
- }
- }
-
- Object onSuccessFromForm()
- {
- return PostLogin.class;
- }
-
-}
-+----+
-
- This short snippet demonstrates a bit about how Tapestry operates. Services
- within the application are injected with the @Inject annotation. The method names, onValidateFromForm()
- and onSuccessFromForm(),
- inform Tapestry about when the method is to be invoked. The two events <validate> and <success> occur
- when a form is submitted; "validate" is triggered to perform cross-field validations, and "success" is
- only triggered when there are no validation errors. The onSuccess() method's
- return value directs Tapestry on what to do next: jump to another page within the application
- (here identified as the class for the page, but many other options exist). When there are exceptions,
- the page will be redisplayed to the user.
-
- This also represents a distinct change from Tapestry 4. In earlier versions of Tapestry,
- the Form component's listener parameter would be bound to the method to invoke, by name. Further,
- the listener method had to be public.
- This new approach not only supports multiple listeners, but provides an improved separation of
- view concerns (inside the page's template) and logic concerns, inside the Java class.
-
- In many cases, additional information about the event is available, and can be passed
- into the method by adding parameters to the method. Again, Tapestry will adapt
- to your parameters.
-
- Tapestry also saves you effort: the @Property annotation marks a field as readable and writable;
- Tapestry will provide the accessor methods automatically. This kind of meta-programming is common in Tapestry,
- and easy to implement yourself.
-
- Finally, Tapestry 5 explicitly separates actions (requests that change things) and rendering (requests that
- render pages into markup) into two separate requests. Performing an action, such as clicking a link or submitting a form,
- results in a <client side redirect> to the new page. This is often called "redirect after post". This helps ensure
- that URLs in the browser are book-markable ... but also requires that a bit more information be stored in the session
- between requests (using the @Persist annotation).
-
-About Snapshots and Releases
-
- Tapestry is built using {{{http://maven.apache.org/}Maven}}, which makes it really easy to download the source and build it yourself, either the whole
- project, or just one single module.
-
- Better yet, you can pull down Tapestry modules from the central Maven repository.
-
- The use of Maven has let us move with great speed, providing preview releases and <snapshots>.
-
- Snapshots are <intermediate versions> of releases. As I'm writing this, the most recent preview release is 5.2.0 and the current snapshots are
- for 5.2.0-SNAPSHOT. Maven keys off the -SNAPSHOT suffix and handles the dependency specially. It knows that snapshot releases can change frequently,
- so it will keep checking (at least once a day, maybe more often) to see if there's an updated version of the snapshot.
-
- A nightly build process on Tapestry's continuous integration server creates new snapshots <every night>.
-
- Snapshots don't go in the central Maven repository (that's reserved for full releases). Instead, they go into the Apache snapshots repository
- at {{{http://http://repository.apache.org/snapshots}http://repository.apache.org/snapshots}}.
-
- To access this repository, you may add <<<-DremoteRepositories=http://repository.apache.org/snapshots>>> to the command line when
- running Maven.
-
- Your best bet is to use the {{{quickstart/}quickstart Maven archetype}} to create your initial Tapestry project; it generates a full project
- directory, including a POM that links to the Tapestry snapshots repository.
-
- <<Documentation on this site usually refers to the latest snapshot ... that is, it is usually ahead of the last official release. In some cases,
- it is written as if the snapshot release is stable; if documentation refers to version 5.2.x and that doesn't work, try 5.2..x-SNAPSHOT.>>
-
-Principle 1 -- Static Structure, Dynamic Behavior
-
- Tapestry is designed to be extremely scalable in several dimensions:
-
- * Tapestry applications may contain large numbers of pages and many custom components.
-
- * Tapestry applications may contain very complex functionality.
-
- * Tapestry applications may be created by large, diverse teams.
-
- * Tapestry applications can service large numbers of concurrent users.
-
- One core architecture decision in Tapestry exists to service many of the above goals
- (and others that are harder to describe). <<Static Structure, Dynamic Behavior>>
-
- In Tapestry, the structure of any particular page is <static>. This is necessary for
- several reasons, most importantly because Tapestry pages are <pooled>. Creating a Tapestry page
- is an involved process, because the page object is simply the root of a large tree of other
- objects including user provided components, many kinds of structural objects, template objects,
- and others. Creating a new page instance for each request is simply not <scalable>.
-
- Instead, Tapestry <pools> pages. Once created, a page instance will be stored in a pool for
- that particular type of page, and reused
- in later requests. An incoming request, the result of a user clicking a link or submitting a form,
- will be processed by <some> server within a cluster, and will use <some> page instance within the
- page pool. Because page instances are static and uniform across instances and servers,
- Tapestry can use any available page instance, or create a new one as needed.
-
- Tapestry does not need to store page instances inside the HttpSession. At most, it stores a smattering
- of <persistent field values> from the page, but not the entire page instance. This lean
- use of the HttpSession is key to Tapestry's very high scalability, especially in a clustered
- configuration.
-
- Tapestry also includes built-in mechanisms to store a limited amount of state, such as a persistent
- object id, directly into the URL used to access a page.
-
- In some Tapestry-like frameworks, such as JavaServer Faces and Wicket, the page structure is more dynamic, at
- the cost of storing much, much more data in the HttpSession.
-
- This static structure is not so limiting as you might think. With different kinds of conditional
- and looping components, and the ability to "jump out of the flow" and render components in an arbitrary order,
- you will not find Tapestry to be rigid ... anything but!
-
-Public vs. Internal
-
- An issue plaguing previous versions of Tapestry 4 (and earlier) was the lack of a clear delineator
- between private, internal APIs and public, external APIs. The fact that your code would extend
- from base objects but that many of the methods on those base objects were "off limits"
- further confused the issue. This has been identified as a key factor in the
- "steep learning curve of Tapestry" meme.
-
- With the clean slate of Tapestry 5, we are being much more ruthless about internal vs. external.
-
- First of all, anything inside the org.apache.tapestry5.internal package
- is <<internal>>. It is part of the implementation of Tapestry. It is the man behind the curtain.
- You should not ever need to directly use this code. It is a <<bad idea>> to do so, because
- internal code may <<change from one release to the next>> without concern for backwards
- compatibility.
-
-Backwards Compatibility
-
- Tapestry has been plagued by backwards compatibility problems with every major release. Tapestry 5
- does not even attempt to be backwards compatible to Tapestry 4. Instead, it lays the ground work for
- true backwards compatibility going forwards.
-
- Tapestry 5's API is based almost entirely on naming conventions and <annotations>. You components are just
- ordinary Java classes; you will annotate fields to allow Tapestry to maintain their state or to allow Tapestry
- to inject resources, and you will name (or annotate) methods to tell Tapestry under what circumstances
- a method should be invoked.
-
- Tapestry will adapt to your classes. It will call your methods, passing in values via method parameters.
- Instead of the rigidness of a fixed interface to implement, Tapestry will simply adapt to your classes, using
- the hints provided by annotations and simple naming conventions.
-
- Because of this, Tapestry will be able to change internally to a great degree without it affecting any
- of the application code <you> write. This should finally crack the backwards compatibility nut, allowing you to have
- great assurance that you can upgrade to future releases of Tapestry without breaking your existing applications.
-
- This is already evident in Tapestry 5.1, where many new features and improvements have occurred, but is still
- 100% backwards compatible to Tapestry 5.0, as long as you've avoided the temptation to make use of
- internal APIs.
-
- Tapestry 5.2 is continuing in this vein with improved performance and new features without sacrificing
- backwards compatibility at all.
+Documentation for Tapestry is no longer maintained using Maven; see {{{http://tapestry.apache.org/}}the Tapestry Home Page} for current documentation.
\ No newline at end of file