Play Framework
-
Upload
nas-tra -
Category
Technology
-
view
131 -
download
1
description
Transcript of Play Framework
![Page 1: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/1.jpg)
Play! FrameworkEduard Tudenhöfner
![Page 2: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/2.jpg)
Outline
● Getting Started● Error Handling● Threaded vs Evented● Async Features● Demo● Summary
![Page 3: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/3.jpg)
Outline
● Getting Started● Error Handling● Threaded vs Evented● Async Features● Demo● Summary
![Page 4: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/4.jpg)
Overview
● MVC Pattern● Java & Scala API● Stateless● Built on Akka
![Page 5: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/5.jpg)
Play Console
● play new my-app
● play compile | run | test | debug
● play clean-all
● play eclipse | idea
![Page 6: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/6.jpg)
Application Layout
![Page 7: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/7.jpg)
HTTP Routing
● URI to Controller mapping
GET /projects/:projectId/tasks controllers.Tasks.index(projectId: Long)
POST /projects/:projectId/tasks controllers.Tasks.add(projectId: Long, folder: String)
PUT /tasks/:task controllers.Tasks.update(task: Long)
DELETE /tasks/:task controllers.Tasks.delete(task: Long)
● pattern: <HTTP Method> <URI> <Controller>
![Page 8: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/8.jpg)
State in Play!
● server is stateless● state is stored on client● session and flash scopes
○ for data that is required between subsequent HTTP requests
○ cookie (max 4KB per User / only string values)
Important: The flash scope should only be used to transport success/error messages on simple non-Ajax applications. As the data are just kept for the next request and because there are no guarantees to ensure the request order in a complex Web application, the Flash scope is subject to race conditions.
![Page 9: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/9.jpg)
Model
● POJOs with generated getters/setters● Play uses Active Record pattern● EBean -> default ORM (JPA without
container)
![Page 10: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/10.jpg)
Testing Support
● play test● Helper classes to mock and fake almost
everything● provides support for Selenium &
FluentLenium
![Page 11: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/11.jpg)
Testing Support
![Page 12: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/12.jpg)
Testing Support
![Page 13: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/13.jpg)
Outline
● Getting Started● Error Handling● Threaded vs Evented● Async Features● Demo● Summary
![Page 14: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/14.jpg)
Error Handling
![Page 15: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/15.jpg)
Error Handling
● Big Plus: detailed error messages shown in browser -> no need to search log files
● errors can be in ○ Java/Scala class○ Routes config○ template code○ ….
![Page 16: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/16.jpg)
Error Handling
![Page 17: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/17.jpg)
Error Handling
![Page 18: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/18.jpg)
Outline
● Getting Started● Error Handling● Threaded vs Evented● Async Features● Demo● Summary
![Page 19: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/19.jpg)
Threaded
![Page 20: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/20.jpg)
Threaded
● one thread assigned to each request● any I/O is typically synchronous● problems that might arise?
○ thread pool sizing -> too many/too few?!○ Thread stack size with 64 Bit JVMs -> 1MB○ thread might get blocked, waiting for another
service to complete
![Page 21: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/21.jpg)
Evented
![Page 22: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/22.jpg)
Evented
● one thread per CPU core● basic idea: ensure that these scarce
resources are never blocked● I/O is asynchronous● blocking I/O mostly when talking to DBs
![Page 23: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/23.jpg)
Outline
● Getting Started● Error Handling● Threaded vs Evented● Async Features● Demo● Summary
![Page 24: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/24.jpg)
Async Features
● idea: never block● Play actions are async by default!● Controllers return Result objects● when async, return Promise<Result>
○ client is blocked - server is not blocked and serves result when it’s computed
Note: Whether the action code returns a Result or a Promise<Result>, both kinds of returned object are handled internally in the same way. There is a single kind of Action, which is asynchronous, and not two kinds (a synchronous one and an asynchronous one). Returning a Promise is a technique for writing non-blocking code.
![Page 25: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/25.jpg)
Async Features
![Page 26: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/26.jpg)
Outline
● Getting Started● Error Handling● Threaded vs Evented● Async Features● Demo● Summary
![Page 27: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/27.jpg)
Outline
● Getting Started● Error Handling● Threaded vs Evented● Async Features● Demo● Summary
![Page 28: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/28.jpg)
Summary
● High Developer Productivity○ make a change -> refresh -> see the change○ hot reload for all resources
● Built-in testing support
● Predictable Scalability○ adheres to HTTP principles○ non-blocking I/O support
● Commercial Support available through Typesafe & Zenexity
● Typesafe○ makes it easier for large code bases
![Page 29: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/29.jpg)
Summary
● Immature○ Best Practices aren’t well defined○ API is changing○ Play 2 was entirely rewritten
● Not a Servlet○ breaks away from the Servlet spec
● Build System (SBT)○ hard to understand (even for Scala experts)○ very powerful & flexible, but very steep learning curve
![Page 30: Play Framework](https://reader033.fdocuments.us/reader033/viewer/2022042700/559bdde41a28ab53568b4622/html5/thumbnails/30.jpg)
Thank you! - Questions?