Intro to Play Framework & Modern Java Web App Development

redlemonbalmMobile - Wireless

Dec 10, 2013 (3 years and 11 months ago)

409 views

Intro to Play Framework &

Modern Java Web App Development
Josh Padnick

Desert Code Camp 2013.2

November 9, 2013
Today’s 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
J
osh 
  
P
adnick
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/


!


M
V
C

A
c
ti
o
n
A
O
P

T
X

P
r
o
x
y
B
u
s
i
n
e
ss

L
o
g
i
c
D
A
O
Sp
r
i
n
g
-
H
i
b
er
n
a
te
H
i
b
e
r
n
a
te
J
D
B
C
S
p
r
i
n
g

W
e
b
F
l
o
w
A
c
e
g
i
S
p
r
i
n
g

M
V
C
T
o
m
c
a
t

/

J
B
o
s
s
<?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-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- we'll use AnnotationConfigWebApplicationContext instead of the default XmlWebApplicationContext... -->
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
!
<!-- ... and tell it which class contains the configuration -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.zt.helloWeb.init.WebappConfig</param-value>
</init-param>
!
<load-on-startup>1</load-on-startup>
!
</servlet>
!
<servlet-mapping>
<servlet-name>mvc</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 by Yevjeniy Brikman

http://www.youtube.com/watch?v8z3h4Uv9YbE
Bean Failures
org.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
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
!
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 Spec
Impedance 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 Software
http://www.ReactiveM
anifesto.org/
The Reactive Manifesto
“Up 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 Bonér
Reactive Software
SOURCE:
http://www.ReactiveManifesto.org/
Meet Play Framework
Goal: Performance  Productivity
Performance
Productivity
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, 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
Let’s around!
Intro Stuff
1.
Download and install

2.
Play Console

3.
Controllers

4.
URL Routing

5.
Templates
Intro Stuff
1.
Download and install
2.
Play Console

3.
Controllers

4.
URL Routing

5.
Templates
Intro Stuff
1.
Download and install

2.
Play Console
3.
Controllers

4.
URL Routing

5.
Templates
Intro Stuff
1.
Download and install

2.
Play Console

3.
Controllers
4.
URL Routing

5.
Templates
Intro Stuff
1.
Download and install

2.
Play Console

3.
Controllers

4.
URL Routing
5.
Templates
Intro Stuff
1.
Download and install

2.
Play Console

3.
Controllers

4.
URL Routing

5.
Templates
Let’s Build Something

in the Time Remaining
So what did you like best today?

We’ll 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