SlideShare a Scribd company logo
Jagadish Ramu
                     Sun Microsystems
Java EE 6 - Deep Dive




                                1
The following/preceding is intended to outline our
general product direction. It is intended for
information 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.



                                                     2
Compatible Java EE 6 Impls

Today:




Announced:
                             3
Goals for the Java EE 6
    Platform
   Flexible & Light-weight
        Web Profile 1.0
        Pruning: JAX-RPC, EJB 2.x Entity Beans, JAXR, JSR 88
   Extensible
        • Embrace Open Source Frameworks

   Easier to use, develop on
        • Continue on path set by Java EE 5


                                                           4
Java EE 6 Web Profile 1.0
   Fully functional mid-sized profile
    • Actively discussed in the Java EE 6 Expert
      Group and outside it
    • Technologies
      • Servlets 3.0, JSP 2.2, EL 2.2, Debugging Support for Other
        Languages 1.0, JSTL 1.2, JSF 2.0, Common Annotations
        1.1, EJB 3.1 Lite, JTA 1.1, JPA 2.0, Bean Validation 1.0,
        Managed Beans 1.0, Interceptors 1.1, Context &
        Dependency Injection 1.0, Dependency Injection for
        Java 1.0



                                                                     5
Java EE 6 - Done




                    09
   Specifications approved by the JCP
   Reference Implementation is GlassFish v3




                 20
   TCK
           ec
          D

                                          6
Java EE 6 Specifications
   The Platform
   Java EE 6 Web Profile 1.0
   Managed Beans 1.0




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




                                              8
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)


                                            9
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)
                                                         10
Servlets in Java EE 5
   At least 2 files
<!--Deployment descriptor     /* Code in Java Class */
  web.xml -->
                              package com.sun;
<web-app>                     public class MyServlet extends
  <servlet>                   HttpServlet {
    <servlet-name>MyServlet   public void
                              doGet(HttpServletRequest
       </servlet-name>
                              req,HttpServletResponse res)
       <servlet-class>
         com.sun.MyServlet    {
       </servlet-class>       ...
  </servlet>
  <servlet-mapping>           }
    <servlet-name>MyServlet
       </servlet-name>        ...
    <url-pattern>/myApp/*
       </url-pattern>         }
  </servlet-mapping>
   ...
</web-app>
                                                         11
Servlets 3.0 (JSR 315)
     Annotations-based @WebServlet

package 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/totd_81_getting_started_with
                                                                                            12
Servlets 3.0
    Annotations-based @WebServlet

@WebServlet(name="mytest",
       urlPatterns={"/myurl"},
     initParams={
       @WebInitParam(name="n1",
value="v1"),
       @WebInitParam(name="n2", value="v2")

       }
)
public class TestServlet extends
       javax.servlet.http.HttpServlet {
           ....                           13

}
Servlets 3.0
Annotations-based @WebListeners
<listener>
   <listener-class>
      server.LoginServletListener
   </listener-class>
</listener>



package server;

. . .

@WebListener()
public class LoginServletListener implements
ServletContextListener {

                                               14
Servlets 3.0
      Annotations-based @WebFilter
                                <filter>
                                    <filter-name>PaymentFilter</filter-name>
                                    <filter-class>server.PaymentFilter</filter-class>
                                    <init-param>
                                         <param-name>param1</param-name>
                                         <param-value>value1</param-value>
package server;                     </init-param>
. . .                           </filter>
@WebFilter(                     <filter-mapping>
                                    <filter-name>PaymentFilter</filter-name>
  filterName="PaymentFilter",       <url-pattern>/*</url-pattern>
  InitParams={                  </filter-mapping>
    @WebInitParam(              <filter-mapping>
                                    <filter-name>PaymentFilter</filter-name>
       name="param1",               <servlet-name>PaymentServlet</servlet-name>
       value="value1")              <dispatcher>REQUEST</dispatcher>
    }                           </filter-mapping>
  urlPatterns={"/*"},
  servletNames={"PaymentServlet"},
  dispatcherTypes={DispatcherType.REQUEST}
)
public class PaymentFilter implements Filter {
. . .

                                                                            15
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(); //marks completion
                                                                                 16
 http://blogs.sun.com/arungupta/entry/totd_139_asynchronous_request_processing
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                 17
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

                                                                          18
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
                                                  19
EJB 3.1 (JSR 318)
    Package & Deploy in a WAR
          Java EE 5                                        Java EE 6
                                                       foo.war
    foo.ear
                                                       WEB-INF/classes
      foo_web.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

      foo_ejb.jar
      com.sun.FooBean                                      web.xml ?
      com.sun.FooHelper


http://blogs.sun.com/arungupta/entry/totd_95_ejb_3_1
                                                                             20
EJB 3.1

@Stateless
public class App {
    public String sayHello(String name) {
        return "Hello " + name;
    }
}




                                            21
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




                                            22
Java EE 6 Namespaces
   Global
       java:global/..(for all applications)
   Application scoped
       java:app/.. (visibile only for the app.)
       App-1 binds an Object by name
        “java:app/myObject”, App-2 cannot
        see it.
       All modules of the app has visibility.
           mod-1, mod-2 of app-1 can see “java:app/myObject”
                                                            23
Java EE 6 Namespaces
   Module Scoped
       java:module/.. (visible only for the
        module)
       App-1 has module-1 and module-2
        
            Module-1's namespace not accessible by module-2
       All components of the module has
        visibility
   Component
                                                         24
EJB 3.1
Portable Global JNDI Name Syntax
   Portable
   Global
   Application/Module-scoped
   Derived from metadata such as name,
     component name etc.




                                          25
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
                                     Annotation/name attribute
• Until now, only java:comp                  Or ejb-jar.xml
• Local & Remote business
• No-interface
• Also in java:app, java:module
                                                                       26
EJB 3.1
 Portable Global JNDI Name Syntax

     package com.acme;
     @Stateless
     public class FooBean implements Foo { ... }
    FooBean is packaged in fooejb.jar
java:global/fooejb/FooBean
java:global/fooejb/FooBean!com.acme.Foo
java:app/fooejb/FooBean
java:app/fooejb/FooBean!com.acme.Foo
java:module/FooBean
java:module/FooBean!com.acme.Foo
                                                   27
EJB 3.1
     Embeddable API – Deploy the Bean


     public 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

                                                                                         28
Screencast
JSP, Servlets, EJB


                     29
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
       Always supports concurrent access
       Define initialization ordering using @DependsOn
    @Singleton
    public class MyEJB {
      . . .
                                                        30
    }
EJB 3.1
Asynchronous Session Beans
   Control returns to the client before the
     container dispatches 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
                                               31
EJB 3.1
Asynchronous Session Beans – Code Sample
 @Stateless
 @Asynchronous
 public 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
                                                                    32
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 & 2 am
        (minute=”*/14”, hour=”1,2”)
                                                             33
EJB 3.1
 Timers
 Single     persistent timer across JVMs
   Automatically created EJB Timers
       @Schedule(hour=”15”,dayOfWeek=”Fri”)

   Can be chained
       @Schedules({
           @Schedule(hour=”6”,dayOfWeek=”Tue,Thu,Fri-Sun”),
            @Schedule(hour=”12”,dayOfWeek=”Mon,Wed”)
        })

   May be associated with a TimeZone
   Non-persistent timer, e.g. Cache
       @Schedule(..., persistent=false)               34
EJB 3.1
EJB 3.1 Lite – Feature Comparison




                                    35
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

                                                                36
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>                            37
Managed Beans 1.0 - Sample
@javax.annotation.ManagedBean                              @Resource
public class MyManagedBean {                               MyManagedBean bean;
  @PostConstruct
  public void setupResources() {
    // setup your resources
  }                                                        @Inject
                                                           MyManagedBean bean;
    @PreDestroy
    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
                                                                             38
Java Persistence API 2 (JSR
     317)
     Sophisticated mapping/modeling options
   Collection of basic types

@Entity
public class Person {
    @Id protected String ssn;
    protected String name;
    protected Date birthDate;
    . . .
    @ElementCollection
    @CollectionTable(name=”ALIAS”)
    protected Set<String> nickNames;
}
                                              39
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;
    . . .
}                                                  40
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;
      @Embedded
      ContactInfo contactInfo;
      . . .                                  41
}
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;
        . . .
    }
                                              42
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
                                                     43
Java Persistence API 2
    Metamodel Example
@Entity
public 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;
}
                                                                44
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

                                                         45
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]
                                                           46
Screencast - JPA


                   47
@DataSourceDefinition
@DataSourceDefinition(
name="java:global/MyApp/MyDataSource",
className="org.apache.derby.jdbc.ClientDataSource"
databaseName=”testdb”,
serverName=”localhost”,
portNumber=”1527”,
user="dbuser",
password="dbpassword" )

• Equivalents in DDs as <datasource-definition> element
• Can be defined in Servlet, EJB, Managed Beans,
Application Client and their DDs.
• Can be defined in 'global', 'app', 'module', 'comp'
scopes
                                                          48
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
                                                     49
Interceptors 1.1 - Code
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyInterceptorBinding {
}


@Interceptor
@MyInterceptorBinding
public class MyInterceptor {
  @AroundInvoke
  public Object intercept(InvocationContext context) {
    System.out.println(context.getMethod.getName());
    System.out.println(context.getParameters());
    Object result = context.proceed();

      return result;
  }                                               50
 . . .
Interceptors 1.1 – Sample
  Code
@Interceptors(MyInterceptor.class)
public class MyManagedBean {
  . . .
}

@Inject
MyManagedBean bean;




http://blogs.sun.com/arungupta/entry/totd_134_interceptors_1_1
                                                                 51
Interceptors 1.1 – Sample
 Code
@MyInterceptorBinding
public class MyManagedBean {
  . . .
}
                                   Single instance of
                                    Interceptor per
                                 target class instance
public class MyManagedBean {
  @Interceptors(MyInterceptor.class)
  public String sayHello(String name) {
    . . .
  }
}



                                                  52
Interceptors 1.1 – Sample
    Code
@Named
@Interceptors(MyInterceptor.class)
public class MyManagedBean {
  . . .


    @Interceptors(AnotherInterceptor.class)
    @ExcludeDefaultInterceptors
    @ExcludeClassInterceptors
    public void someMethod() {
      . . .
    }
}



                                              53
Java Server Faces 2.0
   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>                                                            54
      </html>
JSF 2 Composite Components




                         55
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.xhtml

http://blogs.sun.com/arungupta/entry/totd_135_jsf2_custom_components
                                                                       56
Screencast - JSF


                   57
Contexts & Dependency
    Injection – CDI (JSR 299)
   Type-safe Dependency Injection
       No String-based identifiers
       Selected at development/deployment time
   Strong typing, Loose coupling
   Context & Scope management - extensible
   Works with Java EE modular and
    component architecture
       Integration with Unified Expression Language (UEL)
                                                        58
CDI
Injection Points
   Field, Method, Constructor
   0 or more qualifiers
   Type                      Which one ?
                               (Qualifier)




                @Inject @LoggedIn User user
    Request                             What ?
    Injection                           (Type)
                                                 59
CDI – Sample Client Code
    Field and Method Injection

public class CheckoutHandler {

    @Inject @LoggedIn User user;

    @Inject PaymentProcessor processor;

    @Inject void setShoppingCart(@Default Cart cart) {
       …
    }

}




                                                    60
CDI – Sample Client Code
 Constructor Injection

public class CheckoutHandler {

    @Inject
    CheckoutHandler(@LoggedIn User user,
                    PaymentProcessor processor,
                    @Default Cart cart) {
      ...
    }

}




• Only one constructor can have @Inject
                                                  61
CDI - Sample Client Code
Multiple Qualifiers and Qualifiers with Arguments

public class CheckoutHandler {

    @Inject
    CheckoutHandler(@LoggedIn User user,
                    @Reliable
                    @PayBy(CREDIT_CARD)
                    PaymentProcessor processor,
                    @Default Cart cart) {
      ...
    }

}



                                                    62
CDI - Scopes
   Beans can be declared in a scope
       Everywhere: @ApplicationScoped, @RequestScoped
       Web app: @SessionScoped
       JSF app: @ConversationScoped : begin(), end()
         
             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
                                                        63
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}”/>



                                                64
CDI - Events
    Even more decoupling
   Annotation-based event model
   A bean observes an event
void logPrintJobs(@Observes PrintEvent event){…}

   Another bean fires an event
    @Inject @Any Event<PrintEvent> myEvent;

    void doPrint() {
      . . .
      myEvent.fire(new PrintEvent());
    }

   Events can have qualifiers too
void logPrintJobs(@Observes @LargeFile PrintEvent event){…}
                                                       65
CDI
    Much more ...
   Producer methods and fields
   Alternatives
   Interceptors
   Decorators
   Stereotypes
   ...


                                  66
Screencast - CDI


                   67
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;
                                                       68
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|
                                                            69
         update|remove]
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>




                                                                    70
JAX-RS 1.1

   Java API for building RESTful Web Services
   POJO based
   Annotation-driven
   Server-side API
   HTTP-centric



                                           71
JAX-RS 1.1
    Code 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!”;
      }
}

                                     72
JAX-RS 1.1
    Code 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() {
                                    . . .
                                  }
                                                              73
JAX-RS 1.1
 Code Sample – Specifying Input MIME type

@POST
@Consumes("text/plain")
public String saveMessage() {
    . . .
}




                                            74
JAX-RS 1.1
    Code Sample
import javax.inject.Inject;
import javax.enterprise.context.RequestScoped;

@RequestScoped
public class ActorResource {
    @Inject DatbaseBean db;

      public Actor getActor(int id) {
          return db.findActorById(id);
      }
}




                                                 75
JAX-RS 1.1
    Code Sample
import   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}")
@RequestScoped
public 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
                                                                            76
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>




                                                                                          77
Screencast - JAX-RS


                      78
GlassFish Distributions
Distribution              License      Features

GlassFish Open Source     CDDL &       • Java EE 6 Compatibility
Edition 3.0.1             GPLv2        • No Clustering
                                       • Clustering planned in 3.1
                                       • mod_jk for load balancing
GlassFish Open Source     CDDL &       • Java EE 5 Compatibility
Edition 2.1.1             GPLv2        • In memory replication
                                       • mod_loadbalancer
Oracle GlassFish Server   Commercial   • GlassFish Open Source Edition 3.0.1
                                                                             Clustering
3.0.1                                  • Oracle GlassFish Server Control      Coming
                                       • Clustering planned in 3.1             Soon!
Oracle GlassFish Server   Commercial   • GlassFish Open Source Edition 2.1.1
2.1.1                                  • Enterprise Manager
                                       • HADB




                                                                                 79
GlassFish 3 & OSGi
   No OSGi APIs are used in GlassFish
         HK2 provides abstraction layer
   All GlassFish modules are OSGi bundles
   Felix is default, also runs on Knopflerfish & Equinox
         Can run in an existing shell
         200+ modules in v3




    http://blogs.sun.com/arungupta/entry/totd_103_glassfish_v3_with

                                                                      80
Light Weight & On-demand
     Monitoring
   Event-driven light-weight and non-intrusive
    monitoring
   Modules provide domain specific probes
    (monitoring events)
    • EJB, Web, Connector, JPA, Jersey, Orb, Ruby
   End-to-end monitoring on Solaris using
    DTrace
   3rd party scripting clients
    • JavaScript to begin with                      81
Boost your productivity
    Retain session across deployment
asadmin redeploy –properties keepSessions=true helloworld.war




                                                                82
Boost your productivity
Deploy-on-Save




                          83
GlassFish Roadmap Detail




                                            84
  84
©2010 Oracle Corporation
GlassFish 3.1 = 3.0 + 2.1.1
   Main Features
       Clustering and Centralized Administration
       High Availability
   Other ...
       Application Versioning
       Application-scoped Resources
       SSH-based remote management and monitoring
       Embedded (extensive)
       Admin Console based on RESTful API

     http://wikis.sun.com/display/glassfish/GlassFishv3.1
                                                            85
References & Queries
   download.oracle.com/javaee/6/tutorial/doc
   glassfish.org
   blogs.sun.com/theaquarium
   oracle.com/goto/glassfish
   glassfish.org/roadmap
   youtube.com/user/GlassFishVideos
   Follow @glassfish
   users@glassfish.java.net
   dev@glassfish.java.net
                                                86
Jagadish.Ramu@Sun.COM
                       Sun Microsystems
Thank You !




                                  87

More Related Content

What's hot (19)

PDF
JavaOne India 2011 - Servlets 3.0
Arun Gupta
 
PDF
Introduction to java servlet 3.0 api javaone 2008
JavaEE Trainers
 
PDF
Java EE 6 & GlassFish v3 @ DevNexus
Arun Gupta
 
PDF
Java EE 6 : Paving The Path For The Future
IndicThreads
 
PDF
The Java EE 7 Platform: Productivity++ & Embracing HTML5
Arun Gupta
 
DOC
Sel study notes
Lalit Singh
 
PDF
Java EE 6 & GlassFish v3 at Vancouver JUG, Jan 26, 2010
Arun Gupta
 
KEY
Ejb 3.0 Runtime Environment
rradhak
 
PDF
Introduction to java servlet 3.0 api javaone 2009
JavaEE Trainers
 
PDF
Java EE 6 = Less Code + More Power
Arun Gupta
 
PDF
Maven 3… so what?
Abel Muíño
 
PDF
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
Skills Matter
 
PDF
Build system
Andrey Subbota
 
PDF
[스프링/Spring교육학원,자바교육,근로자교육,실업자교육추천학원_탑크리에듀]#6.스프링프레임워크 & 마이바티스 (Spring Framew...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
Arun Gupta
 
PDF
Running your Java EE 6 applications in the Cloud
Arun Gupta
 
PDF
ICEfaces EE - Enterprise-ready JSF Ajax Framework
ICEsoftTech
 
PDF
Testing Your Application On Google App Engine
IndicThreads
 
JavaOne India 2011 - Servlets 3.0
Arun Gupta
 
Introduction to java servlet 3.0 api javaone 2008
JavaEE Trainers
 
Java EE 6 & GlassFish v3 @ DevNexus
Arun Gupta
 
Java EE 6 : Paving The Path For The Future
IndicThreads
 
The Java EE 7 Platform: Productivity++ & Embracing HTML5
Arun Gupta
 
Sel study notes
Lalit Singh
 
Java EE 6 & GlassFish v3 at Vancouver JUG, Jan 26, 2010
Arun Gupta
 
Ejb 3.0 Runtime Environment
rradhak
 
Introduction to java servlet 3.0 api javaone 2009
JavaEE Trainers
 
Java EE 6 = Less Code + More Power
Arun Gupta
 
Maven 3… so what?
Abel Muíño
 
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Arun Gupta: London Java Community: Java EE 6 and GlassFish 3
Skills Matter
 
Build system
Andrey Subbota
 
[스프링/Spring교육학원,자바교육,근로자교육,실업자교육추천학원_탑크리에듀]#6.스프링프레임워크 & 마이바티스 (Spring Framew...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
Arun Gupta
 
Running your Java EE 6 applications in the Cloud
Arun Gupta
 
ICEfaces EE - Enterprise-ready JSF Ajax Framework
ICEsoftTech
 
Testing Your Application On Google App Engine
IndicThreads
 

Viewers also liked (20)

PDF
Mohyuddin
mohyuddin88
 
PPT
ESN L'INCHIOSTRO
Irecoop Toscana
 
PPSX
Asociatia creativ prezentare-sala-training
Alex Diaconu
 
PDF
Science item collection
Xiomara Jones
 
PDF
Strategic global engagement and institutional partnerships caie 2010
CBIE
 
PDF
Finn-ID RFID-kiertueella 2010: case Honkarakenne
Finn-ID Oy
 
PPT
Funda gürbüz(twitter)
funda91
 
PPT
Het Nieuwe Werken voor Essent
ODINNNL
 
PDF
Pure fast001
dflexer
 
PPTX
fête de la queimada Fernández Lara
kedougou
 
PPT
罗兰贝格战略采购报告(Ppt 112)
datoufa
 
PPT
ESN CTE 1
Irecoop Toscana
 
PPTX
Natural resources
dianaisabel1375
 
PPTX
To upload a power point
ecsmedia
 
PDF
BALWOIS_2012
D Kannan
 
PPT
какой ты анимешник.
Hibelli
 
PDF
Social Media Marketing A Practioner's Guide
nickthorneltd
 
PDF
Libro windows 7 reti sicurezza tecniche avanzate
Libro Windows 7
 
Mohyuddin
mohyuddin88
 
ESN L'INCHIOSTRO
Irecoop Toscana
 
Asociatia creativ prezentare-sala-training
Alex Diaconu
 
Science item collection
Xiomara Jones
 
Strategic global engagement and institutional partnerships caie 2010
CBIE
 
Finn-ID RFID-kiertueella 2010: case Honkarakenne
Finn-ID Oy
 
Funda gürbüz(twitter)
funda91
 
Het Nieuwe Werken voor Essent
ODINNNL
 
Pure fast001
dflexer
 
fête de la queimada Fernández Lara
kedougou
 
罗兰贝格战略采购报告(Ppt 112)
datoufa
 
ESN CTE 1
Irecoop Toscana
 
Natural resources
dianaisabel1375
 
To upload a power point
ecsmedia
 
BALWOIS_2012
D Kannan
 
какой ты анимешник.
Hibelli
 
Social Media Marketing A Practioner's Guide
nickthorneltd
 
Libro windows 7 reti sicurezza tecniche avanzate
Libro Windows 7
 
Ad

Similar to Java EE 6 - Deep Dive - Indic Threads, Pune - 2010 (20)

PDF
Boston 2011 OTN Developer Days - Java EE 6
Arun Gupta
 
PDF
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Arun Gupta
 
PDF
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ JAX London ...
Arun Gupta
 
PDF
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
Arun Gupta
 
PPT
Servlet 3.0
Minh Hoang
 
PDF
Java EE 6 & GlassFish v3: Paving the path for the future - Spark IT 2010
Arun Gupta
 
PPTX
JAX-RS 2.0 and OData
Anil Allewar
 
PPT
JEE5 New Features
Haitham Raik
 
PPT
J boss
jrfx448
 
PDF
Java Enterprise Edition 6 Overview
Eugene Bogaart
 
PDF
Spark IT 2011 - Java EE 6 Workshop
Arun Gupta
 
PDF
Spring into rails
Hiro Asari
 
PDF
Jsf Framework
Marimuthu Udayakumar
 
PDF
Java EE7 Demystified
Ankara JUG
 
PPTX
struts unit best pdf for struts java.pptx
ozakamal8
 
PPTX
struts unit best pdf for struts java.pptx
ozakamal8
 
ODP
Java Spring MVC Framework with AngularJS by Google and HTML5
Tuna Tore
 
ODP
springmvc-150923124312-lva1-app6892
Tuna Tore
 
ODP
Java EE 6 & GlassFish v3: Paving path for the future
Arun Gupta
 
PPTX
SCWCD : Servlet web applications : CHAP 3
Ben Abdallah Helmi
 
Boston 2011 OTN Developer Days - Java EE 6
Arun Gupta
 
Java EE 6 & GlassFish = Less Code + More Power @ DevIgnition
Arun Gupta
 
Java EE 6 & GlassFish 3: Light-weight, Extensible, and Powerful @ JAX London ...
Arun Gupta
 
Servlets 3.0 - Asynchronous, Easy, Extensible @ Silicon Valley Code Camp 2010
Arun Gupta
 
Servlet 3.0
Minh Hoang
 
Java EE 6 & GlassFish v3: Paving the path for the future - Spark IT 2010
Arun Gupta
 
JAX-RS 2.0 and OData
Anil Allewar
 
JEE5 New Features
Haitham Raik
 
J boss
jrfx448
 
Java Enterprise Edition 6 Overview
Eugene Bogaart
 
Spark IT 2011 - Java EE 6 Workshop
Arun Gupta
 
Spring into rails
Hiro Asari
 
Jsf Framework
Marimuthu Udayakumar
 
Java EE7 Demystified
Ankara JUG
 
struts unit best pdf for struts java.pptx
ozakamal8
 
struts unit best pdf for struts java.pptx
ozakamal8
 
Java Spring MVC Framework with AngularJS by Google and HTML5
Tuna Tore
 
springmvc-150923124312-lva1-app6892
Tuna Tore
 
Java EE 6 & GlassFish v3: Paving path for the future
Arun Gupta
 
SCWCD : Servlet web applications : CHAP 3
Ben Abdallah Helmi
 
Ad

More from Jagadish Prasath (8)

PDF
Java EE 7 in practise - OTN Hyderabad 2014
Jagadish Prasath
 
PDF
JAX RS 2.0 - OTN Bangalore 2013
Jagadish Prasath
 
PDF
What's new in JMS 2.0 - OTN Bangalore 2013
Jagadish Prasath
 
PDF
Experiences in building a PaaS Platform - Java One SFO 2012
Jagadish Prasath
 
PDF
PaaS enabling Java EE applications through service meta-data and policies - J...
Jagadish Prasath
 
PDF
PaaSing a Java EE Application
Jagadish Prasath
 
PDF
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
Jagadish Prasath
 
PDF
Connector Architecture 1.6 - Tech-days 2010, Hyderabad.
Jagadish Prasath
 
Java EE 7 in practise - OTN Hyderabad 2014
Jagadish Prasath
 
JAX RS 2.0 - OTN Bangalore 2013
Jagadish Prasath
 
What's new in JMS 2.0 - OTN Bangalore 2013
Jagadish Prasath
 
Experiences in building a PaaS Platform - Java One SFO 2012
Jagadish Prasath
 
PaaS enabling Java EE applications through service meta-data and policies - J...
Jagadish Prasath
 
PaaSing a Java EE Application
Jagadish Prasath
 
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
Jagadish Prasath
 
Connector Architecture 1.6 - Tech-days 2010, Hyderabad.
Jagadish Prasath
 

Recently uploaded (20)

PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 

Java EE 6 - Deep Dive - Indic Threads, Pune - 2010

  • 1. Jagadish Ramu Sun Microsystems Java EE 6 - Deep Dive 1
  • 2. The following/preceding is intended to outline our general product direction. It is intended for information 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. 2
  • 3. Compatible Java EE 6 Impls Today: Announced: 3
  • 4. Goals for the Java EE 6 Platform  Flexible & Light-weight  Web Profile 1.0  Pruning: JAX-RPC, EJB 2.x Entity Beans, JAXR, JSR 88  Extensible • Embrace Open Source Frameworks  Easier to use, develop on • Continue on path set by Java EE 5 4
  • 5. Java EE 6 Web Profile 1.0  Fully functional mid-sized profile • Actively discussed in the Java EE 6 Expert Group and outside it • Technologies • Servlets 3.0, JSP 2.2, EL 2.2, Debugging Support for Other Languages 1.0, JSTL 1.2, JSF 2.0, Common Annotations 1.1, EJB 3.1 Lite, JTA 1.1, JPA 2.0, Bean Validation 1.0, Managed Beans 1.0, Interceptors 1.1, Context & Dependency Injection 1.0, Dependency Injection for Java 1.0 5
  • 6. Java EE 6 - Done 09  Specifications approved by the JCP  Reference Implementation is GlassFish v3 20  TCK ec D 6
  • 7. Java EE 6 Specifications  The Platform  Java EE 6 Web Profile 1.0  Managed Beans 1.0 7
  • 8. 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) 8
  • 9. 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) 9
  • 10. 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) 10
  • 11. Servlets in Java EE 5 At least 2 files <!--Deployment descriptor /* Code in Java Class */ web.xml --> package com.sun; <web-app> public class MyServlet extends <servlet> HttpServlet { <servlet-name>MyServlet public void doGet(HttpServletRequest </servlet-name> req,HttpServletResponse res) <servlet-class> com.sun.MyServlet { </servlet-class> ... </servlet> <servlet-mapping> } <servlet-name>MyServlet </servlet-name> ... <url-pattern>/myApp/* </url-pattern> } </servlet-mapping> ... </web-app> 11
  • 12. Servlets 3.0 (JSR 315) Annotations-based @WebServlet package 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/totd_81_getting_started_with 12
  • 13. Servlets 3.0 Annotations-based @WebServlet @WebServlet(name="mytest", urlPatterns={"/myurl"}, initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") } ) public class TestServlet extends javax.servlet.http.HttpServlet { .... 13 }
  • 14. Servlets 3.0 Annotations-based @WebListeners <listener> <listener-class> server.LoginServletListener </listener-class> </listener> package server; . . . @WebListener() public class LoginServletListener implements ServletContextListener { 14
  • 15. Servlets 3.0 Annotations-based @WebFilter <filter> <filter-name>PaymentFilter</filter-name> <filter-class>server.PaymentFilter</filter-class> <init-param> <param-name>param1</param-name> <param-value>value1</param-value> package server; </init-param> . . . </filter> @WebFilter( <filter-mapping> <filter-name>PaymentFilter</filter-name> filterName="PaymentFilter", <url-pattern>/*</url-pattern> InitParams={ </filter-mapping> @WebInitParam( <filter-mapping> <filter-name>PaymentFilter</filter-name> name="param1", <servlet-name>PaymentServlet</servlet-name> value="value1") <dispatcher>REQUEST</dispatcher> } </filter-mapping> urlPatterns={"/*"}, servletNames={"PaymentServlet"}, dispatcherTypes={DispatcherType.REQUEST} ) public class PaymentFilter implements Filter { . . . 15
  • 16. 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(); //marks completion 16 http://blogs.sun.com/arungupta/entry/totd_139_asynchronous_request_processing
  • 17. 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 17
  • 18. 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 18
  • 19. 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 19
  • 20. EJB 3.1 (JSR 318) Package & Deploy in a WAR Java EE 5 Java EE 6 foo.war foo.ear WEB-INF/classes foo_web.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 foo_ejb.jar com.sun.FooBean web.xml ? com.sun.FooHelper http://blogs.sun.com/arungupta/entry/totd_95_ejb_3_1 20
  • 21. EJB 3.1 @Stateless public class App { public String sayHello(String name) { return "Hello " + name; } } 21
  • 22. 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 22
  • 23. Java EE 6 Namespaces  Global  java:global/..(for all applications)  Application scoped  java:app/.. (visibile only for the app.)  App-1 binds an Object by name “java:app/myObject”, App-2 cannot see it.  All modules of the app has visibility.  mod-1, mod-2 of app-1 can see “java:app/myObject” 23
  • 24. Java EE 6 Namespaces  Module Scoped  java:module/.. (visible only for the module)  App-1 has module-1 and module-2  Module-1's namespace not accessible by module-2  All components of the module has visibility  Component 24
  • 25. EJB 3.1 Portable Global JNDI Name Syntax  Portable  Global  Application/Module-scoped  Derived from metadata such as name, component name etc. 25
  • 26. 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 Annotation/name attribute • Until now, only java:comp Or ejb-jar.xml • Local & Remote business • No-interface • Also in java:app, java:module 26
  • 27. EJB 3.1 Portable Global JNDI Name Syntax package com.acme; @Stateless public class FooBean implements Foo { ... }  FooBean is packaged in fooejb.jar java:global/fooejb/FooBean java:global/fooejb/FooBean!com.acme.Foo java:app/fooejb/FooBean java:app/fooejb/FooBean!com.acme.Foo java:module/FooBean java:module/FooBean!com.acme.Foo 27
  • 28. EJB 3.1 Embeddable API – Deploy the Bean public 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 28
  • 30. 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  Always supports concurrent access  Define initialization ordering using @DependsOn @Singleton public class MyEJB { . . . 30 }
  • 31. EJB 3.1 Asynchronous Session Beans  Control returns to the client before the container dispatches 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 31
  • 32. EJB 3.1 Asynchronous Session Beans – Code Sample @Stateless @Asynchronous public 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 32
  • 33. 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 & 2 am (minute=”*/14”, hour=”1,2”) 33
  • 34. EJB 3.1 Timers  Single persistent timer across JVMs  Automatically created EJB Timers  @Schedule(hour=”15”,dayOfWeek=”Fri”)  Can be chained  @Schedules({ @Schedule(hour=”6”,dayOfWeek=”Tue,Thu,Fri-Sun”), @Schedule(hour=”12”,dayOfWeek=”Mon,Wed”) })  May be associated with a TimeZone  Non-persistent timer, e.g. Cache  @Schedule(..., persistent=false) 34
  • 35. EJB 3.1 EJB 3.1 Lite – Feature Comparison 35
  • 36. 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 36
  • 37. 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> 37
  • 38. Managed Beans 1.0 - Sample @javax.annotation.ManagedBean @Resource public class MyManagedBean { MyManagedBean bean; @PostConstruct public void setupResources() { // setup your resources } @Inject MyManagedBean bean; @PreDestroy 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 38
  • 39. Java Persistence API 2 (JSR 317) Sophisticated mapping/modeling options  Collection of basic types @Entity public class Person { @Id protected String ssn; protected String name; protected Date birthDate; . . . @ElementCollection @CollectionTable(name=”ALIAS”) protected Set<String> nickNames; } 39
  • 40. 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; . . . } 40
  • 41. 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; @Embedded ContactInfo contactInfo; . . . 41 }
  • 42. 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; . . . } 42
  • 43. 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 43
  • 44. Java Persistence API 2 Metamodel Example @Entity public 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; } 44
  • 45. 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 45
  • 46. 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] 46
  • 48. @DataSourceDefinition @DataSourceDefinition( name="java:global/MyApp/MyDataSource", className="org.apache.derby.jdbc.ClientDataSource" databaseName=”testdb”, serverName=”localhost”, portNumber=”1527”, user="dbuser", password="dbpassword" ) • Equivalents in DDs as <datasource-definition> element • Can be defined in Servlet, EJB, Managed Beans, Application Client and their DDs. • Can be defined in 'global', 'app', 'module', 'comp' scopes 48
  • 49. 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 49
  • 50. Interceptors 1.1 - Code @InterceptorBinding @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface MyInterceptorBinding { } @Interceptor @MyInterceptorBinding public class MyInterceptor { @AroundInvoke public Object intercept(InvocationContext context) { System.out.println(context.getMethod.getName()); System.out.println(context.getParameters()); Object result = context.proceed(); return result; } 50 . . .
  • 51. Interceptors 1.1 – Sample Code @Interceptors(MyInterceptor.class) public class MyManagedBean { . . . } @Inject MyManagedBean bean; http://blogs.sun.com/arungupta/entry/totd_134_interceptors_1_1 51
  • 52. Interceptors 1.1 – Sample Code @MyInterceptorBinding public class MyManagedBean { . . . } Single instance of Interceptor per target class instance public class MyManagedBean { @Interceptors(MyInterceptor.class) public String sayHello(String name) { . . . } } 52
  • 53. Interceptors 1.1 – Sample Code @Named @Interceptors(MyInterceptor.class) public class MyManagedBean { . . . @Interceptors(AnotherInterceptor.class) @ExcludeDefaultInterceptors @ExcludeClassInterceptors public void someMethod() { . . . } } 53
  • 54. Java Server Faces 2.0  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> 54 </html>
  • 55. JSF 2 Composite Components 55
  • 56. 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.xhtml http://blogs.sun.com/arungupta/entry/totd_135_jsf2_custom_components 56
  • 58. Contexts & Dependency Injection – CDI (JSR 299)  Type-safe Dependency Injection  No String-based identifiers  Selected at development/deployment time  Strong typing, Loose coupling  Context & Scope management - extensible  Works with Java EE modular and component architecture  Integration with Unified Expression Language (UEL) 58
  • 59. CDI Injection Points  Field, Method, Constructor  0 or more qualifiers  Type Which one ? (Qualifier) @Inject @LoggedIn User user Request What ? Injection (Type) 59
  • 60. CDI – Sample Client Code Field and Method Injection public class CheckoutHandler { @Inject @LoggedIn User user; @Inject PaymentProcessor processor; @Inject void setShoppingCart(@Default Cart cart) { … } } 60
  • 61. CDI – Sample Client Code Constructor Injection public class CheckoutHandler { @Inject CheckoutHandler(@LoggedIn User user, PaymentProcessor processor, @Default Cart cart) { ... } } • Only one constructor can have @Inject 61
  • 62. CDI - Sample Client Code Multiple Qualifiers and Qualifiers with Arguments public class CheckoutHandler { @Inject CheckoutHandler(@LoggedIn User user, @Reliable @PayBy(CREDIT_CARD) PaymentProcessor processor, @Default Cart cart) { ... } } 62
  • 63. CDI - Scopes  Beans can be declared in a scope  Everywhere: @ApplicationScoped, @RequestScoped  Web app: @SessionScoped  JSF app: @ConversationScoped : begin(), end()  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 63
  • 64. 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}”/> 64
  • 65. CDI - Events Even more decoupling  Annotation-based event model  A bean observes an event void logPrintJobs(@Observes PrintEvent event){…}  Another bean fires an event @Inject @Any Event<PrintEvent> myEvent; void doPrint() { . . . myEvent.fire(new PrintEvent()); }  Events can have qualifiers too void logPrintJobs(@Observes @LargeFile PrintEvent event){…} 65
  • 66. CDI Much more ...  Producer methods and fields  Alternatives  Interceptors  Decorators  Stereotypes  ... 66
  • 68. 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; 68
  • 69. 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| 69 update|remove]
  • 70. 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> 70
  • 71. JAX-RS 1.1  Java API for building RESTful Web Services  POJO based  Annotation-driven  Server-side API  HTTP-centric 71
  • 72. JAX-RS 1.1 Code 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!”; } } 72
  • 73. JAX-RS 1.1 Code 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() { . . . } 73
  • 74. JAX-RS 1.1 Code Sample – Specifying Input MIME type @POST @Consumes("text/plain") public String saveMessage() { . . . } 74
  • 75. JAX-RS 1.1 Code Sample import javax.inject.Inject; import javax.enterprise.context.RequestScoped; @RequestScoped public class ActorResource { @Inject DatbaseBean db; public Actor getActor(int id) { return db.findActorById(id); } } 75
  • 76. JAX-RS 1.1 Code Sample import 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}") @RequestScoped public 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 76
  • 77. 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> 77
  • 79. GlassFish Distributions Distribution License Features GlassFish Open Source CDDL & • Java EE 6 Compatibility Edition 3.0.1 GPLv2 • No Clustering • Clustering planned in 3.1 • mod_jk for load balancing GlassFish Open Source CDDL & • Java EE 5 Compatibility Edition 2.1.1 GPLv2 • In memory replication • mod_loadbalancer Oracle GlassFish Server Commercial • GlassFish Open Source Edition 3.0.1 Clustering 3.0.1 • Oracle GlassFish Server Control Coming • Clustering planned in 3.1 Soon! Oracle GlassFish Server Commercial • GlassFish Open Source Edition 2.1.1 2.1.1 • Enterprise Manager • HADB 79
  • 80. GlassFish 3 & OSGi  No OSGi APIs are used in GlassFish  HK2 provides abstraction layer  All GlassFish modules are OSGi bundles  Felix is default, also runs on Knopflerfish & Equinox  Can run in an existing shell  200+ modules in v3 http://blogs.sun.com/arungupta/entry/totd_103_glassfish_v3_with 80
  • 81. Light Weight & On-demand Monitoring  Event-driven light-weight and non-intrusive monitoring  Modules provide domain specific probes (monitoring events) • EJB, Web, Connector, JPA, Jersey, Orb, Ruby  End-to-end monitoring on Solaris using DTrace  3rd party scripting clients • JavaScript to begin with 81
  • 82. Boost your productivity Retain session across deployment asadmin redeploy –properties keepSessions=true helloworld.war 82
  • 84. GlassFish Roadmap Detail 84 84 ©2010 Oracle Corporation
  • 85. GlassFish 3.1 = 3.0 + 2.1.1  Main Features  Clustering and Centralized Administration  High Availability  Other ...  Application Versioning  Application-scoped Resources  SSH-based remote management and monitoring  Embedded (extensive)  Admin Console based on RESTful API http://wikis.sun.com/display/glassfish/GlassFishv3.1 85
  • 86. References & Queries  download.oracle.com/javaee/6/tutorial/doc  glassfish.org  blogs.sun.com/theaquarium  oracle.com/goto/glassfish  glassfish.org/roadmap  youtube.com/user/GlassFishVideos  Follow @glassfish  [email protected][email protected] 86
  • 87. [email protected] Sun Microsystems Thank You ! 87