Il y a 12 ans -
Temps de lecture 11 minutes
Revue de Presse Xebia
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité éditeurs / SSII
- IBM dévoile WebSphere 8
- Sortie de Play! Framework 1.2
- Nudge, une plate-forme hébergée de monitoring de performance applicative (SaaS)
- Sortie de Rails 3.0.6 corrigeant une faille de sécurité de type XSS
Le coin de la technique
Evénements de notre communauté en France et à l’étranger
Actualité éditeurs / SSII
IBM dévoile WebSphere 8
Nos confrères du Monde Informatique et du Journal du Net reviennent sur la conférence Impact 2011, qui se tenait à Las Vegas les 12 et 13 avril derniers, au cours de laquelle IBM a notamment présenté les grandes lignes de la version 8 de son célèbre serveur d’applications.
Disponible en version bêta depuis le mois de mars — la sortie officielle étant prévue pour juin — cette dernière version est 100% compatible avec Java EE 6. Parmi la longue liste de fonctionnalités au programme de cette nouvelle mouture, citons le support des standards suivants :
- Enterprise JavaBeans (EJB) 3.1
- Java Persistence API (JPA) 2.0
- JavaServer Faces (JSF) 2.0
- JavaServer Pages (JSP) 2.2
- Servlet 3.0
- JAXB 2.2
- JAX-WS 2.2, et notamment le support de Web Services Security API (WSS API) et WS-Trust, censés faciliter le SSO à l’aide de web services.
WebSphere 8 devrait apporter également:
- une meilleure prise en charge des applications OSGi;
- une meilleure intégration des web services utilisant WS-Security SAML Token Profile 1.1;
- un support de SIP Servlet 1.1 afin de favoriser l’utilisation d’applications de communication;
- le support du cache L2 de JPA à l’aide de DynaCache (le cache par défaut utilisé dans WebSphere);
- une intégration simplifiée avec WebSphere MQ.
IBM semble également avoir voulu contenter les développeurs d’applications (il était temps, diront certains): non seulement le serveur semble démarrer plus rapidement, mais surtout le processus de déploiement a été simplifié, et il sera désormais possible de (re)déployer une application avec un simple drag’n drop.
Sortie de Play! Framework 1.2
La version 1.2 du framework Play! vient tout juste de voir le jour. Pour ceux qui ne le connaitraient pas encore, Play est un framework web orienté haute productivité. Comme son cousin Grails, il repose sur des conventions, est extensible via des plugins et supporte le rechargement à chaud des modifications du code.
Les nouveautés apportées par cette nouvelle version sont nombreuses :
- ajout d’un système de gestion de dépendances basé sur Ivy, permettant de récupérer des modules Play ou toutes autres librairies requises,
- support du Long Polling et des Web Sockets, pour les connections asynchrones,
- introduction d’un mécanisme de gestion des évolutions des schémas de bases de données,
- ajout du concept d’Invocation permettant la mise en place de mécanismes équivalent aux Servlet Filters ou à l’AOP (pour la déclaration des transactions à l’arrivée d’une requête par exemple),
- support des bases H2, maintenant embarquées par défaut,
- possibilité de lancer les tests JUnit directement dans Eclipse (sans passer par la page de tests),
- une meilleure documentation du framework, avec notamment une Cheat-Sheet, toujours accessible en mode déconnecté.
Cette version 1.2 est accompagnée de la version 0.9 du plugin Scala pour Play. Ce plugin permet l’utilisation du langage Scala pour développer vos applications Web avec le framework Play. Outre une meilleure intégration de Scala dans le framework Play, cette nouvelle version du plugin apporte une nouvelle couche d’accès aux bases de données nommée Anorm. Anorm permet l’accès en SQL à vos données et utilise des fonctionnalités du langage Scala (le Combinator Parsing) pour mapper le résultat des requêtes avec vos objets. D’importantes évolutions sont encore attendues dans la prochaine version de ce plugin, qui devrait encore améliorer son intégration et sa documentation.
Cette nouvelle version apporte donc d’importantes améliorations et confirme la simplicité qui est au coeur de la philosophie de Play.
Nudge, une plate-forme hébergée de monitoring de performance applicative (SaaS)
La société Level5 Consulting vient de sortir Nudge, une offre hébergée de monitoring d’applications en production. Les cibles sont des logiciels de type web ou batch développés en Java/JEE.
Utilisateurs, vous aurez à disposition des fonctionnalités permettant de :
- collecter et agréger des temps de réponse,
- identifier les requêtes SQL consommatrices,
- suivre la consommation mémoire et CPU,
- agréger des données par module et/ou processus métier,
- créer de métriques personnalisées par API,
- gérer des alertes et des SLA,
- collecter des informations sur les incidents de production.
Vous bénéficierez aussi d’un support d’expert sur l’optimisation d’application. Vous pouvez dès maintenant découvrir Nudge gratuitement ou bien tester une application de démonstration disponible sur le site de l’éditeur. Pour plus de détails, consultez l’article de Developpez.com sur le sujet.
Sortie de Rails 3.0.6 corrigeant une faille de sécurité de type XSS
C’est le 6 avril que la dernière version (3.0.6) de l’outils Rails est sortie. C’est une version importante puisqu’elle corrige, entre autre, une faille de sécurité. En effet, une vulnérabilité de type XSS (Cross Site Scripting) peut être exploitée si la méthode auto_link
est utilisée dans les sources. Cette dernière en effet avait la fâcheuse habitude de marquer automatiquement ses paramètres comme étant html safe
, et ce, quelle que soit leur origine: ceux-ci n’étaient donc en vérité jamais contrôlés. Il était donc possible d’exécuter du code javascript malveillant en l’injectant dans un paramètre de type string
. Le billet mentionne trois solutions pour palier ce problème: mettre à jour votre version de Rails, installer un patch ou… ne pas utiliser cette méthode :D
Cette mise à jour apporte quelques autres ajouts, dont vous pouvez retrouver le détail sur le blog du projet.
Le coin de la technique
Red Hat prépare Ceylon, un nouveau langage pour la JVM
Le « buzz » de la semaine c’est bien sûr la diffusion d’une présentation (et de sa deuxième partie) que Gavin King a faite à Pékin lors de la QCon, où il révèle qu’il travaille pour Red Hat à un nouveau langage pour la JVM : Ceylon. Bien que Gavin ne prévoyait pas de parler officiellement du projet de son équipe aussi tôt, il a confirmé la nouvelle ; d’abord sur son blog, puis lors d’une interview pour InfoQ.
Alors de quoi s’agit-il ? La première chose à noter est que Gavin King se défend de vouloir créer le langage du futur pour la JVM ou un « Java Killer ». Il se dit d’ailleurs « fan apologétique » de Java et propose donc Ceylon comme un langage fortement inspiré de celui-ci, sans les frustrations qu’il occasionne. Les principales frustrations étant selon lui :
- les librairies du SDK, vieilles et mal conçues ;
- la difficulté de définir une interface utilisateur en Java (il blâme d’ailleurs le complément quasi-automatique de Java pour beaucoup de besoins : XML) ;
- le manque d’un vrai système de modules (il dénonce à cet égard la complexité de Maven et d’OSGi, en se prononçant en faveur du framework JBoss Modules) ;
- le manque de fonctions d’ordre supérieur et/ou de première classe ;
- la gestion de la concurrence (il fustige le fait que tout objet Java puisse être un sémaphore et juge qu’un langage ne devrait pas avoir de primitives de synchronisation, ce rôle devant selon lui être assumé par des librairies spécialisées) ;
- ce qu’il appelle les « verrues » du langage : getters/setters, tableaux et types primitifs, la gestion des valeurs null, les checked exceptions, la généricité (surtout des points qu’il juge obscurs comme la notion de type erasure ou les wildcards) et le système de typage d’une manière globale.
En pratique — et en résumé — Ceylon propose les points suivants :
- de garder tout ce qui fonctionne bien dans Java et en a fait le succès : la JVM, la garbage collection, pas de pointeurs, le typage statique, la lisibilité ;
- le tout objet : tout est type et il n’y a pas de types « primitifs » (mais on peut encore utiliser
void
pour spécifier le non-retour d’une fonction) ; - la possibilité de faire des mixins, c’est-à-dire d’implémenter des méthodes dans des interfaces (tant qu’il n’y a pas besoin d’initialisation) — fonctionnalité sans doute inspirée du Projet Coin ;
- une généricité à la fois plus simple et plus restrictive : les paramètres-types (type parameters) peuvent, à l’aide des mots-clés
in
etout
, être déclarés covariants ou contravariants, ce qui élimine la nécessité de passer par des wildcards, qui n’existent d’ailleurs pas dans ce langage: siBox
prend un paramètre-typeT
covariant, une variable de typeBox<Integer>
est alors assignable, sans transtypage explicite, à une variable de typeBox<Number>
. Cela conduit Gavin King à imaginer deux interfacesList<T>
, l’une covariante avecT
et prenant en charge les opérations de lecture, l’autre contravariante prenant en charge les opérations d’écriture (qui modifient la liste) ; - une structure intrinsèquement récursive: « une classe n’est qu’une fonction retournant à l’appelant une fermeture renfermant tous ses membres » (à la manière de ce que fait JavaScript) ;
- des fonctions d’ordre supérieur et de première classe : une fonction peut ainsi être passée en paramètre d’une autre fonction, une fonction peut contenir d’autres fonctions (ceci découle de la structure récursive du langage), une fonction peut être assignée à une variable, etc… — cependant, les fonctions anonymes (fonctions lambda) ne sont pas autorisées;
- classes et interfaces peuvent spécifier par avance l’ensemble des sous-types qu’elles peuvent avoir ;
- pas d’opérateur de transtypage (casting), mais la possibilité d’utiliser une structure
switch
particulière :
switch(maVariable) case (is UnType) {...} case(is UnAutreType) {...} else {...}
- des contrats plus forts :
- des valeurs ne sont nullables que si explicitement déclarées comme telles (avec un «
?
» derrière le type) et il faut alors obligatoirement les tester avec :if (exists maVariable) {...} else {...}
- les attributs d’une classe ne sont modifiables que si déclarés comme tels avec
variable
, et il faut alors utiliser l’opérateur:=
plutôt que=
pour leur réaffecter une valeur ;
- des valeurs ne sont nullables que si explicitement déclarées comme telles (avec un «
- des niveaux de visibilité simplifiés :
shared
(public) ou privé par défaut ; - des getters/setters implicites pour les variables d’instance ;
- pas d’exceptions vérifiées (checked exceptions) ;
- pas de surcharge (overloading) de méthodes mais en revanche des valeurs par défaut pour les paramètres ;
- pas de surcharge d’opérateur mais des équivalents/méthodes que l’on peut redéfinir pour un type les supportant. Par exemple
>
est équivalent à.largerThan()
qui peut être redéfini par les implémentations deComparable
; - une syntaxe alternative où il est obligatoire de nommer les arguments des méthodes, ce qui donne au final un langage descriptif que Gavin envisage comme une solution face à XML pour décrire des interfaces — l’exemple suivant, tiré de la présentation de Gavin King, est en effet assez parlant:
Table squares { title = "Squares"; rows = 10; Column { heading = "x"; String content(Natural row) { return $row; } } Column { heading = "x**2"; String content(Natural row) { return $row**2; } } }
Au rayon des choses étranges :
- pas de mot-clé
new
; - un seul constructeur autorisé (définitivement pas d’overloading donc), qui plus est fusionné avec la définition de la classe :
class Counter(Natural initialValue) { if (initialValue > 100) { throw OutOfRangeException() } ... }
- le support de la curryfication ;
- la documentation est conçue comme partie intégrante du langage (un peu comme dans Noop).
Que penser de cet énième langage fondé sur la JVM?
On retrouve en effet dans Ceylon beaucoup de fonctionnalités également présentes dans d’autres langages dérivés de Java (Scala, Groovy, Gosu, Fantom, pour ne citer qu’eux). On les retrouve aussi dans la réflexion de Stephen Colebourne pour définir un futur grand langage pour la JVM, qu’il a notamment présentée lors de la réunion du Paris JUG du mois de mars.
On constate donc bien que le but n’est pas de révolutionner le monde Java, et par ailleurs beaucoup de critiques ont déjà fusé sur le fait que Scala propose mieux depuis longtemps ou que ce langage propose tellement peu qu’il pourrait être mort-né.
Cela étant, les idées proposées sont plus que jamais d’actualité, et l’initiative étant portée par Red Hat et Gavin King (Hibernate, JBoss Seam), on peut légitimement espérer qu’elle fasse bien plus d’effet qu’un pétard mouillé.
Quoi qu’il en soit, il y a encore beaucoup de travail sur le projet : bien que le langage soit en étude depuis deux ans, aucun compilateur n’a encore vu le jour.
Evénements de notre communauté en France et à l’étranger
Scrum Day 2011: comme si vous y étiez!
Les webcasts du Scrum Day sont en ligne sur le wiki du FSUG. Revivez l’intégralité de l’événement, comme si vous y étiez! Les présentations du grand amphithéâtre ont été filmées, les autres sont diffusées en commentaires audio accompagnés de slides.
Commentaire