Play Framework
-
Upload
mozgkarakaya -
Category
Software
-
view
144 -
download
1
description
Transcript of Play Framework
Play FrameworkMahmut Karakaya
Agenda - Theory
- What Play Solves- Architecture- Play History- Web Evolution
Agenda - Practice
- Simple MVC operations- NIO - Scala
Waiting...
Threads
Factory classes
Play is not based on Java EE
MVC
Play - full stack web framework for JVM - fun and high productive
- change code hit reload ( forget jRebel )- browser error reporting- easy cloud deployment (e.g. Heroku)
- stateless
Play 0.x - 05.2007
Play 1.0 - 05.2008
Play 1.2 - 04.2011
Play 2.0 - 03.2012
Notable websites using Play
The Web Evolved
- Static (just html) - Dynamic (get date from server on page :) ) * Structured (mvc, jsp, jsf ) - Realtime (ajax)
Realtime Web
- Polling (req - res) - Long polling (req - res when changed) - Server sent events (req - res -res -res) - Websocket (req - res - res - req -res whatever)
1 request = 1 thread
NIO 1 request != 1 thread
Demo
- Create new application- Download latest activator
https://www.playframework.com/downloadplay new demo
play ~run
http://localhost:9000
IDE supportplay eclipse
play idea
Application Layout
Controller public class HelloWorld extends Controller{
public static Result index(){
return ok("Hello World");
}
}
conf / routesGET /hello
controllers.HelloWorld.index()
Controller - add a parameterpublic static Result helloName(String name){
return ok("Hello World: "+ name);
}
conf / routes - add a parameterGET /helloName
controllers.HelloWorld.helloName(name)
http://localhost:9000/helloName?
name=TestUser
conf / routes - add a parameter to URL
GET /helloName/:name
controllers.HelloWorld.helloName(name)
http://localhost:9000/hello/TestUser
Controller - parameter type check public class HelloWorld extends Controller{
public static Result helloNameAge(String name, int
age){
return ok("Hello World "+name +” you are ”
+age);
}
}
conf / routes - parameter type checkGET /hello/:name/:age
controllers.HelloWorld.helloNameAge(name:String,age:Int)
http://localhost:9000/hello/TestUser/10
Add a view@(name: String, age:Int)
@main("Welcome to Play") {
<html>
<head></head>
<body>
<p>
Hello <b> @name</b>, you are <b>@age</b> years old
</p>
</body>
</html>
}
Controller - call view public class HelloWorld extends Controller{
public static Result index(String name, int age){
return ok(views.html.helloWorld.render(name,age));
}
}
Error handling
WS lib for non-blocking http callpublic static Result callGoogle() {
play.libs.F.Promise<play.libs.WS.Response> response=WS.url("http://google.com" ).get();
Promise<Result> result= response.map(toResult);
return async(result);
}
NIO parallel call example - non blocking call public static Promise<Timing> timedRequest(final String url){
final long start = System.currentTimeMillis();
Promise<Response> res= WS.url(url).get();
return res.map(new Function<Response,Timing> (){
public Timing apply (Response response){
long latency=System.currentTimeMillis() -start;
return new Timing(url,latency,start);
}
});
}
NIO parallel call example - non blocking call public static Result index(){
Promise<List<Timing>> all= Promise.waitAll(
Timing.timedRequest("http://www.yahoo.com"),
Timing.timedRequest("http://www.google.com"),
Timing.timedRequest("http://www.bing.com")
);
return async(all.map(new play.libs.F.Function<List<Timing>,Result>(){
public Result apply(List<Timing> timings){
return ok (play.libs.Json.toJson(timings));
}
}));}
NIO parallel call example - result [{"url":"http://www.yahoo.com" ,"latency":1542,"start":1408296474891},
{"url":"http://www.google.com" ,"latency":366,"start":1408296474912},
{"url":"http://www.bing.com" ,"latency":437,"start":1408296474913}]
Scalaobject HelloWorldScala extends Controller {
def index = Action {
Ok("Hello World Scala")
}
}
Scala Consoleplay console
import controllers.HelloWorld
HelloWorld.hello
Heroku supports Playheroku create
heroku git:remote -a playAppForHeroku
git push heroku master
Reference
- https://www.playframework.com/ - Play For Scala (Manning) - Learning Play! Framework 2 (Andy Petrella) - Play For Java (Manning) - People like Sadek Drobi, Yevgeniy Brikman, James Ward :)
Thank youCodes are available at;
https://github.com/mkarakaya/playDemo.git