Weitere ähnliche Inhalte
Ähnlich wie Tapestry: State of the Union (20)
Mehr von Howard Lewis Ship (14)
Kürzlich hochgeladen (20)
Tapestry: State of the Union
- 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
- 4. Java
© 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
- 23. Index does not contain a property named 'now'
Available properties: class,
componentResources, currentTime
© 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
- 29. Parameters
Property Types
BeanEditForm
Naming Conventions
Annotations
Explicit Overrides
Localized Messages
© 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
- 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
- 40. POJO
© 2009 Formos www.formos.com
- 41. Events
© 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
- 56. YSlow!
© 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
- 64. © 2009 Dani Ihtatho
http://www.flickr.com/photos/ihtatho/627226315/
© 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
- 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