play framework: intro & high-level overview

Post on 07-May-2015

1.956 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

My presentation on Play Framework from Desert Code CAmp 2013

TRANSCRIPT

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

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

<?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 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 <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 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 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

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, nothing’s 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

Let’s 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

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

top related