0
Apache
Tapestry 5:
State of the
Union
Howard M. Lewis Ship

Director of Open Source Technology
Formos
© 2006 Chris Walton
...
Howard Lewis Ship


• Creator, Apache Tapestry
• Author, "Tapestry in Action"
• Independent Consultant
 2003-2007
• Formos...
What is Tapestry?




               © 2009 Formos www.formos.com
Java
       © 2009 Formos www.formos.com
Open
Source
     © 2009 Formos www.formos.com
Component
  Based
       © 2009 Formos www.formos.com
Developer
 Focused
        © 2009 Formos www.formos.com
Concise
      © 2009 Formos www.formos.com
Fast!
        © 2009 Formos www.formos.com
Mature
     © 2009 Formos www.formos.com
Tapestry
          Elements
© 2009 Nataline Fung
http://www.flickr.com/photos/metaphora/3384569933/
                       ...
Tapestry Templates



        Login.tml

        <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
   ...
Page Classes


   Login.tml

   <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
     <body>
       <...
Page Flows

  Login.java                          UserProfile.java

  public class Login                  public class User...
Inversion of Control
  Login.java

  public class Login
                                                            Your
 ...
Meta-Programming
 Login.java

 public class Login                Generate getter & setter
 {
   @Property
   private Strin...
State Management


                    UserProfile.java

                    public class UserProfile
                    {...
Template                             Injections



                  Component      Meta-
     Java Class
                ...
❝Most software today is very much
like an Egyptian pyramid with
millions of bricks piled on top of each
other, with no str...
Developer
Productivity
© 2006 Martino Sabia
http://www.flickr.com/photos/ezu/297634534/
                                   ...
© 2009 Formos www.formos.com
Non-Tapestry Exception Reporting




                                   © 2009 Formos www.formos.com
Index does not contain a property named 'now'


              Available properties: class,
              componentResource...
© 2009 Formos www.formos.com
© 2009 Formos www.formos.com
Scaffolding




              © 2009 Formos www.formos.com
BoardGame.java

@Entity
public class BoardGame
{
  @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @NonVisual
  pr...
© 2009 Formos www.formos.com
Parameters
    Property Types




                             BeanEditForm
    Naming Conventions



     Annotations



...
Feedback &
Exploration


© 2008 Alan Grinberg
http://www.flickr.com/photos/agrinberg/2465119180/
                          ...
Flow




© 2008 Manu Gómez
http://www.flickr.com/photos/manugomi/2884678938/
                                              ...
❝PHP and Rails have taught us that
development speed is more important
than we thought it was ... you really
don’t underst...
Internationalization




© 2006 Tom Magliery
http://www.flickr.com/photos/mag3737/267638148/
                              ...
© 2009 Formos www.formos.com
Index_de.properties

page-title=Erstellen Sie eine neue Brettspiel
add-game=Spiel hinzufŸgen

modern=Modernen             ...
Tapestry
  Components




Copyright © A. Lipson 2003
http://www.andrewlipson.com/escher/relativity.html   © 2009 Formos ww...
Intrinsic
       © 2009 Formos www.formos.com
Inheritance
         © 2009 Formos www.formos.com
Composition
         © 2009 Formos www.formos.com
POJO
       © 2009 Formos www.formos.com
Events
     © 2009 Formos www.formos.com
Consistency!
http://flickr.com/photos/kylemay/1430449350/   © 2009 Formos www.formos.com
Nested Components
                                                                      Layout
                           ...
Layout Components
Layout.tml


<html xmlns="http://www.w3.org/1999/xhtml"                           ❷
  xmlns:t="http://ta...
Component Parameters

   Layout.java


   public class Layout
   {
     /** The page title, for the <title> element and th...
Non-Template Components



  OutputDate.java


  public class OutputDate
  {
    private final DateFormat formatter =
    ...
Start




           SetupRender
                                                      Component Rendering
               ...
© 2009 Formos www.formos.com
Tapestry
Performance




© 2009 viernest
http://www.flickr.com/photos/viernest/3380560365/
                                ...
Request
Processing
Speed




© 2007 Jojo Cence
http://www.flickr.com/photos/jojocence/1372693375/
                         ...
Java
== Fast
      © 2009 Formos www.formos.com
No
Reflection
       © 2009 Formos www.formos.com
Page
Pooling
      © 2009 Formos www.formos.com
GZIP
Compression
         © 2009 Formos www.formos.com
Scalability
© 2007 Patrick Dirden
http://www.flickr.com/photos/sp8254/2052236004/
                                         ...
YSlow!
     © 2009 Formos www.formos.com
JavaScript
Aggregation
         © 2009 Formos www.formos.com
Far Future
 Expires
 Header © 2009 Formos www.formos.com
Versioned
  URLs
       © 2009 Formos www.formos.com
Content
Delivery
Network© 2009 Formos www.formos.com
Correct
HttpSession
   Usage © 2009 Formos www.formos.com
❝Architecture is the decisions that you
wish you could get right early in a
project.❞



Martin Fowler, Chief Scientist, T...
Conclusion




             © 2009 Formos www.formos.com
© 2009 Dani Ihtatho
http://www.flickr.com/photos/ihtatho/627226315/
                                                 © 2009...
Infrastructure




© 2008 Christophe Delaere
http://www.flickr.com/photos/delaere/2514143242/
                             ...
Performance




© 2007 Marina Campos Vinhal
http://www.flickr.com/photos/marinacvinhal/379111290/
                         ...
Tapestry: The Expert is
Built In




© 2006 kris247
http://www.flickr.com/photos/kris247/86924080/
                        ...
Tapestry 5 In Production




                           © 2009 Formos www.formos.com
Adoption




© 2007 seth m
http://www.flickr.com/photos/thalamus/469762314/
                                               ...
Page Views / Month
                                   Wicket                                             Tapestry

       ...
Page Views / Month
                        Wicket                                 Tapestry                              St...
Downloads / Month
                                   Wicket                                             Tapestry

        ...
Downloads / Month
                        Wicket                                 Tapestry                              Str...
Meet the Team




© 2009 spong
http://www.flickr.com/photos/sponng/3206728292/
                                            ...
Dan Adams
                                 Boston, MA, USA
                     ❝Tapestry has allowed us
             achi...
Andreas Andreou
                                            Athens, Greece
              ❝I first came across Tapestry at t...
Ben Dotte
                                 Madison, WI, USA
             ❝Tapestry has served as a solid
            base ...
Daniel Gredler
                                       Atlanta, GA, USA

                     ❝I know it sounds blasé, but
...
Daniel Jue
                                   Frederick, MD, US
                         ❝When I tell the other
          ...
Thiago H. de Paula Figueiredo
                        Belo Horizonte, Minas Gerais, Brazil
                  ❝No Java Web ...
Marcus Schulte
                                     Zürich, Switzerland
                      ❝Tapestry stands for simple
...
Robert Zeigler
                                    Saint Louis, MO, USA
                     ❝Tapestry 5-IOC is IOC done
 ...
Howard M. Lewis Ship
                                    Portland, OR, USA
                  ❝There will never need to be ...
http://tapestry.apache.org




                   © 2009 Formos www.formos.com
http://tapestry.formos.com




                    © 2009 Formos www.formos.com
http://formos.com




howard.lewis.ship@formos.com

                    © 2009 Formos www.formos.com
Upcoming SlideShare
Loading in...5
×

Tapestry: State of the Union

4,421

Published on

The slide deck from my session at JavaOne 2009.

Published in: Economy & Finance, Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,421
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
110
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Tapestry: State of the Union"

  1. 1. Apache Tapestry 5: State of the Union Howard M. Lewis Ship Director of Open Source Technology Formos © 2006 Chris Walton http://www.flickr.com/photos/philocrites/245011706/ © 2009 Formos www.formos.com
  2. 2. Howard Lewis Ship • Creator, Apache Tapestry • Author, "Tapestry in Action" • Independent Consultant 2003-2007 • Formos 2008- © 2009 Formos www.formos.com
  3. 3. What is Tapestry? © 2009 Formos www.formos.com
  4. 4. Java © 2009 Formos www.formos.com
  5. 5. Open Source © 2009 Formos www.formos.com
  6. 6. Component Based © 2009 Formos www.formos.com
  7. 7. Developer Focused © 2009 Formos www.formos.com
  8. 8. Concise © 2009 Formos www.formos.com
  9. 9. Fast! © 2009 Formos www.formos.com
  10. 10. Mature © 2009 Formos www.formos.com
  11. 11. Tapestry Elements © 2009 Nataline Fung http://www.flickr.com/photos/metaphora/3384569933/ © 2009 Formos www.formos.com
  12. 12. Tapestry Templates Login.tml <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"> <body> <h1>Please Login</h1> Login <t:form> <t:label for="userId"/> <t:textfield value="userId"/> <br/> form <t:label for="password"/> <t:passwordfield value="password"/> <br/> label <input type="submit" value="Login"/> </t:form> </html> textfield label passwordfield © 2009 Formos www.formos.com
  13. 13. Page Classes Login.tml <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"> <body> <h1>Please Login</h1> Login.java <t:form> <t:label for="userId"/> public class Login <t:textfield value="userId"/> { <br/> @Property <t:label for="password"/> private String userId; <t:passwordfield value="password"/> <br/> @Property <input type="submit" value="Login"/> private String password; </t:form> </html> Object onSuccess() { … } } © 2009 Formos www.formos.com
  14. 14. Page Flows Login.java UserProfile.java public class Login public class UserProfile { { @Property … private String userId; } @Property private String password; void onValidate() { … } Object onSuccess() { … return UserProfile.class; } } © 2009 Formos www.formos.com
  15. 15. Inversion of Control Login.java public class Login Your code { @Property private String userId; @Property private String password; … Inject IoC @Inject Service private Session session; into field @CommitAfter Object onSuccess() { … User user = (User) session. … user.setLastLogin(new Date()); } } return UserProfile.class; Tapestry Services © 2009 Formos www.formos.com
  16. 16. Meta-Programming Login.java public class Login Generate getter & setter { @Property private String userId; @Property private String password; @InjectPage private UserProfile userProfilePage; … @Inject private Session session; Commit Hibernate transaction @CommitAfter Object onSuccess() { … User user = (User) session. … user.setLastLogin(new Date()); return userProfilePage; } } © 2009 Formos www.formos.com
  17. 17. State Management UserProfile.java public class UserProfile { Shared global value (any page) @Property @SessionState This page only private UserEntity user; @Property @Persist private Date searchStart; } © 2009 Formos www.formos.com
  18. 18. Template Injections Component Meta- Java Class Programming Message Catalog © 2009 Formos www.formos.com
  19. 19. ❝Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.❞ Alan Kay, co-designer of the Smalltalk programming language © 2009 Formos www.formos.com
  20. 20. Developer Productivity © 2006 Martino Sabia http://www.flickr.com/photos/ezu/297634534/ © 2009 Formos www.formos.com
  21. 21. © 2009 Formos www.formos.com
  22. 22. Non-Tapestry Exception Reporting © 2009 Formos www.formos.com
  23. 23. Index does not contain a property named 'now' Available properties: class, componentResources, currentTime © 2009 Formos www.formos.com
  24. 24. © 2009 Formos www.formos.com
  25. 25. © 2009 Formos www.formos.com
  26. 26. Scaffolding © 2009 Formos www.formos.com
  27. 27. BoardGame.java @Entity public class BoardGame { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @NonVisual private long id; @Validate("required") private String title; private String creator; private String publisher; private Date published; private boolean inPrint; @Validate("required") @Column(nullable = false) private Genre genre; @Validate("required") @Column(nullable = false) private Theme theme; @Validate("min=1") private Integer minPlayers; @Validate("min=1") private Integer maxPlayers; @Validate("min=1,max=5") private Integer rating; @DataType("longtext") private String notes; © 2009 Formos www.formos.com
  28. 28. © 2009 Formos www.formos.com
  29. 29. Parameters Property Types BeanEditForm Naming Conventions Annotations Explicit Overrides Localized Messages © 2009 Formos www.formos.com
  30. 30. Feedback & Exploration © 2008 Alan Grinberg http://www.flickr.com/photos/agrinberg/2465119180/ © 2009 Formos www.formos.com
  31. 31. Flow © 2008 Manu Gómez http://www.flickr.com/photos/manugomi/2884678938/ © 2009 Formos www.formos.com
  32. 32. ❝PHP and Rails have taught us that development speed is more important than we thought it was ... you really don’t understand a feature till you’ve built it, so the faster you can build them the faster you understand them.❞ Tim Bray, Director of Web Technologies, Sun Microsystems © 2009 Formos www.formos.com
  33. 33. Internationalization © 2006 Tom Magliery http://www.flickr.com/photos/mag3737/267638148/ © 2009 Formos www.formos.com
  34. 34. © 2009 Formos www.formos.com
  35. 35. Index_de.properties page-title=Erstellen Sie eine neue Brettspiel add-game=Spiel hinzufŸgen modern=Modernen Index.tml medieval=Mittelalter bible=Bibel <html t:type="layout" title="message:page-title" abstract=Zusammenfassung xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> war_game=Kriegsspiel card=Karte <t:beaneditform submitlabel="message:add-game" object="game"/> role_playing=Rollenspiele </html> cooperative=Genossenschaft creator-label=Schšpfer publisher-label=Verlag published-label=Veršffentlicht inprint-label=Im Druck theme-label=Thema minplayers-label=Mindest-Spieler maxplayers-label=Maximale Spieler notes-label=Notation © 2009 Formos www.formos.com
  36. 36. Tapestry Components Copyright © A. Lipson 2003 http://www.andrewlipson.com/escher/relativity.html © 2009 Formos www.formos.com
  37. 37. Intrinsic © 2009 Formos www.formos.com
  38. 38. Inheritance © 2009 Formos www.formos.com
  39. 39. Composition © 2009 Formos www.formos.com
  40. 40. POJO © 2009 Formos www.formos.com
  41. 41. Events © 2009 Formos www.formos.com
  42. 42. Consistency! http://flickr.com/photos/kylemay/1430449350/ © 2009 Formos www.formos.com
  43. 43. Nested Components Layout title : String Layout.tml pageNames : List pageName : String <html xmlns="http://www.w3.org/1999/xhtml" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <head> <title>${title}</title> </head> <body> … <div id="menu"> <ul> <li t:type="loop" source="pageNames" value="pageName" class="prop:classForPageName"> <t:pagelink page="prop:pageName">${pageName}</t:pagelink> Index </li> </ul> </div> Layout … Loop PageLink © 2009 Formos www.formos.com
  44. 44. Layout Components Layout.tml <html xmlns="http://www.w3.org/1999/xhtml" ❷ xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <head> <title>${title}</title> </head> <body> . . . <t:body/> ❸ . . . ❺ Index.tml </body> </html> <html t:type="layout" title="message:page-title" ❶ xmlns:t="http://tapestry.apache.org/schema/ ↵ tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <t:beaneditform submitlabel="message:add-game" object="game" /> ❹ </html> © 2009 Formos www.formos.com
  45. 45. Component Parameters Layout.java public class Layout { /** The page title, for the <title> element and the <h1> element. */ @Property @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) private String title; @Property @Parameter(defaultPrefix = BindingConstants.LITERAL) private String sidebarTitle; @Property @Parameter(defaultPrefix = BindingConstants.LITERAL) private Block sidebar; @Property private String pageName; © 2009 Formos www.formos.com
  46. 46. Non-Template Components OutputDate.java public class OutputDate { private final DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); @Parameter(required = true, allowNull = false) private Date date; void beginRender(MarkupWriter writer) { writer.write(formatter.format(date)); } } © 2009 Formos www.formos.com
  47. 47. Start SetupRender Component Rendering true RichOutput.java false BeginRender void beginRender(MarkupWriter writer) true false { writer.write(formatter.format(date)); } Render Template Render Body false AfterRender false true CleanupRender true End © 2009 Formos www.formos.com
  48. 48. © 2009 Formos www.formos.com
  49. 49. Tapestry Performance © 2009 viernest http://www.flickr.com/photos/viernest/3380560365/ © 2009 Formos www.formos.com
  50. 50. Request Processing Speed © 2007 Jojo Cence http://www.flickr.com/photos/jojocence/1372693375/ © 2009 Formos www.formos.com
  51. 51. Java == Fast © 2009 Formos www.formos.com
  52. 52. No Reflection © 2009 Formos www.formos.com
  53. 53. Page Pooling © 2009 Formos www.formos.com
  54. 54. GZIP Compression © 2009 Formos www.formos.com
  55. 55. Scalability © 2007 Patrick Dirden http://www.flickr.com/photos/sp8254/2052236004/ © 2009 Formos www.formos.com
  56. 56. YSlow! © 2009 Formos www.formos.com
  57. 57. JavaScript Aggregation © 2009 Formos www.formos.com
  58. 58. Far Future Expires Header © 2009 Formos www.formos.com
  59. 59. Versioned URLs © 2009 Formos www.formos.com
  60. 60. Content Delivery Network© 2009 Formos www.formos.com
  61. 61. Correct HttpSession Usage © 2009 Formos www.formos.com
  62. 62. ❝Architecture is the decisions that you wish you could get right early in a project.❞ Martin Fowler, Chief Scientist, ThoughtWorks © 2009 Formos www.formos.com
  63. 63. Conclusion © 2009 Formos www.formos.com
  64. 64. © 2009 Dani Ihtatho http://www.flickr.com/photos/ihtatho/627226315/ © 2009 Formos www.formos.com
  65. 65. Infrastructure © 2008 Christophe Delaere http://www.flickr.com/photos/delaere/2514143242/ © 2009 Formos www.formos.com
  66. 66. Performance © 2007 Marina Campos Vinhal http://www.flickr.com/photos/marinacvinhal/379111290/ © 2009 Formos www.formos.com
  67. 67. Tapestry: The Expert is Built In © 2006 kris247 http://www.flickr.com/photos/kris247/86924080/ © 2009 Formos www.formos.com
  68. 68. Tapestry 5 In Production © 2009 Formos www.formos.com
  69. 69. Adoption © 2007 seth m http://www.flickr.com/photos/thalamus/469762314/ © 2009 Formos www.formos.com
  70. 70. Page Views / Month Wicket Tapestry 700,000 Tapestry 5.0.18 525,000 350,000 175,000 03-2008 04-2008 05-2008 06-2008 07-2008 08-2008 09-2008 0 10-2008 11-2008 12-2008 01-2009 02-2009 03-2009 04-2009 © 2009 Formos www.formos.com
  71. 71. Page Views / Month Wicket Tapestry Struts 3,000,000 2,250,000 1,500,000 750,000 03-2008 04-2008 05-2008 06-2008 07-2008 08-2008 0 09-2008 10-2008 11-2008 12-2008 01-2009 02-2009 03-2009 04-2009 © 2009 Formos www.formos.com
  72. 72. Downloads / Month Wicket Tapestry 90,000 67,500 45,000 Tapestry 5.0.18 22,500 03-2008 04-2008 05-2008 06-2008 07-2008 08-2008 09-2008 0 10-2008 11-2008 12-2008 01-2009 02-2009 03-2009 04-2009 © 2009 Formos www.formos.com
  73. 73. Downloads / Month Wicket Tapestry Struts 5,000,000 3,750,000 2,500,000 1,250,000 03-2008 04-2008 05-2008 06-2008 07-2008 08-2008 0 09-2008 10-2008 11-2008 12-2008 01-2009 02-2009 03-2009 04-2009 © 2009 Formos www.formos.com
  74. 74. Meet the Team © 2009 spong http://www.flickr.com/photos/sponng/3206728292/ © 2009 Formos www.formos.com
  75. 75. Dan Adams Boston, MA, USA ❝Tapestry has allowed us achieve higher code re-use and deliver higher-quality, better- tested solutions to clients with more modern interfaces. It's also fun to work in which makes life better for our engineers.❞ Goals: •Increase support for general development including DOM manipulation and utility components •Feed back in features and improvements from our real world projects © 2009 Formos www.formos.com
  76. 76. Andreas Andreou Athens, Greece ❝I first came across Tapestry at the second half of 2004... it was love at first sight!❞ Goals: •Release AmpFlow, a project that works at the component level... it is to flows what BeanEditForm is to Forms © 2009 Formos www.formos.com
  77. 77. Ben Dotte Madison, WI, USA ❝Tapestry has served as a solid base for our suite of digital asset management applications since Tapestry version 2❞ Goals: •As we convert our Tapestry 4 application to Tapestry 5 ... contribute any changes we make to ensure that our applications are performant and customizable, and that deployment processes are as streamlined as possible © 2009 Formos www.formos.com
  78. 78. Daniel Gredler Atlanta, GA, USA ❝I know it sounds blasé, but Tapestry is hands down the best web framework out there❞ Goals: •Integrate HtmlUnit testing © 2009 Formos www.formos.com
  79. 79. Daniel Jue Frederick, MD, US ❝When I tell the other developers I chose Tapestry 5 for my project's web framework, I get the jealous nod. The dependency injection alone is a joy to work with. Tapestry 5 is amazingly stable and succinct, allowing me to stay focused on optimizing my own code and expanding the app's capabilities with less effort than my colleagues.❞ Goals: •Provide a wider range of samples apps to help new users get up to speed •Google Web Toolkit / Tapestry IoC Integration © 2009 Formos www.formos.com
  80. 80. Thiago H. de Paula Figueiredo Belo Horizonte, Minas Gerais, Brazil ❝No Java Web framework is so clean, elegant, flexible, and productive as Tapestry❞ Goals: •Add transaction management and other features… towards a full application stack, like Spring •Raise awareness and increase adoption of Tapestry © 2009 Formos www.formos.com
  81. 81. Marcus Schulte Zürich, Switzerland ❝Tapestry stands for simple components and an elegance and consistency of design that I have yet to find in another web- framework❞ Goals: •Provide improved Tapestry / Google Web Toolkit integration © 2009 Formos www.formos.com
  82. 82. Robert Zeigler Saint Louis, MO, USA ❝Tapestry 5-IOC is IOC done right: concise and easy to use, with plenty of power when you need it. Tapestry takes code reuse from aspired-to ideal to practical inevitability.❞ Goals: •Improved Tapestry/Cayenne integration •Improve and Simplify Ajax support, especially Ajax with Forms •Detailed Tapestry Tutorial (using Cayenne) © 2009 Formos www.formos.com
  83. 83. Howard M. Lewis Ship Portland, OR, USA ❝There will never need to be a Tapestry 6❞ Goals: •Spring Web Flow Integration •Portlet Support •More and better Ajax •Better documentation •Towards a fuller stack © 2009 Formos www.formos.com
  84. 84. http://tapestry.apache.org © 2009 Formos www.formos.com
  85. 85. http://tapestry.formos.com © 2009 Formos www.formos.com
  86. 86. http://formos.com howard.lewis.ship@formos.com © 2009 Formos www.formos.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×