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
Top Related