25 novembre 2009
Imprimer ce billet

Devoxx – Jour 3 – JEE6

Comme énoncé dans notre résumé de la keynote du mercredi, la star de ce Devoxx 2009 est clairement JEE6. Et, au premier rang avec mon superbe t-shirt "I Love Spring", j'ai pu profiter d'une présentation générale de cette nouvelle version de JEE par Antonio Goncalves et la petite caricature de Rod Johnson :) .

 

Introduction

Tout d'abord quelques chiffres autour de JEE6 :

  • une sortie prévue le 10 décembre 2009
  • 11 ans de JEE (JPE / J2EE / JEE)
  • le plus grand intervalle entre 2 versions (3 ans et demi avec JEE5)
  • 28 spécifications

Un récapitulatif nous montre les différentes spécifications utilisées (ainsi que quelques technos Java SE 6) avec en jaune les nouvelles spécifications et en noir les montées de version majeures :

Il y en a pour tous les goûts : de l'injection, du back-end et du web et cela a de quoi séduire.

Certaines spécifications sont marquées comme pruned par JEE6 et pourraient éventuellement disparaître dans JEE7. Nous parlons ici des Entity CMP 2.x, de JAX-RPC, JAX-R et de JSR-88 (Java EE Application Deployment).

Antonio nous fait ensuite un rapide tour d'horizon des spécifications marquantes de ce JEE6.

Web Profile

Web Profile est un sous-ensemble de la plateforme JEE orienté Web. On compte parmi les spécifications retenues JSF, Servlet, JSP, JPA, JTA, JCDI, @Inject ou bien encore EJB Lite. La liste complète en image :

EJB Lite

De même que pour Web Profile, EJB Lite est un sous-ensemble d'EJB 3.1, le tout packagé dans un fichier War. Retenues dans EJB Lite :

  • Local Session Bean
  • Injection
  • CMT / BMT
  • Interceptors
  • Security

Out donc les Messages Driven Beans, les Remote Interfaces ou bien encore les Timer Services.

Managed Beans

Les Managed Beans sont de simples POJOs gérés par le container (lightweight model). Ces beans supportent un ensemble de services basiques (par annotations) dont :

  • Injection (@Resource ...)
  • Life-Cycle (@PostConstruct, @PreDestroy)
  • Interceptor (@Interceptor, @AroundInvoke)
@javax.annotation.ManagedBean
public class MyPojo {
   @Resource
   private DataSource dataSource ;

   @PostConstruct
   private void init() {
      // ...
   }

   @Interceptor(LoggingInterceptor.class)
   public void perform() {
       // ...
   }
}

Bean Validation

Antonio nous parle ensuite de Bean Validation, spécification qui va nous permettre de définir des contraintes directement sur nos POJOs par annotations. L'accroche : constrain once, validate anywhere ! Nous pouvons donc ajouter des validations de type @NotNull, @Size ou autres sur nos propriétés de bean. Il est aussi possible de définir nos propres validateurs.

Cette spécification définit ainsi un standard de validation pour Java, Bean Validation étant déjà supportée par JPA 2.0 et JSF 2.0. On a ainsi une validation qui part de la base de données et va jusqu'à la couche cliente.

JAX-RS

Un peu de RESTful dans JEE avec JAX-RS qui passe au passage en version 1.1 pour supporter les EJBs. L'API reste bien sûr orientée POJO et annotations. Voici un exemple d'intégration de JAX-RS avec un EJB :

@Path("/users/{userId}")
@Stateless
public class UserResource {
   @GET @Produces("image/jpeg")
   public byte[] getPhoto() {
      // ...
   }

   @GET @Produces("text/xml")
   public String getUser(@PathParam("userId") String id) {
      // ...
   }
}

@Inject et CDI (Context and Dependency Injection)

Nous vous avons déjà beaucoup parlé de ces JSRs (ici, ici, ici mais aussi et encore ).
@Inject, @Named, @Qualifier, @Scope ou bien encore @Singleton, voici les annotations de JSR-330 que nous allons pouvoir utiliser.
Quant à CDI (JSR-299), qui utilise @Inject, elle nous propose un set de services utilisables par nos composants EE (servlets, beans...). Elle nous permet aussi d'utiliser nos EJBs directement dans JSF en tant que backing beans.
Évidemment, le contenu de ces spécifications est beaucoup plus large et nous n'avons ici qu'un rapide résumé.

Mais aussi...

Parmi les autres nouveautés, on peut citer en vrac :

  • Appels asynchrones avec @Asynchronous avec un retour void ou Future<T> ;
  • Annotation @Singleton ;
  • Annotation @Cacheable avec toute l'API de cache (contain, evict ou evictAll) qui permet le support d'un cache de second niveau ;
  • Embeddable Container, API qui permet d'initialiser le container, de récupérer les contextes... faisant qu'il est possible de le faire tourner dans un environnement Java SE (par exemple une application Swing), ce ne sera qu'un JAR dans votre classpath ;
  • Timer Service pour gérer la planification de tâche avec l'annotation @Schedule ;
  • Fichier web.xml optionnel grâce entre autres aux annotations @WebServlet, @WebFilter,@WebListener ou bien encore @WebInitParam ;

Conclusion

L'opération séduction fonctionne plutôt bien pour JEE6 si l'on écoute les différents commentaires des conférenciers en sortie de session. La simplicité et facilité d'utilisation des EJBs, le profile web ou encore les injections ont vraiment convaincus et nombreux sont ceux qui attendent désormais avec impatience ce 10 décembre 2009. En effet, il n'y a plus qu'à tester et à voir si JEE6 tient vraiment toutes ses promesses...

Mots-clefs :, , , ,