SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler offline
The Java EE 7 Platform:
Simplicity, Productivity and HTML 5
Sivakumar Thyagarajan
Oracle India
Disclaimer

  The following 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.
Java EE 6 Platform
December 10, 2009
Java EE 6 – Key Statistics
  40+ Million Java EE 6 Component Downloads
  #1 Choice for Enterprise Developers
  #1 Application Development Platform
  Fastest implementation of a Java EE release
Top Ten Features in Java EE 6
  1.    EJB packaging in a WAR
  2.    Type-safe dependency injection
  3.    Optional deployment descriptors (web.xml, faces-config.xml)
  4.    JSF standardizing on Facelets
  5.    One class per EJB
  6.    Servlet and CDI extension points
  7.    CDI Events
  8.    EJBContainer API
  9.    Cron-based @Schedule
  10.   Web Profile
Java EE 7 Revised Scope
Productivity and HTML5
• Higher Productivity
  – Less Boilerplate
  – Richer Functionality
  – More Defaults
• HTML5 Support
  – WebSocket
  – JSON
  – HTML5 Forms
Java EE 7 – Candidate JSRs

                                         JAX-RS                                        Java Caching API
 Portable   JSP 2.2        JSF 2.2         2.0
                                                      EL 3.0                              (JSR 107)
Extension




                                                               Bean Validation 1.1
    s                                                                                 Concurrency Utilities
                                 Servlet 3.1                                              (JSR 236)

  Common                                                                               Batch Applications
                Interceptors 1.1               CDI 1.1                                     (JSR 352)
Annotations 1.1
                                                                                       Java API for JSON
 Managed Beans 1.0                        EJB 3.2                                          (JSR 353)

Connector                                                                            Java API for WebSocket
                 JPA 2.1             JTA 1.2        JMS 2.0                                (JSR 356)
   1.7

   New      Major          Updated
            Release
Java API for RESTful Web Services 2.0
•   Client API
•   Message Filters & Entity Interceptors
•   Asynchronous Processing – Server & Client
•   Hypermedia Support
•   Common Configuration
Java API for RESTful Web Services 2.0
Client API - Before
String address = String.format("http://…/orders/%0$s/customer?shipped=%1$b",
"10", true);

URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(false);

BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
   //. . .
}
Java API for RESTful Web Services 2.0
Client API - Now
// Get instance of Client
Client client = ClientFactory.newClient();

// Get customer name for the shipped products
String name = client.target(“../orders/{orderId}/customer”)
             .resolveTemplate(”orderId", ”10”)
             .queryParam(”shipped", ”true”)
             .request()
             .get(String.class);
Java API for RESTful Web Services 2.0
 Filters
  @Provider
  class LoggingFilter implements ContainerRequestFilter {
     @Override
     public void filter(ContainerRequestContext context) {
       logRequest(ctx.getRequest());
       // non-wrapping => returns without invoking next filter
     }
  }
Java API for RESTful Web Services 2.0
 Client-side Async
 Client client = ClientFactory.newClient();
 Future<String> future = client.target("http://.../atm/{card}/balance")
                      .pathParam("card", "1111222233334444")
                      .queryParam("pin", "1234")
                      .request("text/plain")
                      .async()
                      .get(
                        new InvocationCallback<String>() {
                         public void completed(String result) {
                         }

                             public void failed(InvocationException e) {
                             }
                         }
                    );
Java Message Service 2.0
    Simplify the existing API
•   Less verbose
•   Reduce boilerplate code
•   Resource injection
•   Connection, Session, and other objects are AutoCloseable
•   Requires Resource Adapter for Java EE containers
•   Simplified API in both Java SE and EE
Java Message Service 2.0
Sending message using JMS 1.1
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;

@Resource(lookup = "java:global/jms/demoQueue")
Queue demoQueue;

public void sendMessage(String payload) {
  try {
    Connection connection = connectionFactory.createConnection();
    try {
       Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
       MessageProducer messageProducer = session.createProducer(demoQueue);
       TextMessage textMessage = session.createTextMessage(payload);                 13 lines of
       messageProducer.send(textMessage);                                            code just
    } finally {                                                                      to send a
       connection.close();                                                           message
    }
  } catch (JMSException ex) {
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
  }
}
Java Message Service 2.0
Sending message using JMS 1.1                                                must create several
 @Resource(lookup = "java:global/jms/demoConnectionFactory")
                                                                             intermediate objects
 ConnectionFactory connectionFactory;

 @Resource(lookup = "java:global/jms/demoQueue")
 Queue demoQueue;

 public void sendMessage(String payload) {
   try {
     Connection connection = connectionFactory.createConnection();
     try {
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        MessageProducer messageProducer = session.createProducer(demoQueue);
        TextMessage textMessage = session.createTextMessage(payload);
        messageProducer.send(textMessage);
     } finally {
        connection.close();
     }
   } catch (JMSException ex) {
     Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
   }
 }
Java Message Service 2.0
Sending message using JMS 1.1
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;                                                 redundant and
                                                                                     misleading
@Resource(lookup = "java:global/jms/demoQueue")                                      arguments
Queue demoQueue;

public void sendMessage(String payload) {
  try {
    Connection connection = connectionFactory.createConnection();
    try {
       Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
       MessageProducer messageProducer = session.createProducer(demoQueue);
       TextMessage textMessage = session.createTextMessage(payload);
       messageProducer.send(textMessage);
    } finally {
       connection.close();
    }
  } catch (JMSException ex) {
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
  }
}
Java Message Service 2.0
Sending message using JMS 1.1
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;

@Resource(lookup = "java:global/jms/demoQueue")
Queue demoQueue;
                                                                                     boilerplate
                                                                                     code
public void sendMessage(String payload) {
  try {
    Connection connection = connectionFactory.createConnection();
    try {
       Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
       MessageProducer messageProducer = session.createProducer(demoQueue);
       TextMessage textMessage = session.createTextMessage(payload);
       messageProducer.send(textMessage);
    } finally {
       connection.close();
    }
  } catch (JMSException ex) {
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
  }
}
Java Message Service 2.0
Sending message using JMS 1.1
 @Resource(lookup = "java:global/jms/demoConnectionFactory")
 ConnectionFactory connectionFactory;

 @Resource(lookup = "java:global/jms/demoQueue")
 Queue demoQueue;

 public void sendMessage(String payload) {
   try {
     Connection connection = connectionFactory.createConnection();
     try {
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        MessageProducer messageProducer = session.createProducer(demoQueue);
        TextMessage textMessage = session.createTextMessage(payload);
        messageProducer.send(textMessage);                                    must close
     } finally {                                                              resources
        connection.close();
                                                                              after use!
     }
   } catch (JMSException ex) {
     Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
   }
 }
Java Message Service 2.0
Sending message using JMS 1.1
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;

@Resource(lookup = "java:global/jms/demoQueue")
Queue demoQueue;

public void sendMessage(String payload) {
  try {
    Connection connection = connectionFactory.createConnection();
    try {
       Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
       MessageProducer messageProducer = session.createProducer(demoQueue);
       TextMessage textMessage = session.createTextMessage(payload);            all methods
       messageProducer.send(textMessage);                                       throw checked
    } finally {                                                                 exceptions
       connection.close();
    }
  } catch (JMSException ex) {
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
  }
}
Java Message Service 2.0
Sending message using JMS 1.1
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;
                                                                                     pre-create app-
@Resource(lookup = "java:global/jms/demoQueue")                                      server specific
Queue demoQueue;                                                                     resources
public void sendMessage(String payload) {
  try {
    Connection connection = connectionFactory.createConnection();
    try {
       Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
       MessageProducer messageProducer = session.createProducer(demoQueue);
       TextMessage textMessage = session.createTextMessage(payload);
       messageProducer.send(textMessage);
    } finally {
       connection.close();
    }
  } catch (JMSException ex) {
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
  }
}
Java Message Service 2.0
Simpler API to close JMS objects                                   Create closeable
                                                                   resources in a try-
@Resource(lookup = "jms/connFactory")
                                                                   with-resources block
ConnectionFactory cf;
@Resource(lookup="jms/inboundQueue")
Destination dest;

public void sendMessage (String payload) throws JMSException {
  try ( Connection conn = connectionFactory.createConnection();
        Session session = conn.createSession();
        MessageProducer producer = session.createProducer(dest);
  ){
     Message mess = sess.createTextMessage(payload);
     producer.send(mess);
  } catch(JMSException e){                                             close() is called
     // exception handling                                             automatically
  }                                                                    at end of block
}
Java Message Service 2.0
Introducing JMSContext and JMSProducer                             JMSContext
                                                                   combines
                                                                   Connection
                                                                   and Session
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;
                                                                       Payload
@Resource(lookup = "java:global/jms/demoQueue")                        can be sent
Queue demoQueue;                                                       directly
public void sendMessage (String payload) {
  try (JMSContext context = connectionFactory.createContext();){
    context.createProducer().send(demoQueue, payload);
  } catch (JMSRuntimeException ex) {
    // exception handling
  }                                                                close() is called
}                                                                  automatically
                                                  No checked       at end of block
                                                  exceptions
                                                  thrown
Java Message Service 2.0
                                                  Default resource definition
Default resource definition                                   Or
                                                  @JmsConnectionFactory
@Inject
JMSContext context;

@Resource(lookup = "java:global/jms/demoQueue”)
Queue demoQueue;

public void sendMessage(String payload) {
  context.createProducer().send(demoQueue, payload);
}
                                                      13 lines 1 line
Java API for JSON Processing 1.0
• API to parse and generate JSON
• Streaming API
  – Low-level, efficient way to parse/generate JSON
  – Provides pluggability for parsers/generators
• Object Model
  – Simple, easy-to-use high-level API
  – Implemented on top of Streaming API
• Binding JSON to Java objects forthcoming
Java API for JSON Processing 1.0
  Streaming API – JsonParser and JsonGenerator
  • JsonParser
     • Parses JSON in a streaming way from input sources
     • Similar to StaX’s XMLStreamReader, a pull parser
     • Created using
        • Json.createParser(…)
        • Json.createParserFactory().createParser(…)
     • Parser state events
        • START_ARRAY, END_ARRAY, START_OBJECT, END_OBJECT, ...
Java API for JSON Processing 1.0
  Streaming API – JsonParser and JsonGenerator
  • JsonGenerator
     • Generates JSON in a streaming way to output sources
        • Similar to StaX’s XMLStreamWriter
     • Created using
        • Json.createGenerator(…)
        • Json.createGeneratorFactory().createGenerator(…)
     • Optionally, configured with features
        • E.g. for pretty printing
Java API for JSON Processing 1.0
   Streaming API – JsonGenerator
                                 JsonGenerator jg = Json.createGenerator(…);

                                 jg.
"phoneNumber": [                   .beginArray("phoneNumber")
   {                                 .beginObject()
      "type": "home",                  .add("type", "home")
      "number": ”408-123-4567”         .add("number", "408-123-4567")
   },                                .endObject()
   {                                 .beginObject()
      "type": ”work",                  .add("type", ”work")
      "number": ”408-987-6543”         .add("number", "408-987-6543")
   }                                 .endObject()
 ]                                 .endArray();
                                 jg.close();
Java API for JSON Processing 1.0
  Object Model API
  • JsonObject/JsonArray – JSON object and array
    structures
     • JsonString and JsonNumber for string and number values
  • JsonBuilder – Builds JsonObject and JsonArray
  • JsonReader – Reads JsonObject and JsonArray from
    input source
  • JsonWriter – Writes JsonObject and JsonArray to output
    source
Java API for JSON Processing 1.0
    DOM API – JsonReader
• Reads JsonObject and JsonArray from input source
    – I/O Reader, InputStream (+ encoding)
• Optionally, configured with features
• Uses pluggable JsonParser

// Reads a JSON object
try(JsonReader reader = new JsonReader(io)) {
    JsonObject obj = reader.readObject();
}
Java API for WebSocket 1.0


  • Create WebSocket Client/Endpoints
     • Annotation-driven (@WebSocketEndpoint)
     • Interface-driven (Endpoint)
  • Integration with Java EE Web container
Java API for WebSocket 1.0
 Hello World – POJO/Annotation-driven
  import javax.net.websocket.annotations.*;

  @WebSocketEndpoint("/hello")
  public class HelloBean {

      @WebSocketMessage
      public String sayHello(String name) {
        return “Hello “ + name;
      }
  }
Java API for WebSocket 1.0
 WebSocket Annotations
       Annotation        Level                         Purpose

  @WebSocketEndpoint      class    Turns a POJO into a WebSocket Endpoint


  @WebSocketOpen         method    Intercepts WebSocket Open events

  @WebSocketClose        method    Intercepts WebSocket Close events


  @WebSocketMessage      method    Intercepts WebSocket Message events


                         method
  @WebSocketPathParam   parameter
                                  Flags a matched path segment of a URI-template


  @WebSocketError        method    Intercepts errors during a conversation
Java API for WebSocket 1.0

   @WebSocketEndpoint Attributes
                                   Relative URI or URI template
         value               e.g. “/hello” or “/chat/{subscriber-level}”

       decoders               list of message decoder classnames

       encoders               list of message encoder classnames

      subprotocols       list of the names of the supported subprotocols
Bean Validation 1.1
 Open: Spec, Reference Implementation, TCK
 Alignment with Dependency Injection
 Method-level validation
   Constraints on parameters and return values
   Check pre-/post-conditions
Bean Validation 1.1
   Method Parameter and Result Validation
           public void placeOrder(
                @NotNull String productName,
Built-in
                @NotNull @Max(“10”) Integer quantity,
Custom          @Customer String customer) {
                  //. . .
           }

           @Future
           public Date getAppointment() {
             //. . .
           }
Batch Applications for the Java Platform 1.0
  • Suited for non-interactive, bulk-oriented and long-
    running tasks
  • Computationally intensive
  • Can execute sequentially/parallel
  • May be initiated
    • Adhoc
    • Scheduled
       • No scheduling APIs included
Batch Applications for the Java Platform 1.0
  Concepts
   • Job: Entire batch process
     – Put together through a Job Specification Language (XML)
   • Step: Independent, sequential phase of a job
     – ItemReader: Retrieval of input for a step, one at a time
     – ItemProcessor: Business processing of an item
     – ItemWriter: Output of an item, chunks of items at a time
   • JobOperator: Manage batch processing
   • JobRepository: Metadata for jobs
Batch Applications for the Java Platform 1.0
  Job Specification Language – Simple Job
  <job id=“myJob”>
   <step id=“init”>
     <chunk reader=“R” writer=W” processor=“P” />
     <next on=“initialized” to=“process”/>
     <fail on=“initError”/>
   </step>
   <step id=“process”>
     <batchlet ref=“ProcessAndEmail”/>
      <end on=”success”/>
      <fail on=”*” exit-status=“FAILURE”/>
   </step>
  </job>
Java Temporary Caching API 1.0
 • API and semantics for temporary, in-memory caching of
   Java objects
 • SPI for implementers
 • Designed to support “local” and “distributed” caching
 • Caching strategies supported
   By value (default)
   By reference (not suitable for “distributed” caching)
Java Temporary Caching API 1.0
 • javax.cache.*
 • Delivered as part of Java EE 7
   • Immediately usable by Java EE 6, Spring and Guice
   • Immediately usable by any Java app
 • Not a Data Grid specification
   • JSR 107 does not mandate a topology
   • JSR 347 does: builds on JSR 107
Java Temporary Caching API 1.0
  Key Concepts
  Cache Manager =>Caches
  Cache => Entries
  Entry => Key,Value

  • CacheManager acquired via CacheManagerFactory
  • CacheManagerFactory acquired via Service Provider
    META-INF/services/javax.cache.spi.CachingProvider
Java Temporary Caching API 1.0
  Code Sample – Blog
  public class BlogManager {
   @CachePut(cacheName=”blogManager”)
   public void createEntry(
       @CacheKeyParam String title,
       @CacheValue Blog blog) {...}

   ...
Java Temporary Caching API 1.0
  Code Sample – Blog
   ...

   @CacheResult(cacheName="blogManager")
   public Blog getBlogEntry(String title) {...}

   @CacheResult(cacheName="blogManager")
   public Blog getEntryCached(
    String randomArg,
    @CacheKeyParam String title) {...}

   ...
Java Temporary Caching API 1.0
  Annotations – Blog Sample
      ...

      @CacheRemoveEntry(cacheName="blogManager")
      public void removeBlogEntry(String title) {...}

      @CacheRemoveAll(cacheName="blogManager")
      public void removeAllBlogs() {...}
  }
Java Persistence API 2.1
  Schema Generation
  Unsynchronized Persistence Contexts
  Converters
  Bulk update/delete using Criteria
  User-defined functions using FUNCTION
  Stored Procedure Query
Enterprise JavaBeans 3.2
  EJBs Today
  •   @Singleton
  •   @Asynchronous
  •   @Schedule
  •   Portable JNDI Name
  •   EJBContainer.createEJBContainer
  •   EJB 3.1 Lite
Enterprise JavaBeans 3.2
 Updates: Opt-out passivation of Stateful Session Beans
   @Stateful(passivationCapable=false)
   public class HelloBean {
     private NonSerializableType ref = …;

       …
   }
Enterprise JavaBeans 3.2
  Updates: Simplified Rules for Local/Remote Client Views
      @Stateless
      public class Bean implements Foo, Bar {
      }
                                                Local

      @Local @Stateless
      public class Bean implements Foo, Bar {
      }
                                                Remote

    @Remote @Stateless
    public class Bean implements Foo, Bar {
    }
Enterprise JavaBeans 3.2
  Updates: Simplified Rules for Local/Remote Client Views

  @Remote
  public interface Foo { . . . }

  public interface Bar { . . . ]            Remote

  @Stateless
  public class Bean implements Foo, Bar {
  }
Servlet 3.1

  Non-blocking I/O
  Protocol Upgrade
  Security Enhancements
Servlet 3.1
  Non-blocking IO - Traditional
  public class TestServlet extends HttpServlet
    protected void doGet(HttpServletRequest request,
                    HttpServletResponse response)
               throws IOException, ServletException {
      ServletInputStream input = request.getInputStream();
      byte[] b = new byte[1024];
      int len = -1;
      while ((len = input.read(b)) != -1) {
        ...
      }
    }
  }
Servlet 3.1
  Non-blocking I/O: doGet Code Sample


  AsyncContext context = request.startAsync();
  ServletInputStream input = request.getInputStream();
  input.setReadListener(
     new MyReadListener(input, context));
Servlet 3.1
  Non-blocking I/O: MyReadListener Code Sample
  @Override
  public void onDataAvailable() {
    try {
      StringBuilder sb = new StringBuilder();
      int len = -1;
      byte b[] = new byte[1024];
      while (input.isReady() && (len = input.read(b)) != -1) {
        String data = new String(b, 0, len);
        System.out.println("--> " + data);
      }
    } catch (IOException ex) {
      ...
    }
  }
  ...
Servlet 3.1
  Non-blocking I/O: MyListener Code Sample
  ...
  @Override
  public void onAllDataRead() {
    context.complete();
  }

  @Override
  public void onError(Throwable t) {
    t.printStackTrace();
    context.complete();
  }
Concurrency Utilities for Java EE 1.0
  Goals
  • Provide concurrency capabilities to Java EE application
    components
    • Without compromising container integrity
  • Support simple (common) and advanced concurrency
    patterns
  • Provide consistency between Java SE and Java EE
    concurrency programming model
    • Extend the Concurrency Utilities API (JSR 166)
Concurrency Utilities for Java EE 1.0
  ManagedExecutorService
  • Manageable version of
    java.util.concurrent.ExecutorService
    • Lookup using JNDI
  • Java EE components create task classes
    • Implement java.lang.Runnable or java.util.concurrent.Callable
  • Submitted using submit or invoke methods
  • Multiple (configurable) executors are permitted
Concurrency Utilities for Java EE 1.0
  Defining ManagedExecutorService using JNDI
  • Recommended to bind in java:comp/env/concurrent
    subcontext
  <resource-env-ref>
   <resource-env-ref-name>
     concurrent/BatchExecutor
   </resource-env-ref-name>
   <resource-env-ref-type>
     javax.enterprise.concurrent.ManagedExecutorService
   </resource-env-ref-type>
  </resource-env-ref>
Concurrency Utilities for Java EE 1.0
  Submit Tasks to ManagedExecutorService using JNDI
  public class TestServlet extends HTTPServlet {
   @Resource(name=“concurrent/BatchExecutor”)
   ManagedExecutorService executor;

      Future future = executor.submit(new MyTask());

      class MyTask implements Runnable {
        public void run() {
          . . . // task logic
        }
      }
  }
Java Transaction API 1.2

  • Declarative transactions outside EJB
    • Based on CDI interceptors
  • Adds annotation and standard values to
    javax.transaction package
Java Transaction API 1.2

  public @interface Transactional {
    TxType value() default TxType.REQUIRED
  }
  public enum TxType {
    REQUIRED,
    REQUIRED_NEW,
    MANDATORY,
    SUPPORTS,
    NOT_SUPPORTED,
    NEVER
  }
Java Transaction API 1.2

  public class ShoppingCart {
    ...
    @Transactional
    public void checkOut() {...}
    ...
  }
JavaServer Faces 2.2

  HTML5 Friendly Markup Support
    Pass through attributes and elements
  Faces Flows
  Cross Site Request Forgery Protection
  Loading Facelets via ResourceHandler
  File Upload Component
  Multi-templating
Contexts & Dependency Injection 1.1

  Embedded mode to startup outside Java EE container
  Global ordering of interceptors and decorators
  API for managing built-in contexts
  Send Servlet events as CDI events
  ...
Java EE 7 – Implementation Status

                               4.0


 http://download.java.net/glassfish/4.0/promoted/
Java EE 8 and Beyond
Standards-based cloud programming model

• Deliver cloud architecture                      Storage
                                                              NoSQL

• Multi tenancy for SaaS           JSON-B
                                                                  Multitenancy
                                                  Java EE 7
  applications                   Concurrency
                                                                         Cloud

• Incremental delivery of JSRs
                                                  PaaS
                                               Enablement     Thin Server
                                                              Architecture

• Modularity based on Jigsaw
Call to Action

• Java EE 7 Expert Group
 – javaee-spec.java.net
• Java EE 7 Reference Implementation
 – glassfish.org
• The Aquarium
 – blogs.oracle.com/theaquarium
• Adopt-a-JSR
 – glassfish.org/adoptajsr
Transparency

  • Oracle’s Java EE 7 JSRs are run in the open on java.net
    • http://javaee-spec.java.net
    • One project per spec – e.g., jpa-spec, jax-rs-spec, jms-spec,
      connector-spec …
  • Publicly viewable Expert Group mail archive
    • Users observer list gets copies of all Expert Group emails
  • Publicly viewable download area
  • Publicly viewable issue tracker
  • Commitment to update to JCP 2.8 Process
Status and Schedule

  • All JSRs up and running
  • All Early Drafts, and several Public Drafts
  • Final release target: Q2 2013
GlassFish Roadmap

GlassFish v3                        GlassFish Server 3.1              GlassFish Server 3.1.2
• Java EE 6 support                 • Centralized administration      • Bug Fixes
• Single instance                   • Clustering / HA
                                    • GlassFish Server Control
                                                                      • Incremental features
• GlassFish Enterprise Mgr




 2009                        2010                 2011               2012               2013


     GlassFish Server 3.0.1                 GlassFish Server 3.1.1          GlassFish Server 4
     • Oracle branding                      • Bug fixes                     • Java EE 7
     • Oracle platform support                                              • Multitenancy
     • Oracle interoperability
                                            • Updated components
                                            • Incremental features          • PaaS-enablement
The Java EE 7 Platform:
Simplicity, Productivity and HTML 5
Sivakumar Thyagarajan
Oracle India

Mais conteúdo relacionado

Mais procurados

In the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: GradleIn the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: GradleSkills Matter
 
50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutesAntonio Goncalves
 
Java servlet life cycle - methods ppt
Java servlet life cycle - methods pptJava servlet life cycle - methods ppt
Java servlet life cycle - methods pptkamal kotecha
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotationjavatwo2011
 
The Java EE 7 Platform: Productivity++ & Embracing HTML5
The Java EE 7 Platform: Productivity++ & Embracing HTML5The Java EE 7 Platform: Productivity++ & Embracing HTML5
The Java EE 7 Platform: Productivity++ & Embracing HTML5Arun Gupta
 
Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5Arun Gupta
 
Fifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 MinutesFifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 Minutesglassfish
 
Apache Aries Overview
Apache Aries   OverviewApache Aries   Overview
Apache Aries OverviewIan Robinson
 
OSGi and Eclipse RCP
OSGi and Eclipse RCPOSGi and Eclipse RCP
OSGi and Eclipse RCPEric Jain
 
What's new in JMS 2.0 - OTN Bangalore 2013
What's new in JMS 2.0 - OTN Bangalore 2013What's new in JMS 2.0 - OTN Bangalore 2013
What's new in JMS 2.0 - OTN Bangalore 2013Jagadish Prasath
 
Mobicents JSLEE progress and roadmap - Mobicents Summit 2011
Mobicents JSLEE progress and roadmap - Mobicents Summit 2011Mobicents JSLEE progress and roadmap - Mobicents Summit 2011
Mobicents JSLEE progress and roadmap - Mobicents Summit 2011telestax
 
OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7Bruno Borges
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session ManagementFahad Golra
 
Java Web Programming [2/9] : Servlet Basic
Java Web Programming [2/9] : Servlet BasicJava Web Programming [2/9] : Servlet Basic
Java Web Programming [2/9] : Servlet BasicIMC Institute
 
Jsp/Servlet
Jsp/ServletJsp/Servlet
Jsp/ServletSunil OS
 

Mais procurados (20)

In the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: GradleIn the Brain of Hans Dockter: Gradle
In the Brain of Hans Dockter: Gradle
 
50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes50 new features of Java EE 7 in 50 minutes
50 new features of Java EE 7 in 50 minutes
 
Java servlet life cycle - methods ppt
Java servlet life cycle - methods pptJava servlet life cycle - methods ppt
Java servlet life cycle - methods ppt
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
The Java EE 7 Platform: Productivity++ & Embracing HTML5
The Java EE 7 Platform: Productivity++ & Embracing HTML5The Java EE 7 Platform: Productivity++ & Embracing HTML5
The Java EE 7 Platform: Productivity++ & Embracing HTML5
 
Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5Java EE 7: Boosting Productivity and Embracing HTML5
Java EE 7: Boosting Productivity and Embracing HTML5
 
Fifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 MinutesFifty Features of Java EE 7 in 50 Minutes
Fifty Features of Java EE 7 in 50 Minutes
 
Apache Aries Overview
Apache Aries   OverviewApache Aries   Overview
Apache Aries Overview
 
OSGi and Eclipse RCP
OSGi and Eclipse RCPOSGi and Eclipse RCP
OSGi and Eclipse RCP
 
What's new in JMS 2.0 - OTN Bangalore 2013
What's new in JMS 2.0 - OTN Bangalore 2013What's new in JMS 2.0 - OTN Bangalore 2013
What's new in JMS 2.0 - OTN Bangalore 2013
 
Mobicents JSLEE progress and roadmap - Mobicents Summit 2011
Mobicents JSLEE progress and roadmap - Mobicents Summit 2011Mobicents JSLEE progress and roadmap - Mobicents Summit 2011
Mobicents JSLEE progress and roadmap - Mobicents Summit 2011
 
JEE.next()
JEE.next()JEE.next()
JEE.next()
 
Java Enterprise Edition
Java Enterprise EditionJava Enterprise Edition
Java Enterprise Edition
 
OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7
 
J2EE-assignment
 J2EE-assignment J2EE-assignment
J2EE-assignment
 
Lecture 3: Servlets - Session Management
Lecture 3:  Servlets - Session ManagementLecture 3:  Servlets - Session Management
Lecture 3: Servlets - Session Management
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Java Web Programming [2/9] : Servlet Basic
Java Web Programming [2/9] : Servlet BasicJava Web Programming [2/9] : Servlet Basic
Java Web Programming [2/9] : Servlet Basic
 
JAVA Servlets
JAVA ServletsJAVA Servlets
JAVA Servlets
 
Jsp/Servlet
Jsp/ServletJsp/Servlet
Jsp/Servlet
 

Destaque

Commerce - Orchard Harvest Amsterdam 2013
Commerce - Orchard Harvest Amsterdam 2013Commerce - Orchard Harvest Amsterdam 2013
Commerce - Orchard Harvest Amsterdam 2013Bertrand Le Roy
 
Indic threads pune12-grammar of graphicsa new approach to visualization-karan
Indic threads pune12-grammar of graphicsa new approach to visualization-karanIndic threads pune12-grammar of graphicsa new approach to visualization-karan
Indic threads pune12-grammar of graphicsa new approach to visualization-karanIndicThreads
 
MarkosTiris LSIS East England Learning Fair
MarkosTiris  LSIS East England Learning FairMarkosTiris  LSIS East England Learning Fair
MarkosTiris LSIS East England Learning FairJISC RSC Eastern
 
All In Stitches Campaign
All In Stitches CampaignAll In Stitches Campaign
All In Stitches Campaignjbutti
 
'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...
'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...
'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...JISC RSC Eastern
 
Http2 is here! And why the web needs it
Http2 is here! And why the web needs itHttp2 is here! And why the web needs it
Http2 is here! And why the web needs itIndicThreads
 

Destaque (6)

Commerce - Orchard Harvest Amsterdam 2013
Commerce - Orchard Harvest Amsterdam 2013Commerce - Orchard Harvest Amsterdam 2013
Commerce - Orchard Harvest Amsterdam 2013
 
Indic threads pune12-grammar of graphicsa new approach to visualization-karan
Indic threads pune12-grammar of graphicsa new approach to visualization-karanIndic threads pune12-grammar of graphicsa new approach to visualization-karan
Indic threads pune12-grammar of graphicsa new approach to visualization-karan
 
MarkosTiris LSIS East England Learning Fair
MarkosTiris  LSIS East England Learning FairMarkosTiris  LSIS East England Learning Fair
MarkosTiris LSIS East England Learning Fair
 
All In Stitches Campaign
All In Stitches CampaignAll In Stitches Campaign
All In Stitches Campaign
 
'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...
'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...
'Jisc RSC Eastern Learning Resources Managers forum Nov 2013 'Xtlearn informa...
 
Http2 is here! And why the web needs it
Http2 is here! And why the web needs itHttp2 is here! And why the web needs it
Http2 is here! And why the web needs it
 

Semelhante a Indic threads pune12-java ee 7 platformsimplification html5

The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012Arun Gupta
 
The First Contact with Java EE 7
The First Contact with Java EE 7The First Contact with Java EE 7
The First Contact with Java EE 7Roberto Cortez
 
JUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talkJUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talkVijay Nair
 
Getting Started with Java EE 7
Getting Started with Java EE 7Getting Started with Java EE 7
Getting Started with Java EE 7Arun Gupta
 
Java ee 7 New Features
Java ee 7   New FeaturesJava ee 7   New Features
Java ee 7 New FeaturesShahzad Badar
 
Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)Hamed Hatami
 
Designing a Scalable Data Platform
Designing a Scalable Data PlatformDesigning a Scalable Data Platform
Designing a Scalable Data PlatformAlex Silva
 
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...jaxLondonConference
 
Jax ws
Jax wsJax ws
Jax wsF K
 
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUGThe Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUGArun Gupta
 
'New JMS features in GlassFish 4.0' by Nigel Deakin
'New JMS features in GlassFish 4.0' by Nigel Deakin'New JMS features in GlassFish 4.0' by Nigel Deakin
'New JMS features in GlassFish 4.0' by Nigel DeakinC2B2 Consulting
 
Introduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applicationsIntroduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applicationsFulvio Corno
 
EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)Montreal JUG
 
50 features of Java EE 7 in 50 minutes at Geecon 2014
50 features of Java EE 7 in 50 minutes at Geecon 201450 features of Java EE 7 in 50 minutes at Geecon 2014
50 features of Java EE 7 in 50 minutes at Geecon 2014Arun Gupta
 

Semelhante a Indic threads pune12-java ee 7 platformsimplification html5 (20)

The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
The Java EE 7 Platform: Productivity & HTML5 at JavaOne Latin America 2012
 
The First Contact with Java EE 7
The First Contact with Java EE 7The First Contact with Java EE 7
The First Contact with Java EE 7
 
JUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talkJUDCON India 2014 Java EE 7 talk
JUDCON India 2014 Java EE 7 talk
 
Getting Started with Java EE 7
Getting Started with Java EE 7Getting Started with Java EE 7
Getting Started with Java EE 7
 
cq_cxf_integration
cq_cxf_integrationcq_cxf_integration
cq_cxf_integration
 
Java ee 7 New Features
Java ee 7   New FeaturesJava ee 7   New Features
Java ee 7 New Features
 
Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)Java EE 7 (Hamed Hatami)
Java EE 7 (Hamed Hatami)
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
 
Designing a Scalable Data Platform
Designing a Scalable Data PlatformDesigning a Scalable Data Platform
Designing a Scalable Data Platform
 
Java ee7 1hour
Java ee7 1hourJava ee7 1hour
Java ee7 1hour
 
Servlets
ServletsServlets
Servlets
 
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
 
Jax ws
Jax wsJax ws
Jax ws
 
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUGThe Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
The Java EE 7 Platform: Productivity &amp; HTML5 at San Francisco JUG
 
'New JMS features in GlassFish 4.0' by Nigel Deakin
'New JMS features in GlassFish 4.0' by Nigel Deakin'New JMS features in GlassFish 4.0' by Nigel Deakin
'New JMS features in GlassFish 4.0' by Nigel Deakin
 
Introduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applicationsIntroduction to JDBC and database access in web applications
Introduction to JDBC and database access in web applications
 
Java EE 7 - Overview and Status
Java EE 7  - Overview and StatusJava EE 7  - Overview and Status
Java EE 7 - Overview and Status
 
EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)EJB et WS (Montreal JUG - 12 mai 2011)
EJB et WS (Montreal JUG - 12 mai 2011)
 
50 features of Java EE 7 in 50 minutes at Geecon 2014
50 features of Java EE 7 in 50 minutes at Geecon 201450 features of Java EE 7 in 50 minutes at Geecon 2014
50 features of Java EE 7 in 50 minutes at Geecon 2014
 
Lecture17
Lecture17Lecture17
Lecture17
 

Mais de IndicThreads

Understanding Bitcoin (Blockchain) and its Potential for Disruptive Applications
Understanding Bitcoin (Blockchain) and its Potential for Disruptive ApplicationsUnderstanding Bitcoin (Blockchain) and its Potential for Disruptive Applications
Understanding Bitcoin (Blockchain) and its Potential for Disruptive ApplicationsIndicThreads
 
Go Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang wayGo Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang wayIndicThreads
 
Building Resilient Microservices
Building Resilient Microservices Building Resilient Microservices
Building Resilient Microservices IndicThreads
 
App using golang indicthreads
App using golang  indicthreadsApp using golang  indicthreads
App using golang indicthreadsIndicThreads
 
Building on quicksand microservices indicthreads
Building on quicksand microservices  indicthreadsBuilding on quicksand microservices  indicthreads
Building on quicksand microservices indicthreadsIndicThreads
 
How to Think in RxJava Before Reacting
How to Think in RxJava Before ReactingHow to Think in RxJava Before Reacting
How to Think in RxJava Before ReactingIndicThreads
 
Iot secure connected devices indicthreads
Iot secure connected devices indicthreadsIot secure connected devices indicthreads
Iot secure connected devices indicthreadsIndicThreads
 
Real world IoT for enterprises
Real world IoT for enterprisesReal world IoT for enterprises
Real world IoT for enterprisesIndicThreads
 
IoT testing and quality assurance indicthreads
IoT testing and quality assurance indicthreadsIoT testing and quality assurance indicthreads
IoT testing and quality assurance indicthreadsIndicThreads
 
Functional Programming Past Present Future
Functional Programming Past Present FutureFunctional Programming Past Present Future
Functional Programming Past Present FutureIndicThreads
 
Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams IndicThreads
 
Building & scaling a live streaming mobile platform - Gr8 road to fame
Building & scaling a live streaming mobile platform - Gr8 road to fameBuilding & scaling a live streaming mobile platform - Gr8 road to fame
Building & scaling a live streaming mobile platform - Gr8 road to fameIndicThreads
 
Internet of things architecture perspective - IndicThreads Conference
Internet of things architecture perspective - IndicThreads ConferenceInternet of things architecture perspective - IndicThreads Conference
Internet of things architecture perspective - IndicThreads ConferenceIndicThreads
 
Cars and Computers: Building a Java Carputer
 Cars and Computers: Building a Java Carputer Cars and Computers: Building a Java Carputer
Cars and Computers: Building a Java CarputerIndicThreads
 
Scrap Your MapReduce - Apache Spark
 Scrap Your MapReduce - Apache Spark Scrap Your MapReduce - Apache Spark
Scrap Your MapReduce - Apache SparkIndicThreads
 
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
 Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & DockerIndicThreads
 
Speed up your build pipeline for faster feedback
Speed up your build pipeline for faster feedbackSpeed up your build pipeline for faster feedback
Speed up your build pipeline for faster feedbackIndicThreads
 
Unraveling OpenStack Clouds
 Unraveling OpenStack Clouds Unraveling OpenStack Clouds
Unraveling OpenStack CloudsIndicThreads
 
Digital Transformation of the Enterprise. What IT leaders need to know!
Digital Transformation of the Enterprise. What IT  leaders need to know!Digital Transformation of the Enterprise. What IT  leaders need to know!
Digital Transformation of the Enterprise. What IT leaders need to know!IndicThreads
 
Architectural Considerations For Complex Mobile And Web Applications
 Architectural Considerations For Complex Mobile And Web Applications Architectural Considerations For Complex Mobile And Web Applications
Architectural Considerations For Complex Mobile And Web ApplicationsIndicThreads
 

Mais de IndicThreads (20)

Understanding Bitcoin (Blockchain) and its Potential for Disruptive Applications
Understanding Bitcoin (Blockchain) and its Potential for Disruptive ApplicationsUnderstanding Bitcoin (Blockchain) and its Potential for Disruptive Applications
Understanding Bitcoin (Blockchain) and its Potential for Disruptive Applications
 
Go Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang wayGo Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang way
 
Building Resilient Microservices
Building Resilient Microservices Building Resilient Microservices
Building Resilient Microservices
 
App using golang indicthreads
App using golang  indicthreadsApp using golang  indicthreads
App using golang indicthreads
 
Building on quicksand microservices indicthreads
Building on quicksand microservices  indicthreadsBuilding on quicksand microservices  indicthreads
Building on quicksand microservices indicthreads
 
How to Think in RxJava Before Reacting
How to Think in RxJava Before ReactingHow to Think in RxJava Before Reacting
How to Think in RxJava Before Reacting
 
Iot secure connected devices indicthreads
Iot secure connected devices indicthreadsIot secure connected devices indicthreads
Iot secure connected devices indicthreads
 
Real world IoT for enterprises
Real world IoT for enterprisesReal world IoT for enterprises
Real world IoT for enterprises
 
IoT testing and quality assurance indicthreads
IoT testing and quality assurance indicthreadsIoT testing and quality assurance indicthreads
IoT testing and quality assurance indicthreads
 
Functional Programming Past Present Future
Functional Programming Past Present FutureFunctional Programming Past Present Future
Functional Programming Past Present Future
 
Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams Harnessing the Power of Java 8 Streams
Harnessing the Power of Java 8 Streams
 
Building & scaling a live streaming mobile platform - Gr8 road to fame
Building & scaling a live streaming mobile platform - Gr8 road to fameBuilding & scaling a live streaming mobile platform - Gr8 road to fame
Building & scaling a live streaming mobile platform - Gr8 road to fame
 
Internet of things architecture perspective - IndicThreads Conference
Internet of things architecture perspective - IndicThreads ConferenceInternet of things architecture perspective - IndicThreads Conference
Internet of things architecture perspective - IndicThreads Conference
 
Cars and Computers: Building a Java Carputer
 Cars and Computers: Building a Java Carputer Cars and Computers: Building a Java Carputer
Cars and Computers: Building a Java Carputer
 
Scrap Your MapReduce - Apache Spark
 Scrap Your MapReduce - Apache Spark Scrap Your MapReduce - Apache Spark
Scrap Your MapReduce - Apache Spark
 
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
 Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
Continuous Integration (CI) and Continuous Delivery (CD) using Jenkins & Docker
 
Speed up your build pipeline for faster feedback
Speed up your build pipeline for faster feedbackSpeed up your build pipeline for faster feedback
Speed up your build pipeline for faster feedback
 
Unraveling OpenStack Clouds
 Unraveling OpenStack Clouds Unraveling OpenStack Clouds
Unraveling OpenStack Clouds
 
Digital Transformation of the Enterprise. What IT leaders need to know!
Digital Transformation of the Enterprise. What IT  leaders need to know!Digital Transformation of the Enterprise. What IT  leaders need to know!
Digital Transformation of the Enterprise. What IT leaders need to know!
 
Architectural Considerations For Complex Mobile And Web Applications
 Architectural Considerations For Complex Mobile And Web Applications Architectural Considerations For Complex Mobile And Web Applications
Architectural Considerations For Complex Mobile And Web Applications
 

Indic threads pune12-java ee 7 platformsimplification html5

  • 1. The Java EE 7 Platform: Simplicity, Productivity and HTML 5 Sivakumar Thyagarajan Oracle India
  • 2. Disclaimer The following 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.
  • 3. Java EE 6 Platform December 10, 2009
  • 4. Java EE 6 – Key Statistics 40+ Million Java EE 6 Component Downloads #1 Choice for Enterprise Developers #1 Application Development Platform Fastest implementation of a Java EE release
  • 5. Top Ten Features in Java EE 6 1. EJB packaging in a WAR 2. Type-safe dependency injection 3. Optional deployment descriptors (web.xml, faces-config.xml) 4. JSF standardizing on Facelets 5. One class per EJB 6. Servlet and CDI extension points 7. CDI Events 8. EJBContainer API 9. Cron-based @Schedule 10. Web Profile
  • 6. Java EE 7 Revised Scope Productivity and HTML5 • Higher Productivity – Less Boilerplate – Richer Functionality – More Defaults • HTML5 Support – WebSocket – JSON – HTML5 Forms
  • 7. Java EE 7 – Candidate JSRs JAX-RS Java Caching API Portable JSP 2.2 JSF 2.2 2.0 EL 3.0 (JSR 107) Extension Bean Validation 1.1 s Concurrency Utilities Servlet 3.1 (JSR 236) Common Batch Applications Interceptors 1.1 CDI 1.1 (JSR 352) Annotations 1.1 Java API for JSON Managed Beans 1.0 EJB 3.2 (JSR 353) Connector Java API for WebSocket JPA 2.1 JTA 1.2 JMS 2.0 (JSR 356) 1.7 New Major Updated Release
  • 8. Java API for RESTful Web Services 2.0 • Client API • Message Filters & Entity Interceptors • Asynchronous Processing – Server & Client • Hypermedia Support • Common Configuration
  • 9. Java API for RESTful Web Services 2.0 Client API - Before String address = String.format("http://…/orders/%0$s/customer?shipped=%1$b", "10", true); URL url = new URL(address); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setDoOutput(false); BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = br.readLine()) != null) { //. . . }
  • 10. Java API for RESTful Web Services 2.0 Client API - Now // Get instance of Client Client client = ClientFactory.newClient(); // Get customer name for the shipped products String name = client.target(“../orders/{orderId}/customer”) .resolveTemplate(”orderId", ”10”) .queryParam(”shipped", ”true”) .request() .get(String.class);
  • 11. Java API for RESTful Web Services 2.0 Filters @Provider class LoggingFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext context) { logRequest(ctx.getRequest()); // non-wrapping => returns without invoking next filter } }
  • 12. Java API for RESTful Web Services 2.0 Client-side Async Client client = ClientFactory.newClient(); Future<String> future = client.target("http://.../atm/{card}/balance") .pathParam("card", "1111222233334444") .queryParam("pin", "1234") .request("text/plain") .async() .get( new InvocationCallback<String>() { public void completed(String result) { } public void failed(InvocationException e) { } } );
  • 13. Java Message Service 2.0 Simplify the existing API • Less verbose • Reduce boilerplate code • Resource injection • Connection, Session, and other objects are AutoCloseable • Requires Resource Adapter for Java EE containers • Simplified API in both Java SE and EE
  • 14. Java Message Service 2.0 Sending message using JMS 1.1 @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") Queue demoQueue; public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); 13 lines of messageProducer.send(textMessage); code just } finally { to send a connection.close(); message } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } }
  • 15. Java Message Service 2.0 Sending message using JMS 1.1 must create several @Resource(lookup = "java:global/jms/demoConnectionFactory") intermediate objects ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") Queue demoQueue; public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } finally { connection.close(); } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } }
  • 16. Java Message Service 2.0 Sending message using JMS 1.1 @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; redundant and misleading @Resource(lookup = "java:global/jms/demoQueue") arguments Queue demoQueue; public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } finally { connection.close(); } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } }
  • 17. Java Message Service 2.0 Sending message using JMS 1.1 @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") Queue demoQueue; boilerplate code public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } finally { connection.close(); } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } }
  • 18. Java Message Service 2.0 Sending message using JMS 1.1 @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") Queue demoQueue; public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); must close } finally { resources connection.close(); after use! } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } }
  • 19. Java Message Service 2.0 Sending message using JMS 1.1 @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") Queue demoQueue; public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); all methods messageProducer.send(textMessage); throw checked } finally { exceptions connection.close(); } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } }
  • 20. Java Message Service 2.0 Sending message using JMS 1.1 @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; pre-create app- @Resource(lookup = "java:global/jms/demoQueue") server specific Queue demoQueue; resources public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } finally { connection.close(); } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } }
  • 21. Java Message Service 2.0 Simpler API to close JMS objects Create closeable resources in a try- @Resource(lookup = "jms/connFactory") with-resources block ConnectionFactory cf; @Resource(lookup="jms/inboundQueue") Destination dest; public void sendMessage (String payload) throws JMSException { try ( Connection conn = connectionFactory.createConnection(); Session session = conn.createSession(); MessageProducer producer = session.createProducer(dest); ){ Message mess = sess.createTextMessage(payload); producer.send(mess); } catch(JMSException e){ close() is called // exception handling automatically } at end of block }
  • 22. Java Message Service 2.0 Introducing JMSContext and JMSProducer JMSContext combines Connection and Session @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; Payload @Resource(lookup = "java:global/jms/demoQueue") can be sent Queue demoQueue; directly public void sendMessage (String payload) { try (JMSContext context = connectionFactory.createContext();){ context.createProducer().send(demoQueue, payload); } catch (JMSRuntimeException ex) { // exception handling } close() is called } automatically No checked at end of block exceptions thrown
  • 23. Java Message Service 2.0 Default resource definition Default resource definition Or @JmsConnectionFactory @Inject JMSContext context; @Resource(lookup = "java:global/jms/demoQueue”) Queue demoQueue; public void sendMessage(String payload) { context.createProducer().send(demoQueue, payload); } 13 lines 1 line
  • 24. Java API for JSON Processing 1.0 • API to parse and generate JSON • Streaming API – Low-level, efficient way to parse/generate JSON – Provides pluggability for parsers/generators • Object Model – Simple, easy-to-use high-level API – Implemented on top of Streaming API • Binding JSON to Java objects forthcoming
  • 25. Java API for JSON Processing 1.0 Streaming API – JsonParser and JsonGenerator • JsonParser • Parses JSON in a streaming way from input sources • Similar to StaX’s XMLStreamReader, a pull parser • Created using • Json.createParser(…) • Json.createParserFactory().createParser(…) • Parser state events • START_ARRAY, END_ARRAY, START_OBJECT, END_OBJECT, ...
  • 26. Java API for JSON Processing 1.0 Streaming API – JsonParser and JsonGenerator • JsonGenerator • Generates JSON in a streaming way to output sources • Similar to StaX’s XMLStreamWriter • Created using • Json.createGenerator(…) • Json.createGeneratorFactory().createGenerator(…) • Optionally, configured with features • E.g. for pretty printing
  • 27. Java API for JSON Processing 1.0 Streaming API – JsonGenerator JsonGenerator jg = Json.createGenerator(…); jg. "phoneNumber": [ .beginArray("phoneNumber") { .beginObject() "type": "home", .add("type", "home") "number": ”408-123-4567” .add("number", "408-123-4567") }, .endObject() { .beginObject() "type": ”work", .add("type", ”work") "number": ”408-987-6543” .add("number", "408-987-6543") } .endObject() ] .endArray(); jg.close();
  • 28. Java API for JSON Processing 1.0 Object Model API • JsonObject/JsonArray – JSON object and array structures • JsonString and JsonNumber for string and number values • JsonBuilder – Builds JsonObject and JsonArray • JsonReader – Reads JsonObject and JsonArray from input source • JsonWriter – Writes JsonObject and JsonArray to output source
  • 29. Java API for JSON Processing 1.0 DOM API – JsonReader • Reads JsonObject and JsonArray from input source – I/O Reader, InputStream (+ encoding) • Optionally, configured with features • Uses pluggable JsonParser // Reads a JSON object try(JsonReader reader = new JsonReader(io)) { JsonObject obj = reader.readObject(); }
  • 30. Java API for WebSocket 1.0 • Create WebSocket Client/Endpoints • Annotation-driven (@WebSocketEndpoint) • Interface-driven (Endpoint) • Integration with Java EE Web container
  • 31. Java API for WebSocket 1.0 Hello World – POJO/Annotation-driven import javax.net.websocket.annotations.*; @WebSocketEndpoint("/hello") public class HelloBean { @WebSocketMessage public String sayHello(String name) { return “Hello “ + name; } }
  • 32. Java API for WebSocket 1.0 WebSocket Annotations Annotation Level Purpose @WebSocketEndpoint class Turns a POJO into a WebSocket Endpoint @WebSocketOpen method Intercepts WebSocket Open events @WebSocketClose method Intercepts WebSocket Close events @WebSocketMessage method Intercepts WebSocket Message events method @WebSocketPathParam parameter Flags a matched path segment of a URI-template @WebSocketError method Intercepts errors during a conversation
  • 33. Java API for WebSocket 1.0 @WebSocketEndpoint Attributes Relative URI or URI template value e.g. “/hello” or “/chat/{subscriber-level}” decoders list of message decoder classnames encoders list of message encoder classnames subprotocols list of the names of the supported subprotocols
  • 34. Bean Validation 1.1 Open: Spec, Reference Implementation, TCK Alignment with Dependency Injection Method-level validation Constraints on parameters and return values Check pre-/post-conditions
  • 35. Bean Validation 1.1 Method Parameter and Result Validation public void placeOrder( @NotNull String productName, Built-in @NotNull @Max(“10”) Integer quantity, Custom @Customer String customer) { //. . . } @Future public Date getAppointment() { //. . . }
  • 36. Batch Applications for the Java Platform 1.0 • Suited for non-interactive, bulk-oriented and long- running tasks • Computationally intensive • Can execute sequentially/parallel • May be initiated • Adhoc • Scheduled • No scheduling APIs included
  • 37. Batch Applications for the Java Platform 1.0 Concepts • Job: Entire batch process – Put together through a Job Specification Language (XML) • Step: Independent, sequential phase of a job – ItemReader: Retrieval of input for a step, one at a time – ItemProcessor: Business processing of an item – ItemWriter: Output of an item, chunks of items at a time • JobOperator: Manage batch processing • JobRepository: Metadata for jobs
  • 38. Batch Applications for the Java Platform 1.0 Job Specification Language – Simple Job <job id=“myJob”> <step id=“init”> <chunk reader=“R” writer=W” processor=“P” /> <next on=“initialized” to=“process”/> <fail on=“initError”/> </step> <step id=“process”> <batchlet ref=“ProcessAndEmail”/> <end on=”success”/> <fail on=”*” exit-status=“FAILURE”/> </step> </job>
  • 39. Java Temporary Caching API 1.0 • API and semantics for temporary, in-memory caching of Java objects • SPI for implementers • Designed to support “local” and “distributed” caching • Caching strategies supported By value (default) By reference (not suitable for “distributed” caching)
  • 40. Java Temporary Caching API 1.0 • javax.cache.* • Delivered as part of Java EE 7 • Immediately usable by Java EE 6, Spring and Guice • Immediately usable by any Java app • Not a Data Grid specification • JSR 107 does not mandate a topology • JSR 347 does: builds on JSR 107
  • 41. Java Temporary Caching API 1.0 Key Concepts Cache Manager =>Caches Cache => Entries Entry => Key,Value • CacheManager acquired via CacheManagerFactory • CacheManagerFactory acquired via Service Provider META-INF/services/javax.cache.spi.CachingProvider
  • 42. Java Temporary Caching API 1.0 Code Sample – Blog public class BlogManager { @CachePut(cacheName=”blogManager”) public void createEntry( @CacheKeyParam String title, @CacheValue Blog blog) {...} ...
  • 43. Java Temporary Caching API 1.0 Code Sample – Blog ... @CacheResult(cacheName="blogManager") public Blog getBlogEntry(String title) {...} @CacheResult(cacheName="blogManager") public Blog getEntryCached( String randomArg, @CacheKeyParam String title) {...} ...
  • 44. Java Temporary Caching API 1.0 Annotations – Blog Sample ... @CacheRemoveEntry(cacheName="blogManager") public void removeBlogEntry(String title) {...} @CacheRemoveAll(cacheName="blogManager") public void removeAllBlogs() {...} }
  • 45. Java Persistence API 2.1 Schema Generation Unsynchronized Persistence Contexts Converters Bulk update/delete using Criteria User-defined functions using FUNCTION Stored Procedure Query
  • 46. Enterprise JavaBeans 3.2 EJBs Today • @Singleton • @Asynchronous • @Schedule • Portable JNDI Name • EJBContainer.createEJBContainer • EJB 3.1 Lite
  • 47. Enterprise JavaBeans 3.2 Updates: Opt-out passivation of Stateful Session Beans @Stateful(passivationCapable=false) public class HelloBean { private NonSerializableType ref = …; … }
  • 48. Enterprise JavaBeans 3.2 Updates: Simplified Rules for Local/Remote Client Views @Stateless public class Bean implements Foo, Bar { } Local @Local @Stateless public class Bean implements Foo, Bar { } Remote @Remote @Stateless public class Bean implements Foo, Bar { }
  • 49. Enterprise JavaBeans 3.2 Updates: Simplified Rules for Local/Remote Client Views @Remote public interface Foo { . . . } public interface Bar { . . . ] Remote @Stateless public class Bean implements Foo, Bar { }
  • 50. Servlet 3.1 Non-blocking I/O Protocol Upgrade Security Enhancements
  • 51. Servlet 3.1 Non-blocking IO - Traditional public class TestServlet extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ServletInputStream input = request.getInputStream(); byte[] b = new byte[1024]; int len = -1; while ((len = input.read(b)) != -1) { ... } } }
  • 52. Servlet 3.1 Non-blocking I/O: doGet Code Sample AsyncContext context = request.startAsync(); ServletInputStream input = request.getInputStream(); input.setReadListener( new MyReadListener(input, context));
  • 53. Servlet 3.1 Non-blocking I/O: MyReadListener Code Sample @Override public void onDataAvailable() { try { StringBuilder sb = new StringBuilder(); int len = -1; byte b[] = new byte[1024]; while (input.isReady() && (len = input.read(b)) != -1) { String data = new String(b, 0, len); System.out.println("--> " + data); } } catch (IOException ex) { ... } } ...
  • 54. Servlet 3.1 Non-blocking I/O: MyListener Code Sample ... @Override public void onAllDataRead() { context.complete(); } @Override public void onError(Throwable t) { t.printStackTrace(); context.complete(); }
  • 55. Concurrency Utilities for Java EE 1.0 Goals • Provide concurrency capabilities to Java EE application components • Without compromising container integrity • Support simple (common) and advanced concurrency patterns • Provide consistency between Java SE and Java EE concurrency programming model • Extend the Concurrency Utilities API (JSR 166)
  • 56. Concurrency Utilities for Java EE 1.0 ManagedExecutorService • Manageable version of java.util.concurrent.ExecutorService • Lookup using JNDI • Java EE components create task classes • Implement java.lang.Runnable or java.util.concurrent.Callable • Submitted using submit or invoke methods • Multiple (configurable) executors are permitted
  • 57. Concurrency Utilities for Java EE 1.0 Defining ManagedExecutorService using JNDI • Recommended to bind in java:comp/env/concurrent subcontext <resource-env-ref> <resource-env-ref-name> concurrent/BatchExecutor </resource-env-ref-name> <resource-env-ref-type> javax.enterprise.concurrent.ManagedExecutorService </resource-env-ref-type> </resource-env-ref>
  • 58. Concurrency Utilities for Java EE 1.0 Submit Tasks to ManagedExecutorService using JNDI public class TestServlet extends HTTPServlet { @Resource(name=“concurrent/BatchExecutor”) ManagedExecutorService executor; Future future = executor.submit(new MyTask()); class MyTask implements Runnable { public void run() { . . . // task logic } } }
  • 59. Java Transaction API 1.2 • Declarative transactions outside EJB • Based on CDI interceptors • Adds annotation and standard values to javax.transaction package
  • 60. Java Transaction API 1.2 public @interface Transactional { TxType value() default TxType.REQUIRED } public enum TxType { REQUIRED, REQUIRED_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER }
  • 61. Java Transaction API 1.2 public class ShoppingCart { ... @Transactional public void checkOut() {...} ... }
  • 62. JavaServer Faces 2.2 HTML5 Friendly Markup Support Pass through attributes and elements Faces Flows Cross Site Request Forgery Protection Loading Facelets via ResourceHandler File Upload Component Multi-templating
  • 63. Contexts & Dependency Injection 1.1 Embedded mode to startup outside Java EE container Global ordering of interceptors and decorators API for managing built-in contexts Send Servlet events as CDI events ...
  • 64. Java EE 7 – Implementation Status 4.0 http://download.java.net/glassfish/4.0/promoted/
  • 65. Java EE 8 and Beyond Standards-based cloud programming model • Deliver cloud architecture Storage NoSQL • Multi tenancy for SaaS JSON-B Multitenancy Java EE 7 applications Concurrency Cloud • Incremental delivery of JSRs PaaS Enablement Thin Server Architecture • Modularity based on Jigsaw
  • 66. Call to Action • Java EE 7 Expert Group – javaee-spec.java.net • Java EE 7 Reference Implementation – glassfish.org • The Aquarium – blogs.oracle.com/theaquarium • Adopt-a-JSR – glassfish.org/adoptajsr
  • 67. Transparency • Oracle’s Java EE 7 JSRs are run in the open on java.net • http://javaee-spec.java.net • One project per spec – e.g., jpa-spec, jax-rs-spec, jms-spec, connector-spec … • Publicly viewable Expert Group mail archive • Users observer list gets copies of all Expert Group emails • Publicly viewable download area • Publicly viewable issue tracker • Commitment to update to JCP 2.8 Process
  • 68. Status and Schedule • All JSRs up and running • All Early Drafts, and several Public Drafts • Final release target: Q2 2013
  • 69. GlassFish Roadmap GlassFish v3 GlassFish Server 3.1 GlassFish Server 3.1.2 • Java EE 6 support • Centralized administration • Bug Fixes • Single instance • Clustering / HA • GlassFish Server Control • Incremental features • GlassFish Enterprise Mgr 2009 2010 2011 2012 2013 GlassFish Server 3.0.1 GlassFish Server 3.1.1 GlassFish Server 4 • Oracle branding • Bug fixes • Java EE 7 • Oracle platform support • Multitenancy • Oracle interoperability • Updated components • Incremental features • PaaS-enablement
  • 70. The Java EE 7 Platform: Simplicity, Productivity and HTML 5 Sivakumar Thyagarajan Oracle India