1. Intro to Play Framework &
Modern Java Web App Development
Josh Padnick
Desert Code Camp 2013.2
November 9, 2013
2. Today’sTalk
• Java Web App DevelopmentToday
• Modern Web App Development
• Meet Play Framework
• Build Stuff!
3. • 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
7. Lots ofTime Waiting for Server Redeploys…
SOURCE FOR INSIGHT:The Play Framework at LinkedIn: Productivity and Performance at Scale byYevjeniy Brikman
http://www.youtube.com/watch?v=8z3h4Uv9YbE
!
SOURCE FOR GRAPHIC: http://zeroturnaround.com/rebellabs/java-ee-productivity-report-2011/#redeploy_times
8. Long, Ugly Error Messages
SOURCE: FOR INSIGHT:The Play Framework at LinkedIn: Productivity and Performance at Scale byYevjeniy 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
Spring MVC
9. ?xml version=1.0 encoding=UTF-8?
web-app version=2.5 xmlns=http://java.sun.com/xml/ns/javaee xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
!
servlet
servlet-namemvc/servlet-name
servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class
!-- we'll use AnnotationConfigWebApplicationContext instead of the default XmlWebApplicationContext... --
init-param
param-namecontextClass/param-name
param-valueorg.springframework.web.context.support.AnnotationConfigWebApplicationContext/param-value
/init-param
!
!-- ... and tell it which class contains the configuration --
init-param
param-namecontextConfigLocation/param-name
param-valuecom.zt.helloWeb.init.WebappConfig/param-value
/init-param
!
load-on-startup1/load-on-startup
!
/servlet
!
servlet-mapping
servlet-namemvc/servlet-name
url-pattern//url-pattern
/servlet-mapping
!
welcome-file-list
welcome-file//welcome-file
/welcome-file-list
!
/web-app
DefaultServletHandler
Crazy XML Configuration
SOURCE FOR INSIGHT:The Play Framework at LinkedIn: Productivity and Performance at Scale byYevjeniy Brikman
http://www.youtube.com/watch?v=8z3h4Uv9YbE
17. 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
22. The Reactive Manifesto
“Application requirements have changed dramatically in recent years. Both
from a runtime environment perspective, with multicore and cloud computing
architectures nowadays being the norm, as well as from a user requirements
perspective, with tighter SLAs in terms of lower latency, higher throughput,
availability and close to linear scalability.This all demands writing applications in
a fundamentally different way than what most programmers are used to.”
SOURCE: http://typesafe.com/blog/why_do_we_need_a_reactive_manifesto
Jonas Bonér
26. No More JEE Container
SOURCE: Play for Java by Nicolas Leroux and Sietse de Kaper
27. 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
28. 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
29. Stateless and Built for Scale
• Forces every aspect of your app to be stateless
• Non-Blocking I/O
• Well-suited for real-time
30. What exactly is it, though?
SOURCE: Play for Java by Nicolas Leroux and Sietse de Kaper
31. What exactly is it, though?
Integrated HTTP Server
JBoss Netty (Non-Blocking IO)
Concurrent, Distributed, Fault-Tolerant
Background Processing
Akka
Build System
Console
SBT
JavaVirtual Machine
Template Engine, HTTP Request/Response Processing, Integrated
Cache, RESTful Routing Engine,Asset Compilation,
Internationalization,TestingTools
Play Framework
eBean / Anorm
BoneCP
H2 Database
Lots of libraries…
32. Of course, nothing’s perfect
1. 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
41. So what did you like best today?
• We’ll take some votes and show the results real-time
42. 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