JAVA
La seconde journée a commencé par une keynote de Neal Gafter qui travaille désormais chez Microsoft sur les langages de la plateforme .NET, après être passé chez SUN où il a participé au design et l’implémentation de Java puis chez Google. Sa session était en partie consacrée à retracer l’historique du langage. Il commence par rappeler que Java a été créé pour pouvoir gérer le multihreading, qui selon lui va devenir de plus en plus important dans les années à venir.
L’historique
-
Ainsi on remonte jusqu’en 1996 et la parution du JDK 1.0. Dès l’année suivante, c’est le JDK 1.1 qui apparait. Ce sera la version de java la plus déployée, grâce notamment aux navigateurs web qui l’embarquent. C’est l’apparition des inner class, de l’interface de marquage Serializable, de JDBC, de RMI, et de la reflection. La base de java est là !
- En 1998, c’est le JDK 1.2 qui sort, avec Swing, les collections, le JIT (runtime compiler), et la version ‘professionelle’ de java, l’ancêtre de JEE. La conférence JavaOne réunit 14 000 personnes pour sa 3ème édition puis 20 000 un an après.
- En 1999 c’est aussi les JSR qui apparaissent avec notamment celle sur les Generics. J2ME sort ainsi que Java Professionnal Edition 1.2.
- En 2000, on voit apparaître J2SE 1.3, la fameuse API de debugging JPDA, les Dynamic Proxy et JNDI. 25 000 personnes se retrouveront pour la JavaOne.
- En 2001 c’est la sortie de J2EE 1.3 et la fin du procès entre Sun et Microsoft.
- En 2002, c’est J2SE 1.4 avec les assertions, le chainage d’exceptions , les I/O non bloquants et puis les API pour le XML, la sécurité et cryptographie, les logs et les regexp. C’est aussi la naissance de C# avec sa version 1. 14 000 personnes participent à JavaOne.
- 2003 est l’année de J2EE 1.4. La baisse de fréquentation de JavaOne continue mais avec tout de même 12 000 participants.
- 2004: C’est J2SE 5 avec les Generics, les annotations, les enums, foreach, le boxing/autoboxing, les varargs. 14 000 personnes à JavaOne.
- 2005 restera une année plus creuse pour java, 15 000 participants se retrouvent tout de même à JavaOne. De son coté, C# 2 inclus les generics et les closures.
- 2006: J2SE 6 avec les nombres à virgule flottante hexa décimaux (ah ?), l’API de scripting, les annotation processing, les stackmaps et aussi une amélioration des performances. C’est aussi JEE 5 et le lancement de l’openJDK. 13 personnes à JavaOne. En 2007 JavaFxScript est rendu open source, C# 3 sort mais pas de changement de Java.
- 2008 : 15 000 personnes à la JavaOne, JavaFX 1.0 sort mais toujours pas de changements du langage.
- 2009: Toujours autant de participants à JavaOne, JEE 6 sort mais toujours rien pour Java.
- En 2010 Oracle rachète SUN, JavaOne est fait en même temps que OracleOW, JavaFXScript est arrété et Java n’évolue plus. IBM adopte l’OpenJDK plutot qu’Apache Harmony et Oracle parle enfin de J2SE 7 et 8. Oracle poursuit Google en justice pour violation de copyrights et vol de brevets sur android (basé sur Apache/Harmony).
- En 2011 nous verrons J2SE 7 avec les switch sur les String, le type inference, le multicatch (sans violence), try-with-resource, encore un nouveau système d’I/O, et fork-join concurrency. JavaOne et OracleOW sont de nouveau séparés.
try-with-resources
try (FileReader fr = new FileReader("App.java");
BufferedReader br = new BufferedReader(fr)){
String line = null;
while (line = br.readLine() != null){
System.out.println(">>" + line);
}
} catch (IOException ioEx){
ioEx.printStackTrace();
}
Multicatch
try {
Class c = Example.class;
Field f = c.getDeclaredField("field");
f.set(null, "12");
} catch (NoSuchFieldException|IllegallAccessException x){
x.printStackTrace();
}
Type Inference
Map<string, list<integer="">> map = new Hashmap<>();
</string,>
- En 2012 nous aurons le droit à J2SE 8 avec les expressions lambda, les “virtual interface extension methods”, “bulk data operation”, et peut-être les annotations sur les types, la modularisation…
En conclusion
Neal conclue par les priorités d’Oracle qui seraient la facilité d’écriture de code, sa lisibilité, et puis les performances notamment avec le support des processeurs multi-core. Enfin pour Neal, c’est une bonne chose qu’Oracle soit “aux commandes” de java qui avait besoin de çà pour avancer, et surtout avancer dans la bonne direction. Il regrette tout de même le procès à Google qui a pour effet de diviser la communauté Java.
Bonus
Au milieu de sa présentation Neal Gafter avait proposé 2 puzzles. Le second avait déja été exposé par Joshua Bloch (co-auteur du livre java puzzles) aux Devoxx 2010 mais pour ceux qui le découvriraient cela vaut le détour:
No Pain, No Gain:
public class Rhymes{
private static Random rnd = new Random();
public static void main(String[] args){
StringBuffer word = null;
switch(rnd.nextInt(2)){
case 1: word = new StringBuffer('P');
case 2: word = new StringBuffer('G');
default: word = new StringBuffer('M');
}
word.append('a');
word.append('i');
word.append('n');
System.out.println(word);
}
}
- Pain, Gain ou Main (de façon aléatoire)
- Pain ou Main (de façon aléatoire)
- Main (toujours)
- Autre chose
J’éditerai la réponse dans quelques jours
(allez quand même 1 indice: il y a 3 erreurs différentes dans ce code)
It’s elementary (le plus dur):
public class Elementary {
public static void main(String[] args) {
System.out.println(12345 + 5432l);
}
}
Quel est le résultat ?
- 66666
- 17777
- Autre chose
Indice: Mais que fait la police ?
Microsoft Azure For Java

Une fois sa présentation terminée, Neal a fait intervenir un de ses collègues de chez Microsoft France pour promouvoir le cloud de Microsoft qui supporte le langage Java. La session était articulée autour d’une démonstration du produit et d’un discours qui cherchait à séduire l’assistance manifestement adepte de Java.
Clairement positionné en concurrent d’Amazon et GoogleApp Engine, la plate-forme propose une interface pour déployer sur le cloud avec Eclipse, Visual Studio et en ligne de commande grâce à un starter kit.
Microsoft Azure For Java permet de gérer le front-end et le back-end en proposant entre autre une base SQL, NOSQL, du file storage, …
Les drivers JDBC sont implémentés et Hibernate fonctionne. On peut également choisir la JRE de son choix et son serveur d’application. Il y a un starter kit avec Tomcat.
RabbitMQ
RabbitMQ est un système de messaging open source entre applications. Ses principaux atouts sont l’implémentation AMQP, un standard open source pour le messaging, le support de nombreux langages et sa “scalabilité”.
Rob Harrop, développeur senior sur le projet, insiste tout d’abord sur la profonde différence entre AMQP et JMS: “Forget what you know !”.
Après avoir lancer RabbitMQ sur son poste, il commence par présenter l’interface de gestion web. On y retrouve également différentes statistiques sur les messages qui transitent.
Rob expose ensuite les 2 concepts de base de RabbitMQ: les “queues” et “exchanges”.
Les messages sur les queues peuvent transiter sous forme de String, XML, JSON, …
Puis nous avons le droit à une longe démonstration de la plate-forme de messagerie avec des l’envoie et la réception de message depuis plusieurs applicatifs écrits dans des langages différents et avec différents protocoles. Rien de moins que Java, Python, Erlang et JavaScript (avec NodeJS) pour les langages et AMQP et STOMP pour les protocoles.
Architectures découplées
Theo Schlossnagl est le fondateur de plusieurs sociétés de conseil, il est également auteur du livre Scalable Internet Architectures et participe à un nombre impressionnant de projets open source, dont nodejs sur lequel il développe l’implémentation AMQP.
S’il ne fallait retenir qu’une seule session de ces deux jours, ce serait sans aucun doute celle là. Le charisme du personnage et son discours bien trempé ont permis de remettre quelques idées à plat.
Loin d’être sceptique sur les architectures décentralisées dans le cloud, il souligne quelques points. En effet le cloud ne résous pas tous les problèmes. Ainsi toutes les entreprises ne souhaitent pas forcément faire sortir toues leurs données de leurs serveurs. Il nous met également en garde sur le fait que ce n’est pas parce qu’une application est déployée sur 100 serveurs que celle ci va savoir s’en servir pour améliorer ses performances.
Pour Theo, avant de penser à scaler en rajoutant une instance pour son application, il faut faire un travail de recensement des flux de l’application. D’après son expérience, rien n’est jamais comme on pense que c’est fait: une transaction en trop lors des écritures en base, des allers retours client/serveurs inutiles, … Bref il préconise la ‘data flow map’ basée sur la réalité et non sur le supposé.
Dans un deuxième temps il montre que l’expérience utilisateur sur une application influe directement sur l’architecture technique à mettre en place. Il rappelle que les systèmes finissent toujours par être en erreur à un moment ou à un autre et qu’il faut prévoir ces cas. Le cas le pire étant les systèmes qui ne répondent que de façon occasionnelle (un serveur complètement tombé peut être redémarré).
Dans une démonstration d’une application sociale qui récompenserait l’utilisateur pour une action sur le site, par exemple se logger, il montre l’importance de choisir son architecture de telle sorte que la main soit rendue à l’utilisateur dès lors qu’il est connecté. Cette stratégie est bien meilleure que d’attendre que le calcul de la récompense soit terminé, surtout si une panne ou une surcharge intervient sur le système responsable de ce calcul.
Pour la démonstration, il utilise NodeJS. Selon lui, JavaScript n’est pas aussi performant que Java, mais bien suffisamment pour faire tourner un serveur web. Et surtout “JS does scale”.
Si vous êtes intéressés par les problématique de ces architectures, je vous conseille de, comme moi, vous jeter sur son livre !
Flex 4.5
Michaël Chaize, ingénieur et avant-vente chez Adobe, nous a présenter Flex 4.5. La présentation était forcément un peu commerciale mais elle a eu le mérite de donner la parole à des pro-flex quand aujourd’hui on n’entend plus parler que de HTML 5.
Après quelques rappels sur l’offre, Michaël a insisté sur la popularité de la plateforme. Adobe se targue d’avoir signer un accord avec 19 des 20 acteurs majeurs de l’IT. Il souligne tout de même qu’après un premier refus, Apple autorise aujourd’hui d’installer sur ses terminaux mobiles des applications dont le code a été généré. C’est grâce à cette technologie qu’il est donc possible de lancer ses application Flex sur IPhone/IPad.
Adobe propose donc avec son nouveau SDK de développer une seule fois une application mobile qui pourra être déployée sur les plateformes tournant sur Android, iOS et sur le Blackberry PlayBook.
Des composants spécifiques aux terminaux mobiles ont été ajoutés ajoutés ainsi que les comportements classiques comme le retour arrière. La gestion de la mémoire a été optimisée avec comme la destruction automatique d’une vue dès que l’on passe à la vue suivante (configurable). La gestion des résolutions d’écran différentes entre les terminaux fait également partie du lot.
Michaël nous assure que les performances sont les mêmes que pour une application native.
La démonstration a continué avec l’implémentation en quelques minutes d’un client (lecture) twitter. Il y a aussi eu l’intervention sur scène d’un développeur qui faisait partie du public, pour montrer son application flex tourner sur 3 différentes machines.
La fin de la démo montrait une application utiliser le LiveCycle, l’offre payante de Flex qui permet ici d’incorporer très facilement la vidéo et le son (visioconférence).
Enfin il a rappelé que grâce à la communauté open source, tous les outils disponibles sur Java existent sur Flex: Tests unitaires, Sonar, intégration continue avec Maven ou Ant, … (pour ma part je fais aussi des tests IHM automatisés). L’IDE FlexBuilder est payant mais on peut aussi utiliser IntelliJ IDEAL (payant aussi).
ElasticSearch
Shay Banon est le créateur d’elasticsearch qu’il voit comme le successeur de Compass. C’est un projet open source de recherche basé sur Lucene.
Aucun slide pour cette présentation mais une démo assez complète des fonctionnalités de l’outil. Tout d’abord il insiste sur sa “scalabilité” en déployant et supprimant à chaud des nouvelles instances du moteur.
Pour la recherche, l’indexation et l’ajout de contenu tout se fait facilement en REST avec du JSON. Il existe également une API Java et Groovy mais qui ne seront pas montrées.
Mis à part les recherches classiques, Shay a fait une démonstration d’un Percolator. C’est une requête pré-enregistrée qui renvoie ses résultats à la fin d’une indexation. Il a aussi parlé des Facets. Une facet est un élément fournit dans chacun des résultats. Elle permet d’enrichir la réponse dans sa globalité (pour un usage statistique par exemple).