MVC 1.0JavaLand March 2015
David Delabassee @delabassee Oracle
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.
1
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
The following is intended to outline our g eneral product direction. It is intended for i nformation purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
Safe Harbor Statement
2
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Lorem ipsum dolor sit amet, MVC, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua, Action-‐Based MVC. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. JSR 371 duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Ozark excepteur sint occaecat cupidatat non proident.
My Own Statement
3
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
Context
MVC 1.0 JSR
Conclusion
1
2
3
4
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
Context
MVC 1.0 JSR
Conclusion
1
2
3
5
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Java EE 7
ENTERPRISE EDITION
• Batch • Concurrency • Simplified JMS
• More annotated POJOs • Less boilerplate code • Cohesive integrated platform
DEVELOPER PRODUCTIVITY
• WebSockets • JSON • Servlet 3.1 NIO • REST
MEETING ENTERPRISE
DEMANDS
Java EE 7
6
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Java EE 8
Clou
d
Mobile
HTTP/2
SECURITYReactive Programming
User Experience
7
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Java EE 8 Community Survey
Should Java EE provide support for MVC alongside JSF?
Is there any one de-‐facto standard technology in this space to which we should look for inspiration?
8
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 9
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Community-‐Prioritized Features
10
http://glassfish.org/survey
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
What is MVC?• Pattern used to implement a User Interface • Consists of 3 major components
–Model – View – Controller
• Each of the components has a distinct responsibility
11
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
The M(odel)• Interim state you want to keep when you are building an UI • Examples
–Who is logged in –What are they trying to buy –What page are they on in a multi page flow
12
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
The V(iew)• What your user interacts with
– In a web application that would be the web page or web pages • your JSP page • your CSS styles • your JavaScript
– In a thick client scenario it would be the entire UI – In an embedded scenario it could be the touch screen, hardware buttons etc.
13
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
The C(ontroller)• Work horse of the pattern:
– Executes the business logic • Run a credit card transaction
– Updates the model • Mark the transaction as successful in the model object
– Ask the view to render itself • Shows the transaction was successful
14
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Different styles of MVC• Component-‐based MVC • Action-‐based MVC • Others
15
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Component-‐based MVC• A specific style of MVC made popular by component frameworks • Controller provided by the framework • Examples
– JavaServer Faces –Wicket – Tapestry – Seam (discontinued) – Apache Click (retired)
16
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Action-‐based MVC• Controller(s) defined by the application • Examples
– Struts 1 (end of life), Struts 2 – Spring MVC
• No standard Java EE implementation – Good news we are creating one! – Targeted for inclusion in Java EE 8
17
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Action-‐based MVC
–Manual request parameter processing – No view kept around – Request centric – Developer responsible for all HTML / JS – Limited support for re-‐usable behavior – No automatic input conversion – No automatic input validation
Component-‐based MVC
– Automatic request parameter processing – View kept around – Page centric – Components handle HTML / JS – Component implement re-‐usable behavior – Automatic input conversion – Automatic input validation
Compare and contrast
18
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
Context
MVC 1.0 JSR
Conclusion
1
2
3
19
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Model-‐View-‐Controller (MVC 1.0) Specification
• “Action-‐based” MVC 1.0 JSR • Why?
– UI landscape is not one size fits all – Java EE 8 Community Survey – Talking to our customers, etc.
• EG formed –Oracle, RedHat, innoQ, IBM, Caelum, LifeRay, and 6 individuals members
• You can contribute too!
JSR 371
20
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Model-‐View-‐Controller (MVC 1.0) Specification
• Ozark – https://ozark.java.net
• Open Source – git://java.net/ozark~sources – https://github.com/spericas/ozark
Reference Implementation
21
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
MVC 1.0
• Action-‐based MVC • Glues together key Java EE technologies
–Model : CDI, Bean Validation, JPA – View : Facelets, JSP, more? – Controller : Invent new technology Vs. Leverage existing technologies
22
Principles
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Controller• Combine data models and views to produce web application pages
@Path("hello") public class HelloController {
@GET@Controllerpublic String hello() {
return "hello.jsp";}
}
23
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Controller• Class/method decorated with @Controller
@Path(“hello") @Controller public class HelloController {
@GET@View(“hello.jsp")public void hello() { }
}
24
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Controller
@Path(“hello") @Controller public class HelloController {
@GETpublic Viewable hello() {
return new Viewable("hello.jsp"); } }
25
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Controller
… @GET @Controller public Response getById(@PathParam("id") String id) { if (id.length() == 0) { return Response.status(Response.Status.BAD_REQUEST) .entity(“error.jsp") .build(); } }
26
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Model• “Refers to the data” • 2 types
– javax.mvc.Models interface – CDI @Named bean (recommended)
27
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Model @Named(“greeting”) @RequestScoped public class Greeting {
private String message;
public String getMessage() { return message;
} public void setMessage(String message) { this.message = message; }}
28
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Model
@Path(“hello”) public class HelloController {
@Inject private Models models;
@GET @Controller public String hello() { models.set(“greeting”, new Greeting(“Hi JavaLand”)); return “hello.jsp”; } }
29
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
View• Define the structure of the output • Can refer to model(s) • Rendered by a View Engine
– JSP – Facelets
• Not accessible as static resources – /WEB-‐INF/views/
30
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
View
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %> <html> <head> <title>Hello</title> </head> <body> <p>Hello ${user.name}</p> </body> </html>
31
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
View Engine• CDI based extension mechanism • javax.mvc.engine.ViewEngine interface
boolean supports(String view);
void processView(ViewEngineContext context)
throws ViewEngineException;
• Ozark – JSP & Facelets – FreeMarker, Velocity, Thymeleaf, Mustache & Handlebars
32
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Miscellaneous• Bootstrap
– javax.ws.rs.core.Application
• Validation • Exception Mapping Providers • @Produces • CDI Events • Tooling
33
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Demos?
34
Lorem ipsum dolor sit amet, Intial consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua, Ozark Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Velit duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. milestone build excepteur sint occaecat cupidatat non proident.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Agenda
Context
MVC 1.0 JSR
Conclusion
1
2
3
35
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Conclusion• Doing MVC now is not a bad idea, because we are:
– Leveraging CDI, JAX-‐RS, Facelets, BV –More? Servlet 4.0’s ServerPush – Delivering an easy migration path if you are using JSPs
• Offers more choices • New annotations
–@Controller –@View
36
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Java EE 8
• Java EE 8 Platform (JSR 366) • CDI 2.0 (JSR 365) • JSON Binding 1.0 (JSR 367) • JMS 2.1 (JSR 368) • Java Servlet 4.0 (JSR 369) • JAX-‐RS 2.1 (JSR 370)
• MVC 1.0 (JSR 371) • JSF 2.3 (JSR 372) • Java EE Management 2.0 (JSR 373) • JSON-‐P 1.1 (JSR 374) • Java EE Security 1.0 (JSR 375)
So far…..
37
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Roadmap• Q3 2014 Expert Group formed • Q1 2015 Early Draft • Q3 2015 Public Review • Q1 2016 Proposed Final Draft • Q3 2016 Final Release
38
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Contribute!• Join the JCP • “Adopt-‐A-‐JSR”
– http://glassfish.java.net/adoptajsr
• Get involved – Join MVC users mailing list – Tweet, blog, socialize to raise awareness about MVC 1.0 – Test MVC SNAPSHOT and milestone builds (https://ozark.java.net) – Fill issues!
39
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Links• MVC specification
– http://mvc-‐spec.java.net, users@mvc-‐spec.java.net
• MVC implementation – http://ozark.java.net, [email protected]
• Spec leads – Santiago (@spericas) –Manfred (@mnriem, http://mvc.zeef.com/manfred.riem )
• The Aquarium Blog – https://blogs.oracle.com/theaquarium/
40
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Danke!
41
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 42