Play Framework

download Play Framework

of 42

Transcript of Play Framework

  • Intro to Play Framework &

    Modern Java Web App Development

    Josh Padnick

    Desert Code Camp 2013.2

    November 9, 2013

  • Todays Talk

    Java Web App Development Today

    Modern Web App Development

    Meet Play Framework

    Build Stuff!

  • Founder & Chief Innovation Officer at Omedix

    10+ years of web app development

    Special interest in scalable, enterprise, web-based applications using Java & open source

    Josh Padnick

  • Java Web App

    Development Today

    Challenges of^

  • Lots of Time Waiting for Server Redeploys

    SOURCE FOR INSIGHT: The Play Framework at LinkedIn: Productivity and Performance at Scale by Yevjeniy Brikman http://www.youtube.com/watch?v=8z3h4Uv9YbE

    !SOURCE FOR GRAPHIC: http://zeroturnaround.com/rebellabs/java-ee-productivity-report-2011/#redeploy_times

  • Long, Ugly Error Messages

    SOURCE: FOR INSIGHT: The Play Framework at LinkedIn: Productivity and Performance at Scale by Yevjeniy Brikman http://www.youtube.com/watch?v=8z3h4Uv9YbE

    !SOURCE FOR GRAPHIC: http://ptrthomas.wordpress.com/2006/06/06/java-call-stack-from-http-upto-jdbc-as-a-picture/

    !

    MVC Action

    AOP TX Proxy

    Business Logic

    DAO

    Spring-Hibernate

    Hibernate

    JDBC

    Spring WebFlow

    Acegi

    Spring MVC

    Tomcat / JBoss

  • ! mvc org.springframework.web.servlet.DispatcherServlet contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext ! contextConfigLocation com.zt.helloWeb.init.WebappConfig ! 1 ! ! mvc / ! / ! DefaultServletHandler

    Crazy XML Configuration

    SOURCE FOR INSIGHT: The Play Framework at LinkedIn: Productivity and Performance at Scale by Yevjeniy Brikman http://www.youtube.com/watch?v=8z3h4Uv9YbE

  • Bean Failuresorg.omg.CORBA.OBJECT_NOT_EXIST

    SOURCE FOR GRAPHIC: Beginning Java EE 6 Platform with Glassfish 3 by Antonio Goncalves, Page 5.

    X

  • Clunky Road to

    RESTful URLs

    WEB.XML springmvc /rest/* !CONTROLLER.JAVA @Controller @RequestMapping("/people") public class PeopleController { ! @RequestMapping(entrypoint/{collectionName}, method=RequestMethod.GET) public @ResponseBody String getPeople() { return GsonFactory.getInstance().toJson(LookupDao.getInstance().getPeople()); } ! @RequestMapping(value="{id}", method=RequestMethod.GET) public @ResponseBody String getPerson(@PathVariable String id) { return GsonFactory.getInstance().toJson(LookupDao.getInstance().getPerson(id)); } }

  • A Lot of Complexity!

  • I just want to write working software!

  • Is this the architecture we would create today?

  • The root of the problem

    Impedance Mismatch between

    HTTP and Java EE!

  • RESTful URLs vs. Java Servlets SpecImpedance Mismatch

  • Stateless HTTP vs. Stateful EJBs

    SOURCE: http://cscie12.dce.harvard.edu/lecture_notes/2011/20110504/handout.html

    SOURCE: Beginning Java EE 6 Platform with Glassfish 3 by Antonio Goncalves, Page 206.

    Impedance Mismatch

  • Impedance Mismatch

    Code & Refresh vs. WAR Deployment

  • Modern Web App Development

  • Buzzwords! HTML5 & Javascript

    MVVM Frameworks

    Mobile

    NoSQL

    Real-Time

    Big Data

    Asynchronous

    Immutability

    Connected Devices

  • Reactive Softwarehttp://www.ReactiveManifesto.org/

  • The Reactive ManifestoUp to now the usual way to describe this type of application has been to use a mix of technical and business buzzwords; asynchronous, non-blocking, real-time, highly-available, loosely coupled, scalable, fault-tolerant, concurrent, reactive, event-driven, push instead of pull, distributed, low latency, high throughput, etc. This does not help communication, quite the contrary, it greatly hinders it.

    SOURCE: http://typesafe.com/blog/why_do_we_need_a_reactive_manifesto

    Jonas Bonr

  • Reactive Software

    SOURCE: http://www.ReactiveManifesto.org/

  • Meet Play Framework

  • Goal: Performance + Productivity

    Performance

    Prod

    ucti

    vity

    SOURCE: http://typesafe.com/blog/webinar-a-java-developers-primer-to-the-typesafe-platform

  • No More JEE Container

    SOURCE: Play for Java by Nicolas Leroux and Sietse de Kaper

  • Focused on Developer Productivity Live code changes when you refresh the browser

    More friendly error messages directly in browser

    Type safety in the templates

    Cool console & build tools

  • Designed for the Modern Web RESTful by default

    Auto-compile LESS and CoffeeScript files

    JSON is a first-class citizen

    Websockets, other HTTP Streaming Support

  • Stateless and Built for Scale Forces every aspect of your app to be stateless

    Non-Blocking I/O

    Well-suited for real-time

  • What exactly is it, though?

    SOURCE: Play for Java by Nicolas Leroux and Sietse de Kaper

  • What exactly is it, though?Integrated HTTP Server

    JBoss Netty (Non-Blocking IO)

    Concurrent, Distributed, Fault-Tolerant

    Background Processing

    Akka

    Build System &

    Console

    SBT

    Java Virtual Machine

    Template Engine, HTTP Request/Response Processing, Integrated Cache, RESTful Routing Engine, Asset Compilation,

    Internationalization, Testing Tools

    Play Framework

    eBean / Anorm BoneCP

    H2 Database Lots of libraries

  • Of course, nothings perfect1. You can mostly avoid Scala, but not completely

    (of course, Scala itself is pretty cool)

    2. For advanced build logic, SBT has a steep learning curve

    3. Template system works well, but sometimes the functional paradigm can feel awkward

  • Lets around!

  • Intro Stuff1. Download and install

    2. Play Console

    3. Controllers

    4. URL Routing

    5. Templates

  • Intro Stuff1. Download and install

    2. Play Console

    3. Controllers

    4. URL Routing

    5. Templates

  • Intro Stuff1. Download and install

    2. Play Console

    3. Controllers

    4. URL Routing

    5. Templates

  • Intro Stuff1. Download and install

    2. Play Console

    3. Controllers

    4. URL Routing

    5. Templates

  • Intro Stuff1. Download and install

    2. Play Console

    3. Controllers

    4. URL Routing

    5. Templates

  • Intro Stuff1. Download and install

    2. Play Console

    3. Controllers

    4. URL Routing

    5. Templates

  • Lets Build Something

    in the Time Remaining

  • So what did you like best today? Well take some votes and show the results real-time

  • Learning Play Framework I preferred the books to the documentation

    For official documentation, best formatting is on playframework.com. Latest content is on github(https://github.com/playframework/playframework/tree/master/documentation/manual)

    Community itself is pretty great

    Google Group is great

    Lots of questions on Stack Overflow

  • Check Out TypeSafe Activator

  • Q&A