Вы находитесь на странице: 1из 42

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!
P ni ck
Jos h
   ad

• Founder & Chief Innovation Officer at Omedix


• 10+ years of web app development


• Special interest in scalable, enterprise, web-based


applications using Java & open source
^nges
  of
Cha lle
Java Web App

Development Today
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

Spring MVC
Long, Ugly Error Messages
Spring WebFlow

MVC Action

AOP TX Proxy

Business Logic

DAO

Spring-Hibernate

Hibernate

JDBC

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/

Crazy XML Configuration
<?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

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.
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().getP
}
!
@RequestMapping(value="{id}", method=RequestMethod.GET)
public @ResponseBody String getPerson(@PathVariable String id) {
return GsonFactory.getInstance().toJson(LookupDao.getInstance().getP
}
}
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!
Impedance Mismatch

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

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.ReactiveManifesto.org/
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.”

Jonas Bonér

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

SOURCE: http://www.ReactiveManifesto.org/
Meet Play Framework
Goal: Performance + Productivity
Productivity

Performance

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)

Template Engine, HTTP Request/Response Processing, Integrated


Cache, RESTful Routing Engine, Asset Compilation,
Internationalization, Testing Tools

Play Framework Build System &

Console

SBT
eBean / Anorm Concurrent, Distributed, Fault-Tolerant

BoneCP Background Processing

H2 Database
Lots of libraries…
Akka

Java Virtual Machine


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

Вам также может понравиться