Tapestry Workshop

I strongly believe that, when it comes to technology, people learn through their fingertips. To that aim, I teach Tapestry as an interactive workshop consisting of seven labs. Each lab teaches a different aspect of Tapestry; a particular component or set of components, or a particular challenge developers are likely to face.

Each lab starts with a 20 to 30 minute presentation that will outline the goals of the lab: the issues to be tackled, the components to be covered, the special challenges to be explored. The labs themselves consist of an Eclipse project and a partially working Tapestry application (usually, just a single page). The goal is to "fix" the application, by adding and configuring components, and by writing small amounts of Java code. For the more complex labs, the work is broken up into smaller stages. Each lab includes a cheat sheet to ensure that no one gets too frustrated.

This Workshop approach is a way for me to gently lead people into the way of Tapestry, and to help developers understand exactly what it is that Tapestry does and even how it operates internally. Although the labs are geared for developers new to web development and new to Tapestry, they are also rich with information of value to even seasoned Tapestry developers.

This training has been successful at a number of clients, including Ioko, ProQuest, Chess and Regio / Reach-U.

The Tapestry Workshop environment is based on VMWare and an open stack of development software built around Ubuntu Linux, Eclipse and MySQL. Using this combination, I can easily deliver a complete, self-contained, pre-configured development environment that each student can run safely on their own computer or laptop.

The labs are designed to be challenging but not frustrating. The actual amount of code that needs to be written is small and very simple; anyone with even a basic understanding of Java and HTML (and a smattering of JavaScript) will have no problems. You just need to understand the differences between Java classes and Java interfaces, and have a basic understanding of JavaBeans properties.

I recommend at four days of class time to cover this amount of material. Many clients schedule an additional day to go in-depth on their particular application.

Course Details

There are currently seven labs:

  1. Tapestry Basics
    • Overview of Tapestry
    • Pages, templates, property expressions
    • Developer features: Live class reloading, exception reporting
    • Tapestry request cycle
    • Managing server-side state
  2. Hibernate
    • Hibernate basics: Session, HQL, Entity types
    • Using a Layout component
    • Displaying results using a Loop
    • Tapestry Dependency Injection
    • Page activation contexts
    • Using and customizing the BeanEditForm component
    • Adding client side user input validation
    • Handling page flow
  3. Components
    • Basics: location and naming
    • Defining parameters with @Parameter
    • Using MarkupWriter interface
    • Rendering state machine
    • Render phase methods
    • Layout components
    • Setting a default binding prefix
    • Using Tapestry blocks
    • Customizing BeanEditForm
  4. JavaScript
    • Including JavaScript Libraries
    • Creating a RichTextArea component
    • Improving client-side initialization
    • Tapestry 5 IoC in more detail
    • Defining services
    • Dependency Injection
    • Extensibility via Composition
    • Understanding Tapestry Service Configurations
    • Add new data types to BeanEditForm
  5. Grid
    • Grid component basics
    • Customizing the Grid
    • Supporting new output data types
    • Using Grid inside Form
  6. Ajax
    • Understanding the Ajax lifecycle
    • Using the ProgressiveDisplay component
    • Using the Zone component
    • Adding Keywords to Posts
    • Linking client-side behavior to server-side events
    • Editing Keywords using a Modalbox dialog
  7. Testing
    • Types of testing: unit, integration, acceptance, performance
    • Using Groovy for writing tests
    • Unit testing with TestNG
    • Mocking services and resources with EasyMock
    • Using the PageTester utility
    • What is Selenium?
    • Writing integration tests using Selenium

In addition, a final session is not lab based. It includes a discussion of page pooling, performance tuning, localization, packaging components into libraries, and many other small details about Tapestry.