<Insert Picture Here>Understanding the Nuts & Bolts of Java EE 6Arun Gupta, Java EE & GlassFish Guyblogs.sun.com/arungupta...
The following/preceding is intended to outline ourgeneral product direction. It is intended forinformation purposes only, ...
Are you tweeting ? #glassfish  #jfokus                     3
Java EE: Past & Present                                                   Flexible                                        ...
Compatible Java EE 5 Implhttp://java.sun.com/javaee/overview/compatibility-javaee5.jsp                                    ...
Compatible Java EE 6 ImplsToday:                       Web Profile OnlyAnnounced:                                         ...
Light-weight• Java EE 6 Web Profile• Pruning   • Pruned today, means    • Optional in the next release    • Deleted in the...
• EJB-in-WAR• No-interface EJB• Optional  “web.xml”/”faces-  config.xml”• Annotation-driven  •   @Schedule  •   @Path  •  ...
<web-fragment>    <filter>          <filter-name>wicket.helloworld</filter-name>          <filter-class>org.apache.wicket....
Java EE 6 - Done                  09• Specifications approved by the JCP• Reference Implementation is GlassFish           ...
Java EE 6 Specifications• The Platform• Java EE 6 Web Profile 1.0• Managed Beans 1.0                              11
Java EE 6 Specifications  New• Contexts and Dependency Injection for  Java EE (JSR 299)• Bean Validation 1.0 (JSR 303)• Ja...
Java EE 6 Specifications  Extreme Makeover• Java Server Faces 2.0 (JSR 314)• Java Servlets 3.0 (JSR 315)• Java Persistence...
Java EE 6 Specifications   Updates• Java API for XML-based Web Services 2.2 (JSR 224)• Java API for XML Binding 2.2 (JSR 2...
Java EE 6 Specifications       As is•   JDBC 4.0 API•   Java Naming and Directory Interface 1.2•   Java Message Service 1....
Java EE 6 Web Profile 1.0  Servlets 3.0     JPA 2.0          EJB 3.1     JDBC      StAX                 Interceptors    JS...
http://blog.eisele.net/2010/12/who-is-afraid-of-java-ee-6-get-rid-of.html                                                 ...
18
Managed Beans 1.0  EJB         CDI      JSF       JAX-WS JAX-RS      JPA       ...@Stateful                      @Managed ...
Managed Beans 1.0• POJO as managed component for the Java EE container • JavaBeans component model for Java EE • Simple an...
Demo #1Managed Beans                21
Managed Beans 1.0 - Sample@javax.annotation.ManagedBean                              @Resourcepublic class MyManagedBean {...
Interceptors 1.1• Interpose on invocations and lifecycle events  on a target class• Defined  • Using annotations or DD  • ...
Demo #2Interceptors               24
Interceptors – Business Method  (Logging)@InterceptorBinding                    @LoggingInterceptorBinding@Retention(RUNTI...
Why Interceptor Bindings ?• Remove dependency from the interceptor  implementation class• Can vary depending upon deployme...
Interceptors – Business Method    (Transaction)@InterceptorBinding               @Transactional@Retention(RUNTIME)        ...
Servlets in Java EE 5   At least 2 files<!--Deployment descriptor      /* Code in Java Class */  web.xml --><web-app>     ...
Servlets 3.0 (JSR 315)   Annotations-based @WebServletpackage com.sun;@WebServlet(name=”MyServlet”, urlPatterns={”/myApp/*...
Demo #3Servlets           30
Servlets 3.0 Annotations-based @WebServlet@WebServlet(name="mytest",     urlPatterns={"/myurl"},     initParams={       @I...
Servlets 3.0Annotations-based @WebListeners<listener>   <listener-class>      server.LoginServletListener   </listener-cla...
Servlets 3.0  Asynchronous Servlets• Useful for Comet, long waits• Must declare @WebServlet(asyncSupported=true)AsyncConte...
Servlets 3.0 Extensibility• Plugin libraries using web fragments • Modular web.xml• Bundled in framework JAR file in META-...
Servlets 3.0      Extensibility<web-fragment>    <filter>           <filter-name>wicket.helloworld</filter-name>          ...
Servlets 3.0 Extensibility - ServletContainerInitializer• Provided by the apps or container• Discovered using the service ...
Servlets 3.0Dynamic Registration – Java Server Faces   @SuppressWarnings({"UnusedDeclaration"})   @HandlesTypes({         ...
Servlets 3.0Dynamic Registration – Java Server Faces    public void onStartup(Set<Class<?>> classes, ServletContext servle...
Servlets 3.0Dynamic Registration – Create, Register, LookupServletRegistration.Dynamic dynamic =          servletContext.a...
Servlets 3.0  Resource Sharing• Static and JSP no longer confined to  document root of the web application• May be placed ...
Servlets 3.0  Much more ...• Programmatic authentication, login, logout   > HttpServletRequest.authenticate   > HttpServle...
Java Persistence API 2 (JSR 317) Sophisticated mapping/modeling options• Collection of basic types@Entitypublic class Pers...
Java Persistence API 2 Sophisticated mapping/modeling options• Collection of embeddables@Embeddable public class Address {...
Java Persistence API 2 Sophisticated mapping/modeling options• Multiple levels of embedding@Embeddable public class Contac...
Java Persistence API 2 Sophisticated mapping/modeling options• Improved Map support@Entity public class VideoStore {    @I...
Java Persistence API 2  Expanded JPQL• Support for all new modeling/mapping  features• Operators and functions in select l...
Java Persistence API 2Expaded JPQL – CASE ExpressionUPDATE Employee eSET e.salary =    CASE e.rating        WHEN 1 THEN e....
Java Persistence API 2 Metamodel• Abstract “schema-level” model over managed classes of a Persistence Context • Entities, ...
Demo #4Java Persistence API                       49
Java Persistence API 2   Metamodel Example@Entitypublic class Customer {  @Id Integer custId;  String name;  ...  Address ...
Canonical Metamodel using NetBeans  http://blogs.sun.com/arungupta/entry/totd_148_jpa2_metamodel_classes                  ...
Java Persistence API 2Type-safe Criteria APIEntityManager em = …;CriteriaBuilder cb = em.getCriteriaBuilder();CriteriaQuer...
Java Persistence API 2 Caching• 1st-level Cache by PersistenceContext  • Only one object instance for any database row• 2n...
Java Persistence API 2 Much more ...• New locking modes • PESSIMISTIC_READ – grab shared lock • PESSIMISTIC_WRITE – grab e...
JPA 2.1 Candidate Features              Subject    http://jcp.org/en/jsr/detail?id=338       To                           ...
Subject    JPA 2.1 Candidate Features                To                                            Change●    Support for ...
EJB 3.1 (JSR 318)Package & Deploy in a WAR    Java EE 5                                     Java EE 6                     ...
Demo #5EJB 3.1          58
EJB 3.1• No interface view – one source file per bean • Only for Local and within WAR • Required for Remote • No location ...
EJB 3.1  Portable Global JNDI Name Syntax• Portable• Global• Application/Module-scoped• Derived from metadata such as name...
EJB 3.1   Portable Global JNDI Name Syntax                                                  Base name of ejb-jar/WAR  Only...
EJB 3.1Embeddable API – Deploy the Beanpublic void testEJB() throws NamingException {        EJBContainer ejbC =          ...
EJB 3.1  Singleton Beans• One instance per app/VM, not pooled  • Useful for caching state  • CMT/BMT  • Access to containe...
EJB 3.1  Asynchronous Session Beans• Light-weight JMS• Control returns to the client before the   container dispatches the...
EJB 3.1Asynchronous Session Beans – Code Sample@Stateless@Asynchronouspublic class SimpleAsyncEJB {    public Future<Integ...
EJB 3.1 Timers• Automatically created EJB Timers• Calendar-based Timers – cron like semantics • Every Mon & Wed midnight  ...
EJB 3.1  Timers• Can be chained • @Schedules({      @Schedule(hour=”6”,dayOfWeek=”Tue,Thu,Fri-Sun”),       @Schedule(hour=...
EJB 3.1 EJB 3.1 LiteA proper subset of the full EJB 3.1 API thatincludes a small, powerful selection of EJBfeatures suitab...
EJB 3.1EJB 3.1 Lite – Feature Comparison                                    69
Contexts & Dependency Injection - CDI  (JSR 299)• Type-safe Dependency Injection • No String-based identifiers• Strong typ...
CDI Injection Points• Field, Method, Constructor• 0 or more qualifiers                         Which one ?• Type          ...
Basic – Sample Codepublic interface Greeting {    public String sayHello(String name);}public class HelloGreeting implemen...
CDI – Sample Client Code    Field and Method Injectionpublic class CheckoutHandler {    @Inject @LoggedIn User user;    @I...
CDI – Sample Client Code Constructor Injectionpublic class CheckoutHandler {    @Inject    CheckoutHandler(@LoggedIn User ...
CDI - Sample Client CodeMultiple Qualifiers and Qualifiers with Argumentspublic class CheckoutHandler {    @Inject    Chec...
CDI - How to configure ? There is none!• Discovers bean in all modules in which CDI  is enabled• “beans.xml”  • WEB-INF of...
Demo #6CDI Qualifiers                 77
CDI - Scopes• Beans can be declared in a scope • Everywhere: @ApplicationScoped, @RequestScoped • Web app: @SessionScoped ...
CDI - Named Beans  Built-in support for the Unified EL• Beans give themselves a name with @Named(“cart”)• Then refer to it...
Events – More decoupling• Annotation-based event model • Based upon “Observer” pattern• A “producer” bean fires an event• ...
Events – Sample Code@Inject @Any Event<PrintEvent> myEvent;void print() {  . . .  myEvent.fire(new PrintEvent(5));}void on...
CDI Much more ...• Producer methods and fields• Bridging Java EE resources• Alternatives• Interceptors• Decorators• Stereo...
Java Server Faces 2.0 (JSR 314)• Facelets as “templating language” for the page  • Custom components much easier to develo...
Demo #7JSF 2.0          84
JSF 2 Composite Components                             85
JSF 2 Composite Components<html xmlns="http://www.w3.org/1999/xhtml"  xmlns:ui="http://java.sun.com/jsf/facelets"  xmlns:h...
Java Server Faces 2.0  Integrated Ajax Support• f:ajax <h:commandButton       actionListener="#{sakilabean.findActors}"   ...
Java Server Faces 2.0• “faces-config.xml” optional in common cases • <managed-bean> → @ManagedBean or @Named • Validator, ...
Java Server Faces 2.0 Much more ...                                    <navigation-case>                                  ...
Bean Validation (JSR 303)• Tier-independent mechanism to define constraints for data validation  • Represented by annotati...
Bean Validation Integration with JPA• Managed classes may be configured • Entities, Mapped superclasses, Embeddable classe...
Bean Validation Integration with JSF• Individual validators not required• Integration with EL  • f:validateBean, f:validat...
Demo #8Bean Validation                  93
JAX-RS 1.1• Java API for building RESTful Web Services• POJO based• Annotation-driven• Server-side API• HTTP-centric      ...
JAX-RS 1.1Code Sample - Simple@Path("helloworld")public class HelloWorldResource {    @Context UriInfo ui;    @GET    @Pro...
JAX-RS 1.1Code Sample – Specifying Output MIME type@Path("/helloworld")@Produces("text/plain")public class HelloWorldResou...
Demo #9JAX-RS          97
JAX-RS 1.1Code Sample – Specifying Input MIME type@POST@Consumes("text/plain")public String saveMessage() {    . . .}     ...
JAX-RS 1.1Code Sampleimport javax.inject.Inject;import javax.enterprise.context.RequestScoped;@RequestScopedpublic class A...
JAX-RS 1.1Code Sampleimport   javax.ws.rs.GET;import   javax.ws.rs.Path;import   javax.ws.rs.Produces;import   javax.ws.rs...
JAX-RS 1.1        Integration with Java EE 6 – Servlets 3.0    • No or Portable “web.xml”<web-app>                        ...
JAX-RS 1.1 Jersey Client-side API• Consume HTTP-based RESTful Services• Easy-to-use • Better than HttpURLConnection!• Reus...
JAX-RS 1.1   Jersey Client API – Code SampleClient client = Client.create();WebResource resource = client.resource(“...”);...
JAX-RS 1.1Jersey Client API – NetBeans Code Generation                                               104
JAX-RS 1.1  WADL Representation of Resources• Machine processable description of  HTTP-based Applications• Generated OOTB ...
JAX-RS 1.1 Much more ...• Jersey is the Reference Implementation, included in GlassFish • RESTEasy, Restlet, CXF, Wink• Hy...
JAX-RS 2.0                                          Subject                                                          To   ...
http://blogs.sun.com/arungupta/entry/java_ee_6_twitter_demo                                                              108
Demo #10Twitter App              109
110
IDE Support for Java EE 6                            111
112
http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getlppage?page_id=212&path=SADJ                                 ...
From the real users ...                                                            Jigsaw puzzle, Modular,Developers can c...
Avoid “framework explosion”  In selecting an application server our main goal  was to avoid the framework explosion that  ...
What is GlassFish ?• A community  • Users, Partners, Testers, Developers, ...  • Started in 2005 on java.net• Application ...
GlassFish Server Chronology2006    2007       2008      2009      2010                  …GlassFish v1Java EE 5, Single Ins...
GlassFish Server DistributionsDistribution                  License      Features                                         ...
GlassFish 3.1 >= 3.0 + 2.1.1• Main Features  • Clustering and Centralized Administration  • High Availability• Other ...  ...
120
Boost your productivity   Retain session across deploymentasadmin redeploy –properties keepSessions=true helloworld.war   ...
Boost your productivityDeploy-on-Save                          122
Fusion Middleware Integration Strategy• Commercial version will have  integrations with Fusion Middleware  • Certification...
What does Java EE offer to Cloud ?●    Containers●    Injectable services●    Scale to large clusters●    Security model● ...
What can Java EE do for Clouds ?●    Tighter requirements for resource/state●    Better isolation between applications●   ...
References• glassfish.org• blogs.sun.com/theaquarium• oracle.com/goto/glassfish• youtube.com/user/GlassFishVideos• Follow ...
<Insert Picture Here>Understanding the Nuts & Bolts of Java EE 6Arun Gupta, Java EE & GlassFish Guyblogs.sun.com/arungupta...
Upcoming SlideShare
Loading in...5
×

Understanding the nuts & bolts of Java EE 6

7,253

Published on

1 Comment
6 Likes
Statistics
Notes
  • http://dbmanagement.info/Tutorials/Java.htm
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
7,253
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
262
Comments
1
Likes
6
Embeds 0
No embeds

No notes for slide

Understanding the nuts & bolts of Java EE 6

  1. 1. <Insert Picture Here>Understanding the Nuts & Bolts of Java EE 6Arun Gupta, Java EE & GlassFish Guyblogs.sun.com/arungupta, @arungupta
  2. 2. The following/preceding is intended to outline ourgeneral product direction. It is intended forinformation purposes only, and may not beincorporated into any contract. It is not acommitment to deliver any material, code, orfunctionality, and should not be relied upon inmaking purchasing decisions.The development, release, and timing of anyfeatures or functionality described for Oracle’sproducts remains at the sole discretion of Oracle. 2
  3. 3. Are you tweeting ? #glassfish #jfokus 3
  4. 4. Java EE: Past & Present Flexible Ease of Development Java EE 6 Pruning Java EE 5 Extensibility Web Ease of Services Profiles Development Annotations Ease-of-dev J2EE 1.4 EJB 3.0 EJB Lite Web Services, Persistence API RESTful WS Robustness Management, New and CDI Enterprise Deployment, Updated Java J2EE 1.3 Async. Web Services Platform CMP, Connector Connector Architecture Java EE 6 J2EE 1.2 Servlet, JSP, Web Profile EJB, JMS JPE RMI/IIOPProject Managed Bean 1.0May 1998 Dec 1999 Sep 2001 Nov 2003 May 2006 Dec 2009 10 specs 13 specs 20 specs 23 specs 28 specs 4
  5. 5. Compatible Java EE 5 Implhttp://java.sun.com/javaee/overview/compatibility-javaee5.jsp 5
  6. 6. Compatible Java EE 6 ImplsToday: Web Profile OnlyAnnounced: 6
  7. 7. Light-weight• Java EE 6 Web Profile• Pruning • Pruned today, means • Optional in the next release • Deleted in the subsequent releases • Technologies marked in Javadocs • EJB 2.x Entity Beans, JAX-RPC, JAXR, JSR 88 7
  8. 8. • EJB-in-WAR• No-interface EJB• Optional “web.xml”/”faces- config.xml”• Annotation-driven • @Schedule • @Path • @Inject • ... 8
  9. 9. <web-fragment> <filter> <filter-name>wicket.helloworld</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>...</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicket.helloworld</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-fragment> 9
  10. 10. Java EE 6 - Done 09• Specifications approved by the JCP• Reference Implementation is GlassFish 20 Server Open Source Edition 3• TCK ec D 10
  11. 11. Java EE 6 Specifications• The Platform• Java EE 6 Web Profile 1.0• Managed Beans 1.0 11
  12. 12. Java EE 6 Specifications New• Contexts and Dependency Injection for Java EE (JSR 299)• Bean Validation 1.0 (JSR 303)• Java API for RESTful Web Services (JSR 311)• Dependency Injection for Java (JSR 330) 12
  13. 13. Java EE 6 Specifications Extreme Makeover• Java Server Faces 2.0 (JSR 314)• Java Servlets 3.0 (JSR 315)• Java Persistence 2.0 (JSR 317)• Enterprise Java Beans 3.1 & Interceptors 1.1 (JSR 318)• Java EE Connector Architecture 1.6 (JSR 322) 13
  14. 14. Java EE 6 Specifications Updates• Java API for XML-based Web Services 2.2 (JSR 224)• Java API for XML Binding 2.2 (JSR 222)• Web Services Metadata MR3 (JSR 181)• JSP 2.2/EL 2.2 (JSR 245)• Web Services for Java EE 1.3 (JSR 109)• Common Annotations 1.1 (JSR 250)• Java Authorization Contract for Containers 1.3 (JSR 115)• Java Authentication Service Provider Interface for Containers 1.0 (JSR 196) 14
  15. 15. Java EE 6 Specifications As is• JDBC 4.0 API• Java Naming and Directory Interface 1.2• Java Message Service 1.1• Java Transaction API 1.1• Java Transaction Service 1.0• JavaMail API Specification 1.4• JavaBeans Activation Framework 1.1• Java API for XML Processing 1.3• Java API for XML-based RPC 1.1• SOAP with Attachments API for Java 1.3• Java API for XML Registries 1.0• Java EE Management Specification 1.1 (JSR 77)• Java EE Deployment Specification 1.2 (JSR 88)• Java Management Extensions 1.2• Java Authentication and Authorization Service 1.0• Debugging Support for Other Languages (JSR 45)• Standard Tag Library for JSP 1.2 (JSR 52)• Streaming API for XML 1.0 (JSR 173) 15
  16. 16. Java EE 6 Web Profile 1.0 Servlets 3.0 JPA 2.0 EJB 3.1 JDBC StAX Interceptors JSF 2.0 JAX-RS JNDI JavaMail 1.1 Bean EJB 3.1 Lite JAXB JMS JACC Validation1.0 JSP 2.2 CDI 1.0 JAX-WS JAXP SAAJ Managed JTA 1.1 JASPIC JAX-RPC ... Beans 1.0 Contributed by RedHat New Updated 16
  17. 17. http://blog.eisele.net/2010/12/who-is-afraid-of-java-ee-6-get-rid-of.html 17
  18. 18. 18
  19. 19. Managed Beans 1.0 EJB CDI JSF JAX-WS JAX-RS JPA ...@Stateful @Managed @Web@Stateless @Named @Path @Entity ... Bean Service@Singleton @javax.annotation.ManagedBean 19
  20. 20. Managed Beans 1.0• POJO as managed component for the Java EE container • JavaBeans component model for Java EE • Simple and Universally useful • Advanced concepts in companion specs• Basic Services • Resource Injection, Lifecycle Callbacks, Interceptors• Available as • @Resource / @Inject • java:app/<module-name>/<bean-name> • java:module/<bean-name> 20
  21. 21. Demo #1Managed Beans 21
  22. 22. Managed Beans 1.0 - Sample@javax.annotation.ManagedBean @Resourcepublic class MyManagedBean { MyManagedBean bean; @PostConstruct public void setupResources() { // setup your resources } @Inject @PreDestroy MyManagedBean bean; public void cleanupResources() { // collect them back here } public String sayHello(String name) { return "Hello " + name; }}http://blogs.sun.com/arungupta/entry/totd_129_managed_beans_1 22
  23. 23. Interceptors 1.1• Interpose on invocations and lifecycle events on a target class• Defined • Using annotations or DD • Default Interceptors (only in DD)• Class & Method Interceptors • In the same transaction & security context• Cross-cutting concerns: logging, auditing, profiling 23
  24. 24. Demo #2Interceptors 24
  25. 25. Interceptors – Business Method (Logging)@InterceptorBinding @LoggingInterceptorBinding@Retention(RUNTIME) public class MyManagedBean {@Target({METHOD,TYPE}) . . .public @interface }LoggingInterceptorBinding {}@Interceptor@LoggingInterceptorBindingpublic class @LogInterceptor { @AroundInvoke public Object log(InvocationContext context) { System.out.println(context.getMethod().getName()); System.out.println(context.getParameters()); return context.proceed(); }} 25
  26. 26. Why Interceptor Bindings ?• Remove dependency from the interceptor implementation class• Can vary depending upon deployment environment• Allows central ordering of interceptors 26
  27. 27. Interceptors – Business Method (Transaction)@InterceptorBinding @Transactional@Retention(RUNTIME) public class ShoppingCart { . . . }@Target({METHOD,TYPE})public @interface Transactional { public class ShoppingCart {} @Transactional public void checkOut() { . . . }@Interceptor@Transactionalpublic class TransactionInterceptor { @Resource UserTransaction tx; @AroundInvoke public Object manageTransaction(InvocationContext context) { tx.begin() context.proceed(); tx.commit(); }} http://blogs.sun.com/arungupta/entry/totd_151_transactional_interceptors_using 27
  28. 28. Servlets in Java EE 5 At least 2 files<!--Deployment descriptor /* Code in Java Class */ web.xml --><web-app> package com.sun; <servlet> public class MyServlet extends <servlet-name>MyServlet HttpServlet { </servlet-name> public void <servlet-class> doGet(HttpServletRequest com.sun.MyServlet req,HttpServletResponse res) </servlet-class> { </servlet> ... <servlet-mapping> <servlet-name>MyServlet } </servlet-name> ... <url-pattern>/myApp/* } </url-pattern> </servlet-mapping> ...</web-app> 28
  29. 29. Servlets 3.0 (JSR 315) Annotations-based @WebServletpackage com.sun;@WebServlet(name=”MyServlet”, urlPatterns={”/myApp/*”})public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { <!--Deployment descriptor web.xml --> <web-app> ... <servlet> <servlet-name>MyServlet</servlet-name> } <servlet-class> com.sun.MyServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myApp/*</url-pattern> </servlet-mapping> ... </web-app>http://blogs.sun.com/arungupta/entry/screencast_37_java_ee_6 29
  30. 30. Demo #3Servlets 30
  31. 31. Servlets 3.0 Annotations-based @WebServlet@WebServlet(name="mytest", urlPatterns={"/myurl"}, initParams={ @InitParam(name="n1", value="v1"), @InitParam(name="n2", value="v2") })public class TestServlet extends javax.servlet.http.HttpServlet { ....} 31
  32. 32. Servlets 3.0Annotations-based @WebListeners<listener> <listener-class> server.LoginServletListener </listener-class></listener>package server;. . .@WebListener()public class LoginServletListener implementsServletContextListener { 32
  33. 33. Servlets 3.0 Asynchronous Servlets• Useful for Comet, long waits• Must declare @WebServlet(asyncSupported=true)AsyncContext context = request.startAsync();context.addListener(new AsyncListener() { … });context.dispatch(“/request.jsp”);//context.start(Runnable action);. . .context.complete(); http://blogs.sun.com/arungupta/entry/totd_139_asynchronous_request_processing 33
  34. 34. Servlets 3.0 Extensibility• Plugin libraries using web fragments • Modular web.xml• Bundled in framework JAR file in META-INF directory• Zero-configuration, drag-and-drop for web frameworks • Servlets, servlet filters, context listeners for a framework get discovered and registered by the container• Only JAR files in WEB-INF/lib are used 34
  35. 35. Servlets 3.0 Extensibility<web-fragment> <filter> <filter-name>wicket.helloworld</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>...</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicket.helloworld</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-fragment>http://blogs.sun.com/arungupta/entry/totd_91_applying_java_ee 35
  36. 36. Servlets 3.0 Extensibility - ServletContainerInitializer• Provided by the apps or container• Discovered using the service provider API• Expresses interest in classes via @HandlesTypes• Who uses it ? • Mojarra (JSF2) is bootstrapped into GlassFish • No “faces-config.xml” or “web.xml” • Jersey (JAX-RS) registers root Application • No (or portable) “web.xml” 36
  37. 37. Servlets 3.0Dynamic Registration – Java Server Faces @SuppressWarnings({"UnusedDeclaration"}) @HandlesTypes({ ManagedBean.class, FacesComponent.class, FacesValidator.class, FacesConverter.class, FacesBehaviorRenderer.class, ResourceDependency.class, ResourceDependencies.class, ListenerFor.class, ListenersFor.class, UIComponent.class, Validator.class, Converter.class, Renderer.class }) public class FacesInitializer implements ServletContainerInitializer { // NOTE: Loggins should not be used with this class. private static final String FACES_SERVLET_CLASS = FacesServlet.class.getName(); 37
  38. 38. Servlets 3.0Dynamic Registration – Java Server Faces public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException { if (shouldCheckMappings(classes, servletContext)) { Map<String,? extends ServletRegistration> existing =servletContext.getServletRegistrations(); for (ServletRegistration registration : existing.values()) { if (FACES_SERVLET_CLASS.equals(registration.getClassName())) { // FacesServlet has already been defined, so were // not going to add additional mappings; return; } } ServletRegistration reg = servletContext.addServlet("FacesServlet", "javax.faces.webapp.FacesServlet"); reg.addMapping("/faces/*", "*.jsf", "*.faces"); servletContext.setAttribute(RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED,Boolean.TRUE); 38
  39. 39. Servlets 3.0Dynamic Registration – Create, Register, LookupServletRegistration.Dynamic dynamic = servletContext.addServlet(“DynamicServlet”, “com.mycom.MyServlet);dynamic.addMapping(“/dynamicServlet”);dynamic.setAsyncSupported(true);ServletRegistration dynamic = servletContext. getServletRegistration(“DynamicServlet”);dynamic.addMapping(“/dynamicServlet”);dynamic.setInitParameter(“param”, “value”); 39
  40. 40. Servlets 3.0 Resource Sharing• Static and JSP no longer confined to document root of the web application• May be placed in WEB-INF/lib/ [*.jar]/META-INF/resources• Resources in document root take precedence over those in bundled JAR myapp.war WEB-INF/lib/catalog.jar /META-INF/resources/catalog/books.html http://localhost:8080/myapp/catalog/books.html 40
  41. 41. Servlets 3.0 Much more ...• Programmatic authentication, login, logout > HttpServletRequest.authenticate > HttpServletRequest.login > HttpServletRequest.logout• File upload support• Servlet Security <error-page> <error-code>...</error-code> > @ServletSecurity <exception-type>...</exception-type> <location>/404.html</location>• Default Error Page </error-page> > Any HTTP status code > http://blogs.sun.com/arungupta/entry/ totd_136_default_error_page 41
  42. 42. Java Persistence API 2 (JSR 317) Sophisticated mapping/modeling options• Collection of basic types@Entitypublic class Person { @Id protected String ssn; protected String name; protected Date birthDate; . . . @ElementCollection @CollectionTable(name=”ALIAS”) protected Set<String> nickNames;} 42
  43. 43. Java Persistence API 2 Sophisticated mapping/modeling options• Collection of embeddables@Embeddable public class Address { String street; String city; String state; . . .}@Entity public class RichPerson extends Person { . . . @ElementCollection protected Set<Address> vacationHomes; . . .} 43
  44. 44. Java Persistence API 2 Sophisticated mapping/modeling options• Multiple levels of embedding@Embeddable public class ContactInfo { @Embedded Address address; . . .}@Entity public class Employee { @Id int empId; String name; ContactInfo contactInfo; . . .} 44
  45. 45. Java Persistence API 2 Sophisticated mapping/modeling options• Improved Map support@Entity public class VideoStore { @Id Integer storeId; Address location; . . . @ElementCollection Map<Movie, Integer> inventory;}@Entity public class Movie { @Id String title; @String director; . . .} 45
  46. 46. Java Persistence API 2 Expanded JPQL• Support for all new modeling/mapping features• Operators and functions in select list• INDEX, KEY/VALUE ENTRY// Inventory is Map<Movie, Integer>SELECT v.location.street, KEY(i).title, VALUE(i),FROM VideoStore v JOIN v.inventory iWHERE KEY(i).director LIKE %Hitchcock% AND VALUE(i) > 0 46
  47. 47. Java Persistence API 2Expaded JPQL – CASE ExpressionUPDATE Employee eSET e.salary = CASE e.rating WHEN 1 THEN e.salary * 1.05 WHEN 2 THEN e.salary * 1.02 ELSE e.salary * 0.95 END 47
  48. 48. Java Persistence API 2 Metamodel• Abstract “schema-level” model over managed classes of a Persistence Context • Entities, Mapped classes, Embeddables, ...• Accessed dynamically • EntityManager or EntityManagerFactory.getMetamodel()• And/or statically materialized as metamodel classes • Use annotation processor with javac 48
  49. 49. Demo #4Java Persistence API 49
  50. 50. Java Persistence API 2 Metamodel Example@Entitypublic class Customer { @Id Integer custId; String name; ... Address address; @ManyToOne SalesRep rep; @OneToMany Set<Order> orders;}import javax.persistence.metamodel.*;@StaticMetamodel(Customer.class)public class Customer_ { public static SingularAttribute<Customer, Integer> custId; public static SingularAttribute<Customer, String> name; public static SingularAttribute<Customer, Address> address; public static SingularAttribute<Customer, SalesRep> rep; public static SetAttribute<Customer, Order> orders;} 50
  51. 51. Canonical Metamodel using NetBeans http://blogs.sun.com/arungupta/entry/totd_148_jpa2_metamodel_classes 51
  52. 52. Java Persistence API 2Type-safe Criteria APIEntityManager em = …;CriteriaBuilder cb = em.getCriteriaBuilder();CriteriaQuery<ResultType> cquery = cb.createQuery(ResultType.class);Root<MyEntity> e = cquery.from(MyEntity.class);Join<MyEntity, RelatedEntity> j = e.join(…);…cquery.select(…) .where(…) .orderBy(…) .groupBy(…);TypedQuery<ResultType> tq = em.createQuery(cquery);List<ResultType> result = tq.getResultList(); 52
  53. 53. Java Persistence API 2 Caching• 1st-level Cache by PersistenceContext • Only one object instance for any database row• 2nd-level by “shared-cache-mode” • ALL, NONE • UNSPECIFIED – Provider specific defaults • ENABE_SELECTIVE - Only entities with Cacheable(true) • DISABLE_SELECTIVE - All but with Cacheable(false) • Optional feature for PersistenceProvider• Properties for find, refresh, setProperty • CacheRetrieveMode – USE, BYPASS 53
  54. 54. Java Persistence API 2 Much more ...• New locking modes • PESSIMISTIC_READ – grab shared lock • PESSIMISTIC_WRITE – grab exclusive lock • PESSIMISTIC_FORCE_INCREMENT – update version • em.find(<entity>.class, id, LockModeType.XXX) • em.lock(<entity>, LockModeType.XXX)• Standard configuration options • javax.persistence.jdbc.[driver | url | user | password] 54
  55. 55. JPA 2.1 Candidate Features Subject http://jcp.org/en/jsr/detail?id=338 To Change● Converters/Custom types● Fetch groups/plans● Immutable attributes and read-only entities● Support for schema generation● Generated values for non-PKs● Multi-tenancy● UUID generator type● Persistence Context synchronization control● Dynamic definition of PU● Additional event listeners 55
  56. 56. Subject JPA 2.1 Candidate Features To Change● Support for stored procedures● Database and vendor function invocation● Update and Delete Criteria queries● Support for mapping between JPQL and Criteria queries● Improved support for result type mapping of native queries● Downcasting● Query by Example 56
  57. 57. EJB 3.1 (JSR 318)Package & Deploy in a WAR Java EE 5 Java EE 6 myApp.warmyApp.ear WEB-INF/classes myWeb.war com.sun.FooServlet com.sun.TickTock WEB-INF/web.xml com.sun.FooBean WEB-INF/classes com.sun.FooHelper com.sun.FooServlet com.sun.TickTock myBeans.jar com.sun.FooBean web.xml ? com.sun.FooHelper http://blogs.sun.com/arungupta/entry/screencast_37_java_ee_6 57
  58. 58. Demo #5EJB 3.1 58
  59. 59. EJB 3.1• No interface view – one source file per bean • Only for Local and within WAR • Required for Remote • No location transparency• Component initialization in @PostConstruct • No assumptions on no-arg ctor 59
  60. 60. EJB 3.1 Portable Global JNDI Name Syntax• Portable• Global• Application/Module-scoped• Derived from metadata such as name, component name etc. 60
  61. 61. EJB 3.1 Portable Global JNDI Name Syntax Base name of ejb-jar/WAR Only within EAR (or ejb-jar.xml/web.xml) Base name of EAR (or application.xml) java:global[/<app-name>]/<module-name>/<bean-name> [!<fully-qualified-interface-name>] Unqualified name of the bean class• Until now, only java:comp Annotation/name attribute Or ejb-jar.xml• Local & Remote business• No-interface• Also in java:app, java:module 61
  62. 62. EJB 3.1Embeddable API – Deploy the Beanpublic void testEJB() throws NamingException { EJBContainer ejbC = EJBContainer.createEJBContainer(); Context ctx = ejbC.getContext(); App app = (App) ctx.lookup("java:global/classes/App"); assertNotNull(app); String NAME = "Duke"; String greeting = app.sayHello(NAME); assertNotNull(greeting); assertTrue(greeting.equals("Hello " + NAME)); ejbC.close(); } http://blogs.sun.com/arungupta/entry/totd_128_ejbcontainer_createejbcontainer_embedded 62
  63. 63. EJB 3.1 Singleton Beans• One instance per app/VM, not pooled • Useful for caching state • CMT/BMT • Access to container services for injection, resource manager, timers, startup/shutdown callbacks, etc. • Enable eager initialization using @Startup • Define initialization ordering using @Depends @Singleton public class MyEJB { . . . } 63
  64. 64. EJB 3.1 Asynchronous Session Beans• Light-weight JMS• Control returns to the client before the container dispatches the invocation to a bean instance• @Asynchronous – method or class• Return type – void or Future<V>• Transaction context does not propagate • REQUIRED → REQUIRED_NEW• Security principal propagates 64
  65. 65. EJB 3.1Asynchronous Session Beans – Code Sample@Stateless@Asynchronouspublic class SimpleAsyncEJB { public Future<Integer> addNumbers(int n1, int n2) { Integer result; result = n1 + n2; try { // simulate JPA queries + reading file system Thread.currentThread().sleep(2000); } catch (InterruptedException ex) { ex.printStackTrace(); } return new AsyncResult(result); }} http://blogs.sun.com/arungupta/entry/totd_137_asynchronous_ejb_a 65
  66. 66. EJB 3.1 Timers• Automatically created EJB Timers• Calendar-based Timers – cron like semantics • Every Mon & Wed midnight @Schedule(dayOfWeek=”Mon,Wed”) • 2pm on Last Thur of Nov of every year (hour=”14”, dayOfMonth=”Last Thu”, month=”Nov”) • Every 5 minutes of every hour (minute=”*/5”, hour=”*”) • Every 10 seconds starting at 30 (second=”30/10”) • Every 14th minute within the hour, for the hours 1 and 2 am (minute=”*/14”, hour=”1,2”) 66
  67. 67. EJB 3.1 Timers• Can be chained • @Schedules({ @Schedule(hour=”6”,dayOfWeek=”Tue,Thu,Fri-Sun”), @Schedule(hour=”12”,dayOfWeek=”Mon,Wed”) })• May be associated with a TimeZone• Single persistent timer across JVMs• Non-persistent timer, e.g. Cache • @Schedule(..., persistent=false) 67
  68. 68. EJB 3.1 EJB 3.1 LiteA proper subset of the full EJB 3.1 API thatincludes a small, powerful selection of EJBfeatures suitable for writing portabletransactional business logic...suitable for inclusion in a wider rangeof Java products, many of which have muchsmaller installation and runtime footprintsthan a typical full Java EE implementation 68
  69. 69. EJB 3.1EJB 3.1 Lite – Feature Comparison 69
  70. 70. Contexts & Dependency Injection - CDI (JSR 299)• Type-safe Dependency Injection • No String-based identifiers• Strong typing, Loose coupling • Events, Interceptors, Decorators• Context & Scope management – extensible• Portable Extensions• Bridge EJB and JSF in the platform• Works with Java EE modular and component architecture • Integration with Unified Expression Language (UEL) 70
  71. 71. CDI Injection Points• Field, Method, Constructor• 0 or more qualifiers Which one ?• Type (Qualifier) @Inject @LoggedIn User userRequest What ?Injection (Type) 71
  72. 72. Basic – Sample Codepublic interface Greeting { public String sayHello(String name);}public class HelloGreeting implements Greeting { public String sayHello(String name) { return “Hello “ + name; }}@Statelesspublic class GreetingService { @Inject Greeting greeting; No String public String sayHello(String name) { return greeting.sayHello(name); identifiers, } All Java} 72
  73. 73. CDI – Sample Client Code Field and Method Injectionpublic class CheckoutHandler { @Inject @LoggedIn User user; @Inject PaymentProcessor processor; @Inject void setShoppingCart(@Default Cart cart) { … }} 73
  74. 74. CDI – Sample Client Code Constructor Injectionpublic class CheckoutHandler { @Inject CheckoutHandler(@LoggedIn User user, PaymentProcessor processor, @Default Cart cart) { ... }}• Only one constructor can have @Inject 74
  75. 75. CDI - Sample Client CodeMultiple Qualifiers and Qualifiers with Argumentspublic class CheckoutHandler { @Inject CheckoutHandler(@LoggedIn User user, @Reliable @PayBy(CREDIT_CARD) PaymentProcessor processor, @Default Cart cart) { ... }} 75
  76. 76. CDI - How to configure ? There is none!• Discovers bean in all modules in which CDI is enabled• “beans.xml” • WEB-INF of WAR • META-INF of JAR • META-INF of directory in the classpath• Can enable groups of bean selectively via a descriptor 76
  77. 77. Demo #6CDI Qualifiers 77
  78. 78. CDI - Scopes• Beans can be declared in a scope • Everywhere: @ApplicationScoped, @RequestScoped • Web app: @SessionScoped • JSF app: @ConversationScoped • Transient and long-running • Pseudo-scope (default): @Dependent • Custom scopes via @Scope• CDI runtime makes sure the right bean is created at the right time• Client do NOT have to be scope-aware 78
  79. 79. CDI - Named Beans Built-in support for the Unified EL• Beans give themselves a name with @Named(“cart”)• Then refer to it from a JSF or JSP page using the EL: <h:commandButton value=”Checkout” action=“#{cart.checkout}”/> 79
  80. 80. Events – More decoupling• Annotation-based event model • Based upon “Observer” pattern• A “producer” bean fires an event• An “observer” bean watches an event• Events can have qualifiers• Transactional event observers • IN_PROGRESS, AFTER_SUCCESS, AFTER_FAILURE, AFTER_COMPLETION, BEFORE_COMPLETION 80
  81. 81. Events – Sample Code@Inject @Any Event<PrintEvent> myEvent;void print() { . . . myEvent.fire(new PrintEvent(5));}void onPrint(@Observes PrintEvent event){…}public class PrintEvent { public PrintEvent(int pages) { this.pages = pages; } . . .}void addProduct(@Observes(during = AFTER_SUCCESS) @CreatedProduct product) 81
  82. 82. CDI Much more ...• Producer methods and fields• Bridging Java EE resources• Alternatives• Interceptors• Decorators• Stereotypes 82
  83. 83. Java Server Faces 2.0 (JSR 314)• Facelets as “templating language” for the page • Custom components much easier to develop <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Enter Name &amp; Password</title> </h:head> <h:body> <h1>Enter Name &amp; Password</h1> <h:form> <h:panelGrid columns="2"> <h:outputText value="Name:"/> <h:inputText value="#{simplebean.name}" title="name" id="name" required="true"/> <h:outputText value="Password:"/> <h:inputText value="#{simplebean.password}" title="password" id="password" required="true"/> </h:panelGrid> <h:commandButton action="show" value="submit"/> </h:form> </h:body> </html> 83
  84. 84. Demo #7JSF 2.0 84
  85. 85. JSF 2 Composite Components 85
  86. 86. JSF 2 Composite Components<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:ez="http://java.sun.com/jsf/composite/ezcomp"> <h:head> <title>Enter Name &amp; Password</title> </h:head> <h:body> <h1>Enter Name &amp; Password</h1> <h:form> <ez:username-password/> <h:commandButton action="show" value="submit"/> </h:form> . . . </h:body> WEB-INF</html> index.xhtml resources/ ezcomp/ username-password.xhtmlhttp://blogs.sun.com/arungupta/entry/totd_147_java_server_faces 86
  87. 87. Java Server Faces 2.0 Integrated Ajax Support• f:ajax <h:commandButton actionListener="#{sakilabean.findActors}" value="submit"> <f:ajax execute="length" render="actorTable totalActors"/> </h:commandButton> http://blogs.sun.com/arungupta/entry/totd_123_f_ajax_bean 87
  88. 88. Java Server Faces 2.0• “faces-config.xml” optional in common cases • <managed-bean> → @ManagedBean or @Named • Validator, Renderer, Listener, ... • Default navigation rules – match a view on the disk @Named(“simplebean”) public class SimpleBean { . . . } <h:commandButton action="show" value="submit"/> 88
  89. 89. Java Server Faces 2.0 Much more ... <navigation-case> <from-outcome>success</from-outcome>• Runs on Servlet 2.5+ <to-view-id>/page2.xhtml</to-view-id> <!-- Only accept if the following condition• Conditional navigation is true --> <if>#{foo.someCondition}</if> </navigation-case>• Project Stages • Development, UnitTest, SystemTest, Production• Custom Scopes for Managed Beans• Bookmarkable URLs • h:link, h:button <h:link outcome="viewEntry" value="Link"> <f:param name="entry" value="#{aBean.entry}"/> </h:link> <a href="http://localhost:8080/myapp/viewEntry.xhtml? entry=entry1">Link</a> 89
  90. 90. Bean Validation (JSR 303)• Tier-independent mechanism to define constraints for data validation • Represented by annotations • javax.validation.* package• Integrated with JSF and JPA • JSF: f:validateRequired, f:validateRegexp • JPA: pre-persist, pre-update, and pre-remove• @NotNull(message=”...”), @Max, @Min, @Size• Fully Extensible • @Email String recipient; 90
  91. 91. Bean Validation Integration with JPA• Managed classes may be configured • Entities, Mapped superclasses, Embeddable classes• Applied during pre-persist, pre-update, pre- remove lifecycle events• How to enable ? • “validation-mode” in persistence.xml • “javax.persistence.validation.mode” key in Persistence.createEntityManagerFactory• Specific set of classes can be targeted • javax.persistence.validation.group.pre-[persist|update| remove] 91
  92. 92. Bean Validation Integration with JSF• Individual validators not required• Integration with EL • f:validateBean, f:validateRequired <h:form> <f:validateBean> <h:inputText value=”#{model.property}” /> <h:selectOneRadio value=”#{model.radioProperty}” > … </h:selectOneRadio> <!-- other input components here --> </f:validateBean> </h:form> 92
  93. 93. Demo #8Bean Validation 93
  94. 94. JAX-RS 1.1• Java API for building RESTful Web Services• POJO based• Annotation-driven• Server-side API• HTTP-centric 94
  95. 95. JAX-RS 1.1Code Sample - Simple@Path("helloworld")public class HelloWorldResource { @Context UriInfo ui; @GET @Produces("text/plain") public String sayHello() { return "Hello World"; } @GET @Path("morning") public String morning() { return “Good Morning!”; }} 95
  96. 96. JAX-RS 1.1Code Sample – Specifying Output MIME type@Path("/helloworld")@Produces("text/plain")public class HelloWorldResource { @GET public String doGetAsPlainText() { . . . } @GET @Produces("text/html") public String doGetAsHtml() { . . . } @GET} @Produces({ "application/xml", "application/json"}) public String doGetAsXmlOrJson() { . . . } 96
  97. 97. Demo #9JAX-RS 97
  98. 98. JAX-RS 1.1Code Sample – Specifying Input MIME type@POST@Consumes("text/plain")public String saveMessage() { . . .} 98
  99. 99. JAX-RS 1.1Code Sampleimport javax.inject.Inject;import javax.enterprise.context.RequestScoped;@RequestScopedpublic class ActorResource { @Inject DatbaseBean db; public Actor getActor(int id) { return db.findActorById(id); }} 99
  100. 100. JAX-RS 1.1Code Sampleimport javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.PathParam;import javax.inject.Inject;import javax.enterprise.context.RequestScoped;@Path("/actor/{id}")@RequestScopedpublic class ActorResource { @Inject DatbaseBean db; @GET @Produces("application/json") public Actor getActor(@PathParam("id") int id) { return db.findActorById(id); }} http://blogs.sun.com/arungupta/entry/totd_124_using_cdi_jpa 100
  101. 101. JAX-RS 1.1 Integration with Java EE 6 – Servlets 3.0 • No or Portable “web.xml”<web-app> @ApplicationPath(“resources”) <servlet> <servlet-name>Jersey Web Application</servlet-name> public class MyApplication <servlet-class> extends com.sun.jersey.spi.container.servlet.ServletContainer javax.ws.rs.core.Application { </servlet-class> <init-param> } <param-name>javax.ws.rs.Application</param-name> <param-value>com.foo.MyApplication</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Jersey Web Application</servlet-name> <url-pattern>/resources/*</url-pattern> </servlet-mapping></web-app> 101
  102. 102. JAX-RS 1.1 Jersey Client-side API• Consume HTTP-based RESTful Services• Easy-to-use • Better than HttpURLConnection!• Reuses JAX-RS API • Resources and URI are first-class citizens• Not part of JAX-RS yet • com.sun.jersey.api.client 102
  103. 103. JAX-RS 1.1 Jersey Client API – Code SampleClient client = Client.create();WebResource resource = client.resource(“...”);//curl http://example.com/baseString s = resource.get(String.class);//curl -HAccept:text/plain http://example.com/baseString s = resource. accept(“text/plain”). get(String.class);http://blogs.sun.com/enterprisetechtips/entry/consuming_restful_web_services_with 103
  104. 104. JAX-RS 1.1Jersey Client API – NetBeans Code Generation 104
  105. 105. JAX-RS 1.1 WADL Representation of Resources• Machine processable description of HTTP-based Applications• Generated OOTB for the application<application xmlns="http://research.sun.com/wadl/2006/10"> <doc xmlns:jersey="http://jersey.dev.java.net/" jersey:generatedBy="Jersey: 1.1.4.1 11/24/2009 01:37 AM"/> <resources base="http://localhost:8080/HelloWADL/resources/"> <resource path="generic"> <method id="getText" name="GET"> <response> <representation mediaType="text/plain"/> </response> </method> <method id="putText" name="PUT"> <request> <representation mediaType="text/plain"/> </request> </method> </resource> </resources></application> 105
  106. 106. JAX-RS 1.1 Much more ...• Jersey is the Reference Implementation, included in GlassFish • RESTEasy, Restlet, CXF, Wink• Hypermedia support (only in Jersey)• Integration with Spring, Guice, Atom, …• WADL representation • Complete, Per resource• Jersey 1.2 modules are OSGi compliant 106
  107. 107. JAX-RS 2.0 Subject To http://markmail.org/thread/wgm3hj3rrva3j6jo Change● Client API ● Low level using Builder pattern, Higher-level● Hypermedia● MVC Pattern ● Resource controllers, Pluggable viewing technology● Bean Validation ● Form or Query parameter validation● Closer integration with @Inject, etc.● Server-side asynchronous request processing● Server-side content negotiation 107
  108. 108. http://blogs.sun.com/arungupta/entry/java_ee_6_twitter_demo 108
  109. 109. Demo #10Twitter App 109
  110. 110. 110
  111. 111. IDE Support for Java EE 6 111
  112. 112. 112
  113. 113. http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getlppage?page_id=212&path=SADJ 113
  114. 114. From the real users ... Jigsaw puzzle, Modular,Developers can concentrate standard, less xml, easy,on business logic, Java EE 6 is easy, have I said easy?providing a standard forthe infrastructure. Standards compliance, vendor independence, milliseconds and kilobyte deploymentHigher integrated specs,simple and annotation driven,single-classloader WARs,next level of industry Faster development, lessstandard frameworks/complexity, more great code shipped http://blogs.sun.com/arungupta/tags/community+feedback 114
  115. 115. Avoid “framework explosion” In selecting an application server our main goal was to avoid the framework explosion that happens when you use a "custom" Enterprise stack like Tomcat + Spring + Hibernate + Myfaces +... Java EE 6 had 80% of what we needed out of the box: strong persistence support ( JPA ), inversion of control ( CDI ), and a lightweight component model ( EJB 3.1 )http://blogs.sun.com/stories/entry/egesa_engineering_avoids_framework_explosion 115
  116. 116. What is GlassFish ?• A community • Users, Partners, Testers, Developers, ... • Started in 2005 on java.net• Application Server • Open Source (CDDL & GPL v2) • Java EE Reference Implementation 116
  117. 117. GlassFish Server Chronology2006 2007 2008 2009 2010 …GlassFish v1Java EE 5, Single Instance GlassFish v2 Java EE 5, High Availability GlassFish Server 3 Java EE 6, Single Instance GlassFish Server 3.1 Java EE 6, High Availability 117
  118. 118. GlassFish Server DistributionsDistribution License Features • Java EE 6 compatibilityGlassFish Server Open CDDL & • Web Profile supportSource Edition 3.1 GPLv2 • In-memory replication / clusteringWeb Profile • Centralized Administration • Java EE 6 compatibilityGlassFish Open Source CDDL & • Full Java EE distributionEdition 3.1 GPLv2 • In-memory replication / clustering • Centralized Administration • AddsOracle GlassFish Server 3.1 Commercial • Oracle GlassFish Server ControlWeb Profile • Patches, support, knowledge base • AddsOracle GlassFish Server 3.1 Commercial • Oracle GlassFish Server Control • Patches, support, knowledge base
  119. 119. GlassFish 3.1 >= 3.0 + 2.1.1• Main Features • Clustering and Centralized Administration • High Availability• Other ... • OSGi/EE RFCs • Application Versioning • Application-scoped Resources • SSH-based remote management and monitoring • Embedded (extensive) • Admin Console based on RESTful APIhttp://blogs.sun.com/arungupta/entry/glassfish_3_1_glassfish_2 119
  120. 120. 120
  121. 121. Boost your productivity Retain session across deploymentasadmin redeploy –properties keepSessions=true helloworld.war 121
  122. 122. Boost your productivityDeploy-on-Save 122
  123. 123. Fusion Middleware Integration Strategy• Commercial version will have integrations with Fusion Middleware • Certification on JRockit • Integration with Coherence and TopLink• Fusion Middleware and Fusion Applications currently not planned to be certified on GlassFish• Initial integrations will be interoperability • Web services, Web services policy, Identity Management (OAM) 123
  124. 124. What does Java EE offer to Cloud ?● Containers● Injectable services● Scale to large clusters● Security model● ... 124
  125. 125. What can Java EE do for Clouds ?● Tighter requirements for resource/state● Better isolation between applications● Support for multi-tenant applications● Potential standard APIs for NRDBMS, Caching, WebSockets, JSON, HTML5● Common management and monitoring interfaces● Better packaging ● Apps/Data are (multiple) versioned, Upgrades, Expose/Connect to services, QoS attributes, ...● Evolution, not revolution! 125
  126. 126. References• glassfish.org• blogs.sun.com/theaquarium• oracle.com/goto/glassfish• youtube.com/user/GlassFishVideos• Follow @glassfish 126
  127. 127. <Insert Picture Here>Understanding the Nuts & Bolts of Java EE 6Arun Gupta, Java EE & GlassFish Guyblogs.sun.com/arungupta, @arungupta
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×