Le Java nouveau est arrivé
Le monde des ascètes de la programmation orientée objet a été éclairé récemment par deux annonces relatives à Java : la sortie du Java Standard Edition 6 (JSE 6 - alias Mustang) la semaine dernière et la libération du code source du Java Development Kit (JDK) annoncée il y a un mois. Si ces termes vous paraissent ésotériques ou abscons, je vous recommande de consulter le schéma suivant avant de lire la suite. Dans ce billet je reviens sur ces deux évènements d'importance inégale mais qui contribuent, chacun, à ancrer Java sur les bons rails. Honneur au plus important mais plus ancien et petit retour sur la pellicule du temps :
La question n'est pas de savoir si nous ouvrirons le code source de Java mais comment
-- Rich Green, Vice-président de Sun Microsystems
C'est la réponse de Rich Green à une question que lui posait Jonathan Schwartz, l'actuel CEO de Sun Microsystems, lors du dernier JavaOne à San Francisco et en mai dernier. De mon point de vue, ce fut le point de non-retour. A ce stade, je sus que Java serai open source sous peu.
Nous n'avons pas eu à patienter longtemps, six mois pour être précis. En effet, le même Jonathan Schwartz à indiqué en novembre dernier qu'il libèrera de manière incrémentale le JDK durant le premier semestre 2007, sous triple licence : Général Public Licence (GPL), GPL avec exception Classpath et Licence commerciale. Mon opinion est que la publication sous triple licence ne devrait rien changer aux habitudes de la communauté Java mais constitue un formidable appel de Sun pour l'agrandir. Paradoxalement je pense que Sun aura un travail de pédagogie à faire auprès de ceux qui tiraient bénéfice du caractère propriétaire de Java. Sun devra notamment étayer à ces derniers en quoi cette divulgation ne menace en rien leurs profits.
Concrètement, d'un point de vue philosophique, le choix de la GPL est judicieux, dans la mesure où il autorise les distributeurs Linux à livrer le JDK avec les versions libres de leurs logiciels. De plus de manière purement mécanique, cette licence devrait attirer à Java des développeurs du libre jusque-là inquiets par rapport à sa licence. Sous un angle technique, la GPL avec exception Classpath permet de contourner le caractère héréditaire de la GPL en autorisant les développeurs à mélanger du code sous cette licence avec du code propriétaire. Sans cette disposition, tous les logiciels développés en Java et utilisant le JDK sous GPL (pure) seraient in fine sous GPL. Elémentaire mon cher Watson, mais catastrophique pour tout l'écosystème qui vit de Java. Enfin, d'un point de vue comptable, en proposant une licence commerciale, Sun permet aux entreprises qui le souhaitent de bénéficier de services supplémentaires et spécifiques.
Au demeurant, il est important de signaler que cette annonce ne concerne pas le JDK 6 annoncé il y a une semaine et qui est distribué sous la licence habituelle. De fait, nous ne sommes toujours pas au premier trimestre 2007. Même si ipso facto, le code source auquel nous accéderons sera en grande partie celui qui compose Java 6.
Terminons ce billet par le JSE 6. Je pense rédiger sous peu des articles plus techniques sur les bienfaits de cette version. D'ici là, je préfère rester elliptique pour garder ce billet digeste. La première chose qu'on remarque à la lecture du communiqué officiel, c'est le changement de dénomination. La version 6 de Java s'intitule JSE 6 et non J2SE 6. Exit le « 2 » auquel Sun nous avait habitué. Comme Sun l'avait fait savoir, cette version focalise sur les applications Java 2D, le XML, les Web Services, la compatibilité avec l'existant et la stabilité. C'est probablement ce qui justifie l'impression de « rupture tranquille », pour reprendre une expression à la mode en politique.
Les entrées sorties : Quand on pense nouveauté dans les entrées/sorties on imagine java.nio. Je suis assez perplexe devant la quantité de développeurs Java qui méconnaissent ce package introduit avec le JDK 4. Ce package propose, assurément, des méthodes qui permettent d'interagir de manière plus performante avec du code natif. Les changements relatifs à ce package sont assez faibles, essentiellement de nouvelles méthodes dans la classe Buffer pour manipuler des Arrays.
Le langage et les outils : Ceux qui ont déjà essayé d'écrire « ê » ou « ñ » dans une console ou de traiter des mots de passe avec System.out et System.in seront ravis de découvrir System.console(). Cette méthode permet de lire (y compris des mots de passe) et d'écrire dans la console système. Cerise sur le gâteau, elle gère l'encodage et de ce fait ringardise System.out.println(). Notez enfin l'arrivée de la nouvelle Interface java.util.Deque pour double ended queue (queue qui supporte l'insertion et la suppression aux deux extrémités).
Le XML : Le statut particulier d'XML dans la galaxie Java lui permet d'évoluer de manière insubordonnée à ce dernier. Chaque nouvelle version de Java depuis la 4 se borne à intégrer les dernières nouveautés. Mustang ne déroge pas à la règle et intègre donc le Java Architecture for XML Binding (JAXB) 2.0, les signatures digitales XML, et les API de Streaming XML.
Les Web Services : Pour surfer sur la popularité croissante des Web Services, le JSE 6 a re-copié toutes les API dévolues aux Web Services et précédemment livrées avec le dernier J2EE. Vous trouverez également le Java API for XML-Based Web Services (JAX-WS) 2.0 dans javax.xml.ws, le SOAP with Attachments API for Java (SAAJ) 1.3 dans javax.xml.soap et enfin les Web Services Metadata dans javax.jws.
API du Compilateur Java : Vous souhaitez depuis fort longtemps, instrumentaliser le compilateur java pour compiler vous-même vos classes Java depuis d'autres classes Java ? Réjouissez-vous, vous avez été entendu. En effet, la classe JavaCompilerTool et notamment sa méthode run() ont été créés dans ce but.
Langage de script embarqué dans Java : le JSE 6 est livré avec un moteur permettant d'embarquer et d'interpréter des langages de script. Je pense évidemment à Javascript, mais aussi à PHP et Ruby. Installez le JDK 6 et tapez jrunscript -q pour comprendre. La prochaine étape sera peut-être l'intégration de Groovy. A surveiller.
Java 2D (AWT et Swing) : J'ai noté quelques nouveautés qui vise à mieux intégrer les applications Java 2D dans les bureaux modernes. Je pense aux fenêtres de lancement (Splash screen), à la possibilité d'ajouter une icône dans la barre des tâches (System tray) et enfin le support du lissage des polices (Text antialiasing).
JDBC 4.0 : Un gros travail de simplification et de nettoyage a été effectué dans cette version. Pêle-mêle : Simplification du chargement des pilotes pour base de données, meilleure gestion des exceptions, amélioration du traitement des BLOB et CLOB, support des SQL Rowid et des données au format SQL 2003 XML.
Les annotations : Les annotations sont un concept mis en avant avec java 5, la version 6 de java apporte sont lots de nouvelles annotations.