Your SlideShare is downloading. ×
  • Like
  • Save
Play
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Play

  • 662 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
662
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
0

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. Play Framework (Fun is back in Java) @basavSaturday, December 8, 12
  • 2. About Me • Just another Java developer • have experienced JSP, Struts2, Spring MVC, JSF etc • Fed up with complex Java EE environment for simple Web apps • Current Interests • Clojure, Play, Cloud..Saturday, December 8, 12
  • 3. Agenda • Background - 5 mins • Why Play! Framework? - 10 mins • Features and Benefits - 15 mins • Demo - 10 mins • Q &ASaturday, December 8, 12
  • 4. Web is taking over.. • Web is providing data on HTTP not just web pages • Browser is acting as an Operating system • Javascript has become very powerful • Webapps are aliveSaturday, December 8, 12
  • 5. Is Java Development Fun(for webapps)??Saturday, December 8, 12
  • 6. Compared toSaturday, December 8, 12
  • 7. Compared to Not Anymore....Saturday, December 8, 12
  • 8. Saturday, December 8, 12
  • 9. Web frameworks Non Java Java basedSaturday, December 8, 12
  • 10. Non Java Web frameworksSaturday, December 8, 12
  • 11. Non Java Web frameworks • Are popularSaturday, December 8, 12
  • 12. Non Java Web frameworks • Are popular • HTTP is first class citizenSaturday, December 8, 12
  • 13. Non Java Web frameworks • Are popular • HTTP is first class citizen • Rapid DevelopmentSaturday, December 8, 12
  • 14. Non Java Web frameworks • Are popular • HTTP is first class citizen • Rapid Development • Rapid DeploymentSaturday, December 8, 12
  • 15. Non Java Web frameworks • Are popular • HTTP is first class citizen • Rapid Development • Rapid Deployment • Less codeSaturday, December 8, 12
  • 16. Non Java Web frameworks • Are popular • HTTP is first class citizen • Rapid Development • Rapid Deployment • Less code • JVM EcosystemSaturday, December 8, 12
  • 17. Java Web frameworksSaturday, December 8, 12
  • 18. Java Web frameworks • on JVMSaturday, December 8, 12
  • 19. Java Web frameworks • on JVM • Standard basedSaturday, December 8, 12
  • 20. Java Web frameworks • on JVM • Standard based • Implement Heavy Servlet SpecsSaturday, December 8, 12
  • 21. Java Web frameworks • on JVM • Standard based • Implement Heavy Servlet Specs • Embrace HTTPSaturday, December 8, 12
  • 22. Java Web frameworks • on JVM • Standard based • Implement Heavy Servlet Specs • Embrace HTTP • Rapid DevelopmentSaturday, December 8, 12
  • 23. Java Web frameworks • on JVM • Standard based • Implement Heavy Servlet Specs • Embrace HTTP • Rapid Development • Rapid DeploymentSaturday, December 8, 12
  • 24. Java Web frameworks • on JVM • Standard based • Implement Heavy Servlet Specs • Embrace HTTP • Rapid Development • Rapid Deployment • Less More codeSaturday, December 8, 12
  • 25. Where is the GAP and What we Need?Saturday, December 8, 12
  • 26. Where is the GAP and What we Need? • HTTP as First Class CitizenSaturday, December 8, 12
  • 27. Where is the GAP and What we Need? • HTTP as First Class Citizen • Rapid DevelopmentSaturday, December 8, 12
  • 28. Where is the GAP and What we Need? • HTTP as First Class Citizen • Rapid Development • Rapid DeploymentSaturday, December 8, 12
  • 29. Where is the GAP and What we Need? • HTTP as First Class Citizen • Rapid Development • Rapid Deployment +Saturday, December 8, 12
  • 30. Where is the GAP and What we Need? • HTTP as First Class Citizen • Rapid Development • Rapid Deployment + • on JVM Ecosystem (i.e. Pure Java Support)Saturday, December 8, 12
  • 31. Conventional Java EE Stack for Web Apps • Complex • Lots of • Specs and Implementations • Configurations • Layered • Defined by Standards / Specs • Assembled by InterfacesSaturday, December 8, 12
  • 32. Conventional Java EE Stack for Web Apps • Complex • Lots of • Specs and Implementations OVER ARCHITECTED • Configurations • Layered • Defined by Standards / Specs • Assembled by InterfacesSaturday, December 8, 12
  • 33. Why? “Java developers are building Java applications, not web applications”Saturday, December 8, 12
  • 34. Why? “Java culture emphasis interfaces and layers of abstraction over solving problems directly.”Saturday, December 8, 12
  • 35. What about Developer Productivity?Saturday, December 8, 12
  • 36. What about Developer Productivity? • code change -> run Maven / Ant -> build war -> copy-> Deploy -> wait (sometimes server restart) -> open-browser-> test (Try developing something on Webpshere, you understand what I mean)Saturday, December 8, 12
  • 37. Developer ProductivitySaturday, December 8, 12
  • 38. Developer Productivity • importantSaturday, December 8, 12
  • 39. Developer Productivity • important • is of economic valueSaturday, December 8, 12
  • 40. Developer Productivity • important • is of economic value • Lets not pay for compile-test-deploy cycleSaturday, December 8, 12
  • 41. Developer Productivity • important • is of economic value • Lets not pay for compile-test-deploy cycle • more importantly - Lets not bore themSaturday, December 8, 12
  • 42. Where is the GAP and What we Need?Saturday, December 8, 12
  • 43. Where is the GAP and What we Need? • HTTP as First Class • Rapid Development Citizen • Rapid Deployment + • on JVM Ecosystem (i.e. Pure Java Support)Saturday, December 8, 12
  • 44. Where is the GAP and What we Need? • HTTP as First Class • Rapid Development Citizen • Rapid Deployment + • on JVM Ecosystem (i.e. Pure Java Support) • Developer ProductivitySaturday, December 8, 12
  • 45. Where is the GAP and What we Need? • HTTP as First Class • Rapid Development Citizen • Rapid Deployment + • on JVM Ecosystem (i.e. Pure Java Support) • Developer Productivity =Saturday, December 8, 12
  • 46. Where is the GAP and What we Need? • HTTP as First Class • Rapid Development Citizen • Rapid Deployment + • on JVM Ecosystem (i.e. Pure Java Support) • Developer Productivity =Saturday, December 8, 12
  • 47. pure Java Web Framework • https://github.com/playframework/play.gitSaturday, December 8, 12
  • 48. • Founded by Guillaume Bort in 2007 • 500,000+ downloads, and counting • 3000+ questions tagged in stackoverflow • 7000+ members on Play google groups • ~7000 topics • 100+ modulesSaturday, December 8, 12
  • 49. Play isSaturday, December 8, 12
  • 50. Play is • Full Stack Framework (from compilation to deployment)Saturday, December 8, 12
  • 51. Play is • Full Stack Framework (from compilation to deployment) • Stateless ArchitectureSaturday, December 8, 12
  • 52. Play is • Full Stack Framework (from compilation to deployment) • Stateless Architecture • Not Based on Servlet APISaturday, December 8, 12
  • 53. Play is • Full Stack Framework (from compilation to deployment) • Stateless Architecture • Not Based on Servlet API • RESTFul ArchitectureSaturday, December 8, 12
  • 54. Play is • Full Stack Framework (from compilation to deployment) • Stateless Architecture • Not Based on Servlet API • RESTFul Architecture • Shared Philosophy - Heavily borrowed from Rails / DjangoSaturday, December 8, 12
  • 55. Play is • Full Stack Framework (from compilation to deployment) • Stateless Architecture • Not Based on Servlet API • RESTFul Architecture • Shared Philosophy - Heavily borrowed from Rails / Django • Web Framework - Not a Java Framework!!Saturday, December 8, 12
  • 56. Play History • Started with Servlet and JSPSaturday, December 8, 12
  • 57. Play History • Servlet and JSP replaced by custom Classloader • Introduced Python support • Groovy for Templates • Async IOSaturday, December 8, 12
  • 58. Play History Introduced • Ivy For Build • Websockets • ScalaSaturday, December 8, 12
  • 59. Play History Introduced • Ivy SBT • Groovy Scala Templates • Akka for middleware • First class support for ScalaSaturday, December 8, 12
  • 60. Our focus for Today is on Play 1.2.5Saturday, December 8, 12
  • 61. Full Stack...Saturday, December 8, 12
  • 62. Full Stack... • Full Stack - everything “needed” is bundled JDT Compiler JPASaturday, December 8, 12
  • 63. Full Stack... • Full Stack - everything “needed” is bundled JDT Compiler JPA Can be packaged as standard WARS and deployed in Servlet ContainersSaturday, December 8, 12
  • 64. What’s in there?Saturday, December 8, 12
  • 65. What’s in there? org.eclipse.jdt.core-3.6.0.jarSaturday, December 8, 12
  • 66. What’s in there? org.eclipse.jdt.core-3.6.0.jar netty-3.2.4.Final.jar aync-http-client-1.6.3.jarSaturday, December 8, 12
  • 67. What’s in there? org.eclipse.jdt.core-3.6.0.jar netty-3.2.4.Final.jar aync-http-client-1.6.3.jarSaturday, December 8, 12
  • 68. What’s in there?Saturday, December 8, 12
  • 69. What’s in there? hibernate-entitymanager-3.6.0.jar hibernate-jpa-2.0-api-1.0.0.Final.jar jta-1.1.jar myql-connector-java-5.1.13.jar postgressql-9.0.jar h2-1.3.149.jarSaturday, December 8, 12
  • 70. What’s in there? joda-date-time mem-cache groovy jamon-2.7.jarSaturday, December 8, 12
  • 71. What’s in there? joda-date-time mem-cache groovy jamon-2.7.jarSaturday, December 8, 12
  • 72. What’s in there?Saturday, December 8, 12
  • 73. What’s in there? commons-lang commons-fileupload commons-io commons-collections commons-logging commons-email commons-codec commons-beanutisSaturday, December 8, 12
  • 74. What’s in there? commons-lang commons-fileupload commons-io commons-collections commons-logging commons-email commons-codec commons-beanutisSaturday, December 8, 12
  • 75. My top 10 featuresSaturday, December 8, 12
  • 76. My top 10 features • Pure JavaSaturday, December 8, 12
  • 77. My top 10 features • Pure Java • Starts fast, runs fastSaturday, December 8, 12
  • 78. My top 10 features • Pure Java • Starts fast, runs fast • No compile, deploy, restart cycle - Fix the bug and hit reload!Saturday, December 8, 12
  • 79. My top 10 features • Pure Java • Starts fast, runs fast • No compile, deploy, restart cycle - Fix the bug and hit reload! • URL RoutingSaturday, December 8, 12
  • 80. My top 10 features • Pure Java • Starts fast, runs fast • No compile, deploy, restart cycle - Fix the bug and hit reload! • URL Routing • HTTP Parameter BindingSaturday, December 8, 12
  • 81. My top 10 features • Pure Java • Starts fast, runs fast • No compile, deploy, restart cycle - Fix the bug and hit reload! • URL Routing • HTTP Parameter Binding • Share nothing system - no state in the serverSaturday, December 8, 12
  • 82. My top 10 features • Pure Java • Starts fast, runs fast • Exact errors (including • No compile, deploy, line numbers, even for groovy templates) restart cycle - Fix the bug and hit reload! • URL Routing • HTTP Parameter Binding • Share nothing system - no state in the serverSaturday, December 8, 12
  • 83. My top 10 features • Pure Java • Starts fast, runs fast • Exact errors (including • No compile, deploy, line numbers, even for groovy templates) restart cycle - Fix the bug and hit reload! • Extensible by modules • URL Routing • HTTP Parameter Binding • Share nothing system - no state in the serverSaturday, December 8, 12
  • 84. My top 10 features • Pure Java • Starts fast, runs fast • Exact errors (including • No compile, deploy, line numbers, even for groovy templates) restart cycle - Fix the bug and hit reload! • Extensible by modules • URL Routing • Super Testing support • HTTP Parameter Binding • Share nothing system - no state in the serverSaturday, December 8, 12
  • 85. My top 10 features • Pure Java • Starts fast, runs fast • Exact errors (including • No compile, deploy, line numbers, even for groovy templates) restart cycle - Fix the bug and hit reload! • Extensible by modules • URL Routing • Super Testing support • HTTP Parameter • Easy deployment on Binding Cloud • Share nothing system - no state in the serverSaturday, December 8, 12
  • 86. URL Routing & HTTP Parameter bindingSaturday, December 8, 12
  • 87. URL Routing & HTTP Parameter binding http://www.myapp.com/items/233Saturday, December 8, 12
  • 88. URL Routing & HTTP Parameter binding http://www.myapp.com/items/233 GET /items/{id} Application.showSaturday, December 8, 12
  • 89. URL Routing & HTTP Parameter binding http://www.myapp.com/items/233 GET /items/{id} Application.show public static show(Long id) { Item item = Item.findById(id); render(item); }Saturday, December 8, 12
  • 90. URL Routing & HTTP Parameter binding http://www.myapp.com/items/233 GET /items/{id} Application.show public static show(Long id) { Item item = Item.findById(id); render(item); } <div><b>Item : </b>${item.name}</div>Saturday, December 8, 12
  • 91. URL Routing & HTTP Parameter bindingSaturday, December 8, 12
  • 92. URL Routing & HTTP Parameter binding POST /items/save Application.saveSaturday, December 8, 12
  • 93. URL Routing & HTTP Parameter binding POST /items/save Application.save <form action="@{Application.save}" > <input type="hidden" name="item.id" value="${item.id}"> <input type="text" name="item.name" /> <input type="submit" value="Submit" /> </form>Saturday, December 8, 12
  • 94. URL Routing & HTTP Parameter binding POST /items/save Application.save <form action="@{Application.save}" > <input type="hidden" name="item.id" value="${item.id}"> <input type="text" name="item.name" /> <input type="submit" value="Submit" /> </form> public void save(Item item) { item.save(); show(item.id); }Saturday, December 8, 12
  • 95. Stateless Architecture • “Share Nothing” Philosophy - Nothing is shared between reach request • No Session - i.e. No “HTTPSession” Object • You cannot do : • session.setAttribute("user" , user);  • Use HttpSessionListener to count sessions • ServletFilter , Servlet-related securities • Instead Play uses (delegates to) memcached as a workaroundSaturday, December 8, 12
  • 96. Where is the Session? Web Browser Play! Framework Server Application State Play! Framework Server 2 DB Application Crypted signed cookieSaturday, December 8, 12
  • 97. Where is the Session? Web Browser Play! Framework Server Application State Play! Framework Server 2 DB Application Crypted signed cookieSaturday, December 8, 12
  • 98. Where is the Session? Web Browser Play! Framework Server Application State Play! Framework Server 2 DB Application Crypted signed cookieSaturday, December 8, 12
  • 99. Where is the Session? Web Browser Play! Framework Server Application State Play! Framework Server 2 DB Application Crypted signed cookieSaturday, December 8, 12
  • 100. Where is the Session? Web Browser Play! Framework Server Application State Play! Framework Server 2 DB Application Crypted signed cookieSaturday, December 8, 12
  • 101. Where is the Session? Web Browser Play! Framework Server Application State Play! Framework Server 2 DB Application Crypted signed cookieSaturday, December 8, 12
  • 102. Play URLs Are RESTFulSaturday, December 8, 12
  • 103. Play URLs Are RESTFul UGLYSaturday, December 8, 12
  • 104. Play URLs Are RESTFul UGLY • http://www.myapp.com/cont/servlet/buyService? sessionId=3gh3haaa2gg2&action=nextPage&idExpanse =false&flow=3C&event=s1e1&entityId=23bS&role=p& date=04%2F12%F2010&returnPage=homeS02&out=tr ueSaturday, December 8, 12
  • 105. Play URLs Are RESTFul UGLY • http://www.myapp.com/cont/servlet/buyService? sessionId=3gh3haaa2gg2&action=nextPage&idExpanse =false&flow=3C&event=s1e1&entityId=23bS&role=p& date=04%2F12%F2010&returnPage=homeS02&out=tr ue GRACEFULSaturday, December 8, 12
  • 106. Play URLs Are RESTFul UGLY • http://www.myapp.com/cont/servlet/buyService? sessionId=3gh3haaa2gg2&action=nextPage&idExpanse =false&flow=3C&event=s1e1&entityId=23bS&role=p& date=04%2F12%F2010&returnPage=homeS02&out=tr ue GRACEFUL • http://mysite.com/list/products/page/2Saturday, December 8, 12
  • 107. Play URLs Are RESTFul UGLY • http://www.myapp.com/cont/servlet/buyService? sessionId=3gh3haaa2gg2&action=nextPage&idExpanse =false&flow=3C&event=s1e1&entityId=23bS&role=p& date=04%2F12%F2010&returnPage=homeS02&out=tr ue GRACEFUL • http://mysite.com/list/products/page/2 • http://mysite.com/user/53Saturday, December 8, 12
  • 108. Play URLs Are RESTFul UGLY • http://www.myapp.com/cont/servlet/buyService? sessionId=3gh3haaa2gg2&action=nextPage&idExpanse =false&flow=3C&event=s1e1&entityId=23bS&role=p& date=04%2F12%F2010&returnPage=homeS02&out=tr ue GRACEFUL • http://mysite.com/list/products/page/2 • http://mysite.com/user/53 You can Read it, Bookmark it, Share it and more over SEO FriendlySaturday, December 8, 12
  • 109. Play Request LifeCycleSaturday, December 8, 12
  • 110. Play Request LifeCycleSaturday, December 8, 12
  • 111. Play HTTP Request PathSaturday, December 8, 12
  • 112. Play HTTP Request PathSaturday, December 8, 12
  • 113. Play ModulesSaturday, December 8, 12
  • 114. Play ModulesSaturday, December 8, 12
  • 115. Informative Error Page No Maven or Ant or Ivy build is requiredSaturday, December 8, 12
  • 116. Informative Error Page No Maven or Ant or Ivy build is requiredSaturday, December 8, 12
  • 117. Tests in the BrowserSaturday, December 8, 12
  • 118. Tests in the BrowserSaturday, December 8, 12
  • 119. Documentation & BooksSaturday, December 8, 12
  • 120. Saturday, December 8, 12
  • 121. Wait there is more...Saturday, December 8, 12
  • 122. Saturday, December 8, 12
  • 123. • Native Cloud deployment support on Playapps, Heroku, Google App Engine, CloudbeesSaturday, December 8, 12
  • 124. • Native Cloud deployment support on Playapps, Heroku, Google App Engine, Cloudbees • Modules for NoSQL, revert DB, Scaffold, Excel, Senia, MongoDB, Scalate, PDF, search, Excel export, etc.Saturday, December 8, 12
  • 125. • Native Cloud deployment support on Playapps, Heroku, Google App Engine, Cloudbees • Modules for NoSQL, revert DB, Scaffold, Excel, Senia, MongoDB, Scalate, PDF, search, Excel export, etc. • Easy to learnSaturday, December 8, 12
  • 126. • Native Cloud deployment support on Playapps, Heroku, Google App Engine, Cloudbees • Modules for NoSQL, revert DB, Scaffold, Excel, Senia, MongoDB, Scalate, PDF, search, Excel export, etc. • Easy to learn • .............................. and it’sSaturday, December 8, 12
  • 127. • Native Cloud deployment support on Playapps, Heroku, Google App Engine, Cloudbees • Modules for NoSQL, revert DB, Scaffold, Excel, Senia, MongoDB, Scalate, PDF, search, Excel export, etc. • Easy to learn • .............................. and it’s JavaSaturday, December 8, 12
  • 128. • Native Cloud deployment support on Playapps, Heroku, Google App Engine, Cloudbees • Modules for NoSQL, revert DB, Scaffold, Excel, Senia, MongoDB, Scalate, PDF, search, Excel export, etc. • Easy to learn • .............................. and it’s Java Give it a Try !Saturday, December 8, 12
  • 129. Quick DemoSaturday, December 8, 12
  • 130. Q &ASaturday, December 8, 12
  • 131. References • http://www.playframework.org/Saturday, December 8, 12
  • 132. Thank You ! for listeningSaturday, December 8, 12