vendredi 26 juin 2009

Veille technologique semaine 25

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • sortie d'eclipse 3.5 Galileo
  • interview de Rod Johnson au sujet de Spring 3.0
  • pourquoi modéliser : vaste sujet. Une raison qui est majeur mais qui est souvent ignorée : comprendre et faire comprendre. C'est la raison essentielle. Par ailleurs, cela permet aussi de généré l'ensemble du code : c'est le model driven.
  • Pourquoi l'héritage d'implémentation est une solution à minimiser. Toutes les règles de conception proposent de privilégier l'agrégation plutôt que l'héritage d'implémentation.
  • Le HTML 5 suite : exemple avec des demos
  • Un composant Web pour Java : JWebPane
  • La polémique au sujet de la modularité proposée par OSGi et Jigsaw.
  • Deuxième concours "coin" des propositions de modification du langage Java pour le JDK 7.
  • La gestion des interruptions des Thread Java : pour être interrompu, il faut être interruptible.

Bonne lecture.


Eclipse Galileo Release Now Available
The Eclipse Project has released Eclipse 3.5 Galileo, an open source integrated development environment for Java. The Galileo release, the annual Eclipse release, is now available for download. This year the release train includes 33 project and over 24 million LOC. You can download now at eclipse.org/galileo.(Other languages such as C++ are supported, but not especially well. I'll have to try the new PHP and XSLT support.)

New features in 3.5 include (among many others)
  • Mac Cocoa 32 and 64 bit support.
  • New Memory Analyzer tool to help analyze memory consumption of Java applications
  • PHP Development Tools (PDT) 2.1 is first PHP toolkit to support the new PHP 5.3 language release, including namespaces and closures.
  • New Mylyn WikiText support for editing and parsing wiki markup.
  • New XSL tooling for XSL editing and debugging.
  • Solaris support
  • toString() generation
  • {@inheritDoc} in the javadoc popups.
  • Warning overriding a synchronized method by a non-synchronized method.


Eclipse Galileo released
The Eclipse Foundation today announced the release of Eclipse Galileo, the simultaneous release of 33 projects, including the venerable Eclipse JDT. As well as the new features covered by InfoQ already, the Galileo release includes the PHP Development Tools Project, as well as stalwarts like modelling packages and the persistence layer EclipseLink (formerly known as Oracle's TopLink).
For component developers, the Galileo release also adds the latest OSGi Declarative Services to the standard Equinox runtime, which is included in the RCP client. The Mac OS X runtime is also given a boost, as the new Eclipse is based on Cocoa (rather than the older Carbon based APIs) which give new features such as dialog sheets as well as a 64-bit version capable of running on the latest Intel 64-bit Java 6.



Interview de Rod Johnson, Spring 3.0 et le reste
Dans une interview publiée cette semaine sur InfoQ sous forme d'une vidéo de 30 minutes, Rod Johnson répond à quelques questions indiscrètes sur l'état d'avancement et les orientations des différents projets de la Springosphère.

Nous retiendrons :

  • Le support des fonctionnalités REST est certainement l'une des nouveautés les plus attendues pour le prochain Spring 3.0 dont le premier milestone est disponible depuis fin 2008. Si cette fonctionnalité présente quelques similitudes avec Spring WS, elles n'adressent pas les mêmes problématiques et restent complémentaires. À l'origine le support de REST devait d'ailleurs être implémenté sur la base de Spring WS. Si au final Spring MVC a été jugé plus adapté, certaines fonctionnalités ont tout de même été extraites de Spring WS pour être utilisées (OXM).
  • Si comme nous, vous vous demandiez quelles étaient les intentions de SpringSource après le rachat de G2One en novembre dernier, voici un embryon de réponse. Rod nous dévoile les premiers fruits de ce rachat avec Spring Java Config. Disponible en test depuis 6 mois environ en pré-version dans le jpetclinic (projet exemple Spring), nous nous interrogions sur la valeur ajoutée apportée par cette fonctionnalité. Pour mémoire, elle permet de configurer vos applications Spring par l'intermédiaire de code Java comme vous le feriez en XML (voici un exemple de code). Cette possibilité prend tout son sens si on la croise avec les commodités offertes par Groovy. Vous pourrez probablement remplacer demain vos fichiers de configuration statique XML par des DSL dynamiques Spring-Groovy.
  • Spring 3.0 sera l'occasion de mettre en pratique la nouvelle politique de maintenance adoptée par Spring l'année dernière. Celle-ci incite fortement ses utilisateurs à coller aux dernières versions du framework. Les corrections de bugs n'étant plus repackagées sur les anciennes versions majeures du framework. Ainsi, à la sortie de Spring 3.0, si vous trouvez un bug dans l'un des modules de votre Spring 2.5.6, il vous faudra : soit monter de version, soit repackager vous-même votre propre version corrigée. Cela ne devrait pas poser trop de problèmes au vue de la maturité de la version 2.5. De plus, la rétrocompatibilité exemplaire entre Spring 3.0 et Spring 2.5 devrait vous permettre une montée de version en douceur. Rappelons tout de même que Spring pratique le pruning : la plupart des éléments dépréciés dans Spring 2.5 disparaîtront donc de la version 3.0.
  • Certains notent que Java EE se rapproche de Spring en offrant des fonctionnalités similaires, l'inverse est également vrai : Spring dmServer implémentera le profil Web de la spécification Java EE. Toutes les spécifications ne seront pas couvertes dans leur intégralité, c'est la nuance qui sépare un rapprochement d'une convergence.
  • C'est sans surprise que Rod nous parle de la distance que Spring prend avec SCA. SpringSource a fait le choix de partir sur une technologie concurrente plus porteuse : OSGi. De plus, SCA ne dispose pas d'un nombre d'utilisateurs assez important pour intéresser SpringSource pour le moment.
  • Cette interview nous a également permis de découvrir une fonctionnalité peu connue pourtant présente depuis Spring 2.0 :l'annotation @Configurable.
Pour conclure, si cette interview n'apporte véritablement aucune annonce fondamentale sur la stratégie de SpringSource, elle a le mérite de synthétiser les discussions en cours et de donner une idée plus précise de la roadmap de Spring pour les mois à venir.


Pourquoi modéliser ?
Quel que soit le langage de modélisation ou la méthode utilisé, vous vous êtes peut être demandé pourquoi réaliser des modèles, à quoi cela peut-il vraiment servir à part me faire perdre du temps alors qu'il serait plus rapide de passer directement au codage. Vous avez peut être aussi travaillé à partir de modèles réalisés par les autres et vous n'avez pas vraiment saisie l'intérêt, voire vous vous êtes dit « mes ces modèles sont faux, je ne fais pas comme cela dans mon code ».

Un modèle va donc d'abort nous servir à communiquer et échanger des points de vue afin d'avoir une compréhension commune et précise d'un même problème.



Why extends is evil
Improve your code by replacing concrete base classes with interfaces.
The extends keyword is evil; maybe not at the Charles Manson level, but bad enough that it should be shunned whenever possible. The Gang of Four Design Patterns book discusses at length replacing implementation inheritance (extends) with interface inheritance (implements).
Good designers write most of their code in terms of interfaces, not concrete base classes. This article describes why designers have such odd habits, and also introduces a few interface-based programming basics.


Comment HTML 5 va changer la donne
Depuis l'avènement du Web, il n'y a eu que peu de changements radicaux. Nous sommes partis de simples pages HTML codées en "dur", puis nous avons eu les contenus dynamiques grâce au cumul de PHP et MySQL, et plus d'interactivité avec Javascript. Le mélange des trois technologies a abouti à Ajax, pour des pages plus réactives encore. Les feuilles de style permettent de faire évoluer le design d'un site plus simplement, et les flux RSS nous gardent informés des nouveaux contenus.
Au regard des ans, le Web avance à un train de sénateur, comparé aux autres branches de l'informatique. L'organisme qui régule les standards du web, le consortium W3C, s'est d'ailleurs vu remis en question précisément pour son inertie, poussant les développeurs de navigateurs à s'allier pour créer le WHATWG, dont les travaux ont d'ailleurs servi de base de travail pour HTML 5, en chantier depuis maintenant plus de cinq ans. Il faut dire qu'il n'est pas aisé d'effectuer une transition technologique dans le domaine des standards du web : la multitude
de machines susceptibles de consulter une page web, mais également les capacités des systèmes d'exploitation ou encore la mise à jour des divers navigateurs n'y aident certainement pas.


TWheeb Hypertext Application Technology
The demos and segments of this talk are:
1. video (00:35)
2. postMessage() (05:40)
3. localStorage (15:20)
4. sessionStorage (21:00)
5. Drag and Drop API (29:05)
6. onhashchange (37:30)
7. Form Controls (40:50)
8. canvas (56:55)
9. Validation (1:07:20)


Ces exemples sont uniquement fait en html 5 : FireFox 3.5, Saphari 4 ...

http://www.chiptune.com/landscape.html
http://www.chiptune.com/starfield/starfield.html
http://www.chiptune.com/kaleidoscope/
http://www.chiptune.com/ip/
http://www.chiptune.com/speedtest/
http://www.lostcursor.com/
http://www.zachstronaut.com/lab/isocube.html


Embarquer le Web dans Java avec JWebPane
Depuis plusieurs années, lorsque l'on veut afficher une page Web au sein d'une application Swing, il faut se tourner vers le composant Browser de la librairie Jdic. Ce composant utilise Embeddable Mozilla, et se présente sous la forme de code natif décliné pour chaque OS et d'un wrapper Java. Outre la nécessité de fournir une version spécifique à chaque OS, ce composant présente également l'inconvénient de mal s'intégrer aux applications Swing du fait de sa nature heavyweight. Pour rappel, un composant est dit heavyweight lorsqu'il est dessiné par l'environnement graphique du système d'exploitation ; à l'opposé il devientlightweight s'il est dessiné par l'application, ce qui est le cas de l'ensemble des composants Swing. Or, faire cohabiter les deux types de composants est délicat car n'étant pas dessinés au même moment, leur superposition est confuse et des chevauchements non contrôlables apparaissent.

Lors de JavaOne, Alexey Ushakov a fait la démonstration du composant JWebPane sur lequel il travaille actuellement et vient de poster des captures d'écrans. Contrairement à Jdic Browser, JWebPane se base sur le moteur WebKit pour effectuer le rendu HTML. Or celui-ci se caractérise par sa nature lightweight s'intégrant agréablement à Swing. La présentation d'Alex Ushakovpermet également de constater que son composant est particulièrement riche en possibilité d'interactions et apporte un support pour d'éventuels plugins tels que Flash.

On ne peut qu'apprécier le choix de Sun de créer un composant pour Swing, réutilisable dans JavaFX, plutôt que de privilégier uniquement JavaFX comme cela est souvent le cas depuis son arrivée. L'intégration de JWebPane au JDK 7 est maintenant indispensable pour rendre ce composant réellement exploitable : se basant sur WebKit, il repose donc sur des librairies natives qu'il sera nécessaire de livrer avec les applications Java et seul l'intégration au JDK permettrait de l'éviter. Or, malgré les appelsde la communauté, JWebPane reste pour le moment absent de la liste des features du JDK 7 et il est uniquement question d'unemise à disposition sur Java.net.


Jigsaw vs OSGi
Sept mois après le démarrage du projet Jigsaw, sa légitimité n'est toujours pas reconnue face à OSGi qu'il est venu défier sur son propre terrain.
La semaine dernière JavaPosse diffusait une interview de Mark Reinhold et Alex Buckley, où ils ont pu présenter plus en détail leur vision de Jigsaw :

  • Il a été conçu pour modulariser le JDK et est intégré au langage.
  • Il ne repose pas sur une spécification car cela n'était pas possible compte tenu du calendrier de JDK 7. Il est donc à considérer comme un "détail d'implémentation" tout comme la gestion du classpath l'était dans les JVMs précédentes.
  • Il n'est pas supposé entrer en concurrence avec OSGi, des outils permettant l'intégration entre modules Jigsaw et bundlesOSGi étant prévus, mais non prioritaires.
Dans le même temps, Eric Newcomer (Co-Chair, Enterprise Expert Group de l'OSGi Alliance), postait une série de billets très virulents à l'égard du projet Jigsaw, reprochant principalement que Sun n'ait pas voulu se tourner vers OSGi, ne cherchant pas à combler les manques qu'il y trouvait, se tournant immédiatement vers une nouvelle technologie et ignorant donc les 10 années d'expérience acquises par OSGi.

En fait, il semble n'y avoir aucune justification technique permettant d'expliquer l'orientation de Sun vers Jigsaw plutôt que vers OSGi ou vers une évolution d'OSGi intégrée au langage. La véritable raison serait alors à chercher sur le plan politique : la modularisation est un concept important qui manque à Java actuellement et Sun ne pouvait probablement pas se permettre, pour l'ajout d'un tel concept, de s'appuyer sur une spécification émise en dehors du JCP sur lequel il a la gouvernance.


The Two Faces of Modularity & OSGi
There are two aspects to OSGi - the OSGi runtime model and the OSGi development model. Today, emphasis is on the runtime model. But eventually, the importance of the development model will take center stage.

  • The Runtime Model
  • The Development Model
  • What We Should Do Right Now

Project Coin Announces Second Candidate List
Project Coin aims to make small language changes for Java 7 which simplify day to day coding for developers. In a previous InfoQ article we looked at the first "for further consideration" cut that had been made for the project comprising: strings in switch, improved exception handling, Automatic Resource Management, improved type inference for generic instance creation, Elvis and other null-safe operators, and simplified Varargs method invocation. Since then a further five proposals have been added to the list.


Dangerous new Language Features: Indexing access syntax for Lists and Maps
Recently I read a the proposal for a new feature in Jdk7 that will provide indexing access for Lists and Maps. The normal examples are quite easy to read or write:

List<String> names = ...
names[0] = "Maarten Winkels";
String you = names[1]; // -> names.get(1);
Map<String, String> residence = ...
residence["Maarten Winkels"] = "India";
String r = residence["Koningin Beatrix"];



Gérer proprement les interruptions de threads en Java
Voici la traduction rapide d'un article d'Alex Miller (http://tech.puredanger.com/2009/06/08/interrupt-handling/) (avec son aimable permission naturellement), qui récapitule les grands principes de gestion de l'interruption des threads. Un sujet souvent mal maîtrisé, qui pourtant, vous allez le voir, est relativement simple à comprendre.

Aucun commentaire: