Pour commencer un bref historique de java s'impose :

  • Project JPE May 1998
  • J2EE 1.2 Dec 1999 10 spécifications
         * Servlet
         * JSP
         * EJB
         * JMS
         * RMI/IIOP
  • J2EE 1.3 Sept 2001 13 spécifications
         * Robust 
         * Scalable  
         * CMP
         * JCA
  • J2EE 1.4 Nov 2003
         * Web services 
         * Management 
         * Deployment
  • JAVA EE5 May 2006
         * Développement plus facile
         * Annotations, 
         * EJB3, 
         * JPA 1.0, 
         * Web Service,
         * JSF
  • JAVA EE6 Q4 2009 29 spécifications Développement Web plus facile
         * EJB3.1,
         * JPA2.0, 
         * Servlet 3.0, 
         * JSF 2.0, 
         * JAX-RS1.1,
         * JCDI 1.0,
         * Web profile

The JCP expert Group :

  • 8 compagnies au départ
  • Aujourd'hui 15 compagnies 10 individuels (dont 13 ou 14 qui font de l'open source) 1 université .

Avec pour ne citer que quelques unes Sun Microsystems, IBM, Spring source, red hat... Pour Antonio, le JCP va dans le bon sens, plus d'open source et plus d'ouverture. JAVA EE6 est un bon millésime.
Il y a de nombreuses nouveautés dans cette version de java EE6

Partie web :

  • JSF 1.2 -> 2.0
  • Servlet 3.0
  • JSP
  • EL
  • JSTL
  • Debugging
  • Support

Enterprise :

  • EJB
  • JCA
  • JPA
  • Web services
  • JAX-RS
  • Management, Security,Common
      * CDI(JSR 299)1.0
      * @inject (JSR330) 1.0
      * Bean validation 1.0
      * Interceptors 1.1
      * Managed Beans 1.0

Java SE 6

  • Jax-ws

Antonio nous explique que dans Java EE7 ils vont pruned (enlever) certaines spécifications qui sont peu utilisées.

  • entity CMP2.x
  • JAX-RPC
  • JAX-R
  • JSR 88 (JAVA EE aplication developpement)

Java EE6 c'est 29 spécifications.
La grande nouveauté c'est la gestion des profils avec notamment un profil web qui possèdent une dizaine de pages de spécifications JSR 316.
Chaque profil va évoluer à son rythme.

EJB Lite qui tourne dans un conteneur web et plus dans un conteneur EJB.

Il ne reste plus que Local Session Bean

  • Injection
  • CMT/BMT
  • Interceptors
  • Security

resin 4: le premier serveur d'application qui implémentera le profil web http://www.caucho.com/projects/resin/ .

Portable JNDI names: Les noms seront maintenant normés.

Nouvelles spécifications: Le développement est facilité grâce aux annotations.

Annotations based programming model

  • @WebServlet
  • @ServletFilter
  • @WebServletContextListener
  • @InitParam
  • Deployment descriptors optional (web.xml)
  • Modular

Extensible

  • Fragments or modular web.xml
  • Logical partitioning of a web application
  • Annotations and web fragments are merged
  • Overriden by main web.xml

Managed Beans 1.0 Tout ce qui tourne dans un conteneur est managé, On peut faire de l'injection. Il a un cycle de vie simple et des intercepteurs (modele AOP).

EJB c'est un managed bean avec des services en plus.

  • Transaction support
  • security
  • Multi thread

A REST service is a Managed bean with HTTP support.

Interceptors 1.1

existe depuis les EJB 3, permet à la plate forme de faire de l'AOP lite. ils peuvent être mis dans un managed bean. Elle a une nouvelle spécification.

Bean Validation 1.0

  • Enable declarative validation in your applications.
  • Contrain Once,validate anywhere
  • rectriction on a bean, field or property.
  • not null, size between

Permet d'écrire des règles métiers et de les utiliser avec JPA 2, les EJB ou JSF.
L'objet métier définit des règles.Un entity est maintenant serializable.

JAX-RS 1.1

  • RESTful Services existe depuis un an.
  • Spec minimaliste 60 pages. Permet d'exposer des services en mode REST.
  • POJO and Annotations Based
  • MAP HTTP verbs(GET,Post,Put,Delete...)
  • JAX-RS 1.0 has been released in 2008
  • JAX-RS 1.1 integreé au modeles EJB.

On peut aussi dire que ma ressource REST est un EJB.

@Inject 1.0 (JSR 330) On peut injecter des managed bean.

Il ne faut que 5 annotations pour faire de l'injection. package javax.inject

  • @Inject: identifies injectable constructors, methods,and fields.
  • @Named: String-based qualifier (for EL)
  • @Qualifier:Identifies qualifier
  • @Scope:Identifies scope annotations (request,conversation,session + un autre)
  • @singleton:Instantiates once

On peut injecter ses propres annotations pour pouvoir différencier ses propres services par exemple.

CDI 1.0 (JSR 299) c'est le nouveau nom des WEB Beans. Spécification qui au dessus de @Inject

  • Context & Dependency injection
  • Uses @inject annotations

JPA2: Richer Mapping avant JPA 1 et hibernate. Maintenant JPA2 est au dessus d'Hibernate. On peut mapper des listes, des maps. Le mapping est beaucoup plus riche.

Richer JPQL Query polymorphique. Join dans une subquery

JPA 2 lock pessimiste, JPA2 a maintenant un cache. Caching Supports the use of a second-level cache Cache API * contain(Class,PK) * evict * evictall

       * @Cacheable annotation on entities

Criteria API

  • Type safe
  • Strongly typed criteria API
  • Object-based query definition objects, rather than string-based
  • Like JPQL
  • uses a metamodel.
  • Chaque entité a un nom_ (metamodel)
  • Rendre les "order by" persistant.
  • detacher explicitement un entity.
  • Supprimer les orphelins
  • standard properties in persistence.xml

EJB 3.1 Classe qui implémente des interfaces locales ou distribuées.

Singleton nouveau composant. Une seule instance de cet EJB. Singleton par application on ne parle pas de cluster ici.

Appel asynchrone:

  • une annotation : @Asynchronous

Packaging in a war

un conteneur Websphere, Weblogic.

Enfin un conteneur léger, embarqué donc testable. Peut tourner dans un JAVA SE environnement.

Timer Service

  • Programmatic and Calendar based scheduling
  • basé sur Cron
  • Annotation @Schedule

Servlet 3.0

  • Optional web.xml
  • Better defaults and CoC
  • Annotations basing programmeted model.

Pluggability

  • Enable use of frameworks without configuration in web.xml
  • Fragment the web.xml to allow frameworks to be self_contained in their own jar.

* Declare their own controller servlet * Declare listener and filters

Asynchronous support Je peux faire une requête HTTP faire un traitement et laisser sur un autre thread. Puis enfin avoir mon résultat. Mais le problème tout doit être asynchrone.

Un file upload.

JSF 2.0

  • Composite components
  • write your own components
  • no java code needed
  • use xhtml and JSF tags

Ajax support. pour la premiere fois. (jsf.js) javascript library.

L'avenir ?

  • La fin des jsp
  • Facelets for templating.
  • Easier resources management
  • New scope (View)
  • Bookmarkable Urls

Tout est disponible depuis le 10 décembre 2009 avec Glassfish par exemple.

Pour la première fois toute les implémentations de référence sont open source.
Tout les grands interagissent entre eux. Chacun a écrit un bout de puzzle et la gestion des profils permet de faire son serveur à la carte.
Pour l'instant, seulement 2 serveurs d'application permettent de faire tourner Java EE6 : GlassFish et bientôt Resin.

Merci d'avoir lu le billet jusqu'ici pour les plus courageux. C'est vrai que c'est assez fastidieux à lire mais il est difficile de résumer plus de 800 pages de spécifications en quelques lignes. Antonio a su avec sa bonne humeur et son humour rendre toutes ces informations digestes. Je vous invite à lire son livre qui explique toutes ces nouveautés : Java EE 6