Plus riche, plus simple, plus léger


Les mots d'ordre de cette nouvelle version sont : plus riche, plus simple, et plus léger. Plus riche avec de nouvelles fonctionnalités introduites par de nouvelles spécifications, notamment concernant les services web. Plus léger avec l'utilisation des EJB3.1 (Entity Bean) et l'utilisation des profiles qui permettent de n'utiliser qu'un sous ensemble de Java EE, comme par exemple un profil spécial pour le web. Enfin, plus simple avec l'utilisation des annotations et donc moins de XML. En effet, à partir de la version 3 de l'API Servlet, il va être possible d'annoter les servlets, les filtres et les listeners (en remplacement du fichier XML). Par ailleurs, il sera possible de fragmenter le fichier web.xml dans plusieurs web-fragment afin de gagner en modularité et en souplesse.

Voici quelques exemples de nouveautés introduites par la version 6 de Java EE (en gardant à l'esprit qu'elles sont susceptibles d'évoluer d'ici la sortie de la version finale).

Le support de l'asynchronisme dans les servlets


Afin de faire face à un besoin croissant d'asynchronisme dans le contexte web, une nouvelle annotation a été introduite : @WebServlet(asyncSupported=true). Elle permet de rendre la main instantanément en suspendant la requête, puis la reprenant ultérieurement.

La simplification de JSF2


JSF2 vise à simplifier en rendant des éléments de configuration optionnels. Par exemple la configuration peut se faire à l'aide de l'annotation @ManagedBean(name="dbUtil", scope="request") au lieu de remplir le fichier faces-config.xml.

L'enrichissement des fonctionnalités de EJB et la simplification


La version 3.1 des EJB permet d'utiliser directement les singletons avec l'annotation @Singleton. Il est garantit qu'une seule instance de l'objet marqué ne sera présente dans la machine virtuelle Java. Par ailleurs, alors qu'il était interdit de créer un thread auparavant dans les EJB (et qu'il fallait par exemple passer par JMS), il sera possible de créer des méthodes asynchrones avec soit un type de retour void, soit l'utilisation de la classe générique java.util.concurrent.Future (donc avec un type paramétré). Enfin, il sera possible d'intégrer les EJB directement dans un war, sans nécessité de créer un ear.

Le nouveau service de Timer


Le service de Timer bénéficie d'une syntaxe à la cron : @Schedule(dayOfWeek="Mon-Fri", hour="9") void (makeUp() {...}. Ceci couplé à l'introduction des méthodes asynchrones, et du conteneur d'EJB léger (embarquable) ouvre de nouvelles portes aux EJB : le batch-processing.

Les changements de JPA2


JPA est désormais spécifié en dehors des EJB, dans la JSR317. JPA est utilisable directement dans Java SE, et s'enrichit d'une API de Criteria, à la manière de Hibernate.