Your SlideShare is downloading. ×
0
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Tapestry: State of the Union
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Tapestry: State of the Union

4,399

Published on

The slide deck from my session at JavaOne 2009.

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,399
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
110
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. Howard Lewis Ship • Creator, Apache Tapestry • Author, "Tapestry in Action" • Independent Consultant 2003-2007 • Formos 2008- © 2009 Formos www.formos.com
  • 3. What is Tapestry? © 2009 Formos www.formos.com
  • 4. Java © 2009 Formos www.formos.com
  • 5. Open Source © 2009 Formos www.formos.com
  • 6. Component Based © 2009 Formos www.formos.com
  • 7. Developer Focused © 2009 Formos www.formos.com
  • 8. Concise © 2009 Formos www.formos.com
  • 9. Fast! © 2009 Formos www.formos.com
  • 10. Mature © 2009 Formos www.formos.com
  • 11. Tapestry Elements © 2009 Nataline Fung http://www.flickr.com/photos/metaphora/3384569933/ © 2009 Formos www.formos.com
  • 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. 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. 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. 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. 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. 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. Template Injections Component Meta- Java Class Programming Message Catalog © 2009 Formos www.formos.com
  • 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. Developer Productivity © 2006 Martino Sabia http://www.flickr.com/photos/ezu/297634534/ © 2009 Formos www.formos.com
  • 21. © 2009 Formos www.formos.com
  • 22. Non-Tapestry Exception Reporting © 2009 Formos www.formos.com
  • 23. Index does not contain a property named 'now' Available properties: class, componentResources, currentTime © 2009 Formos www.formos.com
  • 24. © 2009 Formos www.formos.com
  • 25. © 2009 Formos www.formos.com
  • 26. Scaffolding © 2009 Formos www.formos.com
  • 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. © 2009 Formos www.formos.com
  • 29. Parameters Property Types BeanEditForm Naming Conventions Annotations Explicit Overrides Localized Messages © 2009 Formos www.formos.com
  • 30. Feedback & Exploration © 2008 Alan Grinberg http://www.flickr.com/photos/agrinberg/2465119180/ © 2009 Formos www.formos.com
  • 31. Flow © 2008 Manu Gómez http://www.flickr.com/photos/manugomi/2884678938/ © 2009 Formos www.formos.com
  • 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. Internationalization © 2006 Tom Magliery http://www.flickr.com/photos/mag3737/267638148/ © 2009 Formos www.formos.com
  • 34. © 2009 Formos www.formos.com
  • 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. Tapestry Components Copyright © A. Lipson 2003 http://www.andrewlipson.com/escher/relativity.html © 2009 Formos www.formos.com
  • 37. Intrinsic © 2009 Formos www.formos.com
  • 38. Inheritance © 2009 Formos www.formos.com
  • 39. Composition © 2009 Formos www.formos.com
  • 40. POJO © 2009 Formos www.formos.com
  • 41. Events © 2009 Formos www.formos.com
  • 42. Consistency! http://flickr.com/photos/kylemay/1430449350/ © 2009 Formos www.formos.com
  • 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. 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. 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. 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. 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. © 2009 Formos www.formos.com
  • 49. Tapestry Performance © 2009 viernest http://www.flickr.com/photos/viernest/3380560365/ © 2009 Formos www.formos.com
  • 50. Request Processing Speed © 2007 Jojo Cence http://www.flickr.com/photos/jojocence/1372693375/ © 2009 Formos www.formos.com
  • 51. Java == Fast © 2009 Formos www.formos.com
  • 52. No Reflection © 2009 Formos www.formos.com
  • 53. Page Pooling © 2009 Formos www.formos.com
  • 54. GZIP Compression © 2009 Formos www.formos.com
  • 55. Scalability © 2007 Patrick Dirden http://www.flickr.com/photos/sp8254/2052236004/ © 2009 Formos www.formos.com
  • 56. YSlow! © 2009 Formos www.formos.com
  • 57. JavaScript Aggregation © 2009 Formos www.formos.com
  • 58. Far Future Expires Header © 2009 Formos www.formos.com
  • 59. Versioned URLs © 2009 Formos www.formos.com
  • 60. Content Delivery Network© 2009 Formos www.formos.com
  • 61. Correct HttpSession Usage © 2009 Formos www.formos.com
  • 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. Conclusion © 2009 Formos www.formos.com
  • 64. © 2009 Dani Ihtatho http://www.flickr.com/photos/ihtatho/627226315/ © 2009 Formos www.formos.com
  • 65. Infrastructure © 2008 Christophe Delaere http://www.flickr.com/photos/delaere/2514143242/ © 2009 Formos www.formos.com
  • 66. Performance © 2007 Marina Campos Vinhal http://www.flickr.com/photos/marinacvinhal/379111290/ © 2009 Formos www.formos.com
  • 67. Tapestry: The Expert is Built In © 2006 kris247 http://www.flickr.com/photos/kris247/86924080/ © 2009 Formos www.formos.com
  • 68. Tapestry 5 In Production © 2009 Formos www.formos.com
  • 69. Adoption © 2007 seth m http://www.flickr.com/photos/thalamus/469762314/ © 2009 Formos www.formos.com
  • 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. 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. 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. 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. Meet the Team © 2009 spong http://www.flickr.com/photos/sponng/3206728292/ © 2009 Formos www.formos.com
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. http://tapestry.apache.org © 2009 Formos www.formos.com
  • 85. http://tapestry.formos.com © 2009 Formos www.formos.com
  • 86. http://formos.com howard.lewis.ship@formos.com © 2009 Formos www.formos.com

×