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.

vendredi 19 juin 2009

Veille technologique semaine 25

Pour cette semaine 25, je vous propose l'actualité suivante :
  • Oracle confirme son intérêt pour JavaFX
  • Deux articles de Wikipedia, à propos de la programmation déclarative versus la programmation impérative.
  • L'intégration de la géolocalisation dans les navigateurs internet avec html 5.
  • HTML 5 peut-il concurrencer flash, JavaFX ou silverlight ?
  • Une comparaison du développement de logiciel pour les plates-formes smartphone : JavaFX, Androide et iPhone.
  • L'invocation dynamique dans la JVM : performance pour les langages à typage dynamique : Groovy, JRuby, Jython ...
  • Un article au sujet du projet Jigsaw intégré au JDK 7 : première conséquence visible, la suppression du classpath ! Explication.
  • La suite avec la comparaison Jigsaw et OSGi.
  • Java et le temps réel : c'est quoi le temps réel et le runtime Java
  • Java et le temps réel : IBM propose un outil.
  • Un résumé des visisbilités en Java : public, protected, pakage private, private : conséquence.
Bonne lecture


Oracle s'investit dans JavaFx
Du moins, Larry Ellison, qui suggère de ré-écrire l'UI de OpenOffice en utilisant JavaFx.
En attendant cette hypothétique révolution, le framework de Sun a dévoilé quelques nouveautés durant JavaOne, en ajout à la sortie de la version 1.2 dont nous nous faisions l'écho la semaine dernière
.
  • Démonstration d'un outil collaboratif de développement : en plus des annonces de renforcement du développement du plugin JavaFx-Eclipse, Sun a donné une démonstration publique d'un outil de création graphique assez impressionnant : gestion de la Scene, drag and drop de composants, d'effets... Reste à savoir quand celui ci sera disponible...
  • Autre démonstration, plus attendue, celle de JavaFx for TV, avec une application réalisant des prévisualisations et des téléchargements de films à partir d'un téléviseur LG.



Imperative programming
In computer science, imperative programming is a programming paradigm that describes computation in terms of statements that change a program state. In much the same way that imperative mood in natural languages expresses commands to take action, imperative programs define sequences of commands for the computer to perform.
The term is used in opposition to declarative programming, which expresses what needs to be done, without prescribing how to do it in terms of sequences of actions to be taken. Functional and logical programming are examples of a more declarative approach.


Declarative programming
In computer science, declarative programming is a programming paradigm that expresses the logic of a computation without describing its control flow. Many languages applying this style attempt to minimize or eliminate side effects by describing what the program should accomplish, rather than describing how to go about accomplishing it. This is in contrast from imperative programming, which requires a detailed description of the algorithm to be run.


La géolocalisation dans les navigateurs
HTML 5, la nouvelle mouture du célèbre langage à balises, va intégrer un certain nombre de nouveautés très intéressantes (voir ce billet). Parmi ces nouveautés, la balise ; qui permettra d'intégrer la géolocalisation dans les navigateurs de PC ou de téléphones.
Cette fonction permettra de développer facilement des applications Web contextuelles. Rappelons qu'il est aujourd'hui nécessaire de développer une application embarquée pour tirer parti de la géolocalisation. C'est une des raisons pour lesquelles le développement d'application iPhone connait un tel engouement : une simple application web ne permet pas de tirer partie du GPS. Un bon exemple de ce problème est l'application PagesJaunes (développée par SQLI...) : sa seule différence avec la version Web iphone.pagesjaunes.fr (http://iphone.pagesjaunes.fr) est la géolocalisation préalable à une recherche d'adresse.


HTML 5: Could it kill Flash and Silverlight?
HTML 5, a groundbreaking upgrade to the prominent Web presentation specification, could become a game-changer in Web application development, one that might even make obsolete such plug-in-based rich Internet application (RIA) technologies as Adobe Flash, Microsoft Silverlight, and Sun JavaFX.


Mobile Application Contest : Java FX - Android - iPhone
Dans le cadre de nos XKE (formations internes), beaucoup d'entre nous ont émis le souhait
d'étendre leur champ de compétence au développement d'application sur téléphone mobile. Nousavions plusieurs technologies dans nos bagages : l'installé iPhone (à première vue pas vraiment compatible avec des développeurs Java), l'étoile montante Android, et l'outsider JavaFx. Mais pour voir au-delà des promesses marketing, il nous fallait nous mesurer à ces technologies dans le cadre de leur utilisation réelle, sur un projet de la 'vraie vie'. Ainsi est née l'idée de ce contest : 3 technologies, 3 développeurs Java (Amin Fathallah sur iPhone, Erwan Alliaume sur Android, Pablo Lopez sur JavaFx), et un mois (sur notre temps libre) pour traiter d'un sujet choisi par nos collègues : afficher sur le téléphone mobile l'ensemble des photos Flickr à proximité de l'utilisateur géolocalisées sur une carte. Chaque technologie a donné lieu à une démo en live et une analyse du ressenti lors du XKE suivant.

Résultats et commentaires
Commençons par un survol des démos : JavaFx très poussif, sur émulateur. Pas un franc succès. Android sur un G1 flambant neuf, très convaincant, notamment par les divers ajouts hors cahier des charges. Large vainqueur à l'applaudimètre, l'iPhone, avec une UI très soignée et des effets graphiques à la hauteur de la réputation du célèbre terminal. Dans le même ordre, voici l'analyse de chacun des développeurs.


L'invocation dynamique pour Java se concrétise
Rémi Forax, l'un des 4 committers d'ASM, un framework de manipulation de bytecode largement utilisé dans le monde Java, vient d'annoncer que leur dernière version supportait l'instruction invokedynamic.

Cette instruction est définie par la JSR-292 et vise à simplifier l'invocation de méthodes non connues lors de la compilation, ce qui constitue une des principales capacités des langages dynamiques tels que Groovy. Un gain significatif de performance est donc attendu pour ces langages, puisqu'ils n'auront alors plus à s'appuyer sur un coûteux mécanisme d'introspection ou de génération dynamique de bytecode d'invocation.

Au delà des langages dynamiques qui sont les premiers destinataires de cette JSR, de nombreux frameworks pourront également profiter de cette possibilité. En effet, la manipulation de JavaBeans et d'annotations, deux concepts majeurs dans le monde JEE actuel, induisent de nombreuses invocations de méthodes découvertes au runtime. Dans de larges projets, cela conduit actuellement à la génération massive de bytecode pour éviter de très lentes introspections, induisant une forte consommation de la PermGen des JVMs.

Le support de l'instruction invokedynamic par ASM, combiné au fait que le draft actuel de la JSR-292 est d'ores et déjà implémenté et disponible dans la preview de l'OpenJDK 7 depuis la b59, permet d'être optimiste quant à la finalisation prochaine de cette JSR.


Classpath hell just froze over
"The classpath is dead" … that's what Mark Reinhold (Principal Engineer @ Sun) said at a general session during JavaOne 2009. It's the type of statement that should resonate with any of us who have been victims of classpath/jar hell. Mark announced this in the context of reviewing the new language features due to be released in JDK 7 (ETA 2010) or more specifically the new Java module system codenamed Jigsaw.

Module Systems and Jigsaw
Jigsaw is a low level implementation of a module system, which also includes some language and VM changes that are specified in JSR 294 (note that Jigsaw is being done outside of any JSR and is not a reference implementation of 294). Another implementation of a module system most Java developers are likely more familiar with is OSGi. But what is a module system and why do we need one?


Java Modularity - OSGi and Project Jigsaw
The JSRs Initially, there were three primary JSRs surrounding Java modularity - JSR 277, JSR 294, and JSR 291. Descriptions follow:

  • JSR 277 - Also known as the Java Module System, JSR 277 was an alternative module system being proposed that would have provided similar, though less, than what OSGi currently provides.
  • JSR 291 - Proposed by IBM around 2006, JSR 291 defines a dynamic component model for Java SE. This JSR brought OSGi into the JCP. In general, this did for Java SE what JSR 232 did for Java ME.
  • JSR 294 - Currently in progress, this JSR will define the language and virtual machine changes that will be made to support modularity on the Java platform.

Today, JSR 277 is inactive, JSR 291 is final, and JSR 294 is in progress. That makes it all seem rather simple. But things get messy pretty quickly. JSR 294 does not define a module system, it simply specifies changes to the language and VM that module systems can leverage. The intent is that module systems be built atop JSR 294. And today, there are two separate module systems for the Java platform - Project Jigsaw and OSGi.
The Module Systems
Many have heard of OSGi. It's been around for over 10 years, originated in the mobile and embedded systems space, was popularized by the Eclipse foundation upon adoption for it's plugin system, and is currently being leveraged by every major application platform vendor, including Sun's Glassfish product. Jigsaw, however, is not as mature nor as well-known.


Realistically real-time
Real-time Java application development using multicore systems

Javolution creator Jean-Marie Dautelle discusses different methods to reduce the worst-case execution time of Java applications by leveraging the extra processing power of multicore systems. The methods described here do not require specialized real-time virtual machines and are suitable for many types of applications for which unexpected delays in the tens or hundreds of milliseconds are not acceptable.

Real-time response is a requirement in Java application domains such as banking, online collaboration, and games development, as well as for safety critical applications used in hospitals, manufacturing, aviation, and emergency response systems. Unfortunately, the Java platform has long suffered from its erratic response time. Java applications are known to freeze because the garbage collector has "stopped the world." Incremental garbage collection (-Xincgc) improves this situation, but it does not completely eliminated the nasty "full GC" pauses associated with the Java platform.


IBM Real Time Application Execution Optimizer for Java
A tool that operates on compiled Java applications to optimize and verify application deployment in specialized environments.

What is IBM Real Time Application Execution Optimizer for Java?
IBM Real Time Application Execution Optimizer for Java helps to optimize and verify a compiled Java application, preparing the application for deployment in specific environments. It is a command line tool that can operate on any compiled Java application, whether standard edition, micro-edition, or real-time.

The tool provides the following functions:
  • Escape analysis of objects per method invocation
  • Control flow analysis that splits an application into archives according to thread accessibility
  • Control flow analysis that detects potental occurrences of real-time java runtime errors
  • MemoryAccessError, IllegalAssignmentError, IllegalThreadStateException
  • Control flow analysis that determines entry points into an application
  • Addition of stackmaps to Java class files
  • Verification of Java class files
  • Auto-generation of classes that will load and initialize all other classes within the same archive
  • Specialized packaging of Java applications into deployable archives by packaging all referenced
  • Classes from a dual class path
  • Removal of unwanted attributes from Java class files

Les modificateurs de visibilité en Java


vendredi 12 juin 2009

Veille technologique semaine 24

Pour le bulletin de cette semaine, je vous propose les sujets suivants :

  • Une conférence sur le Domain Driven Design, par l'auteur, au club Java de Paris, lundi 15 prochain. Il faut s'inscrire.
  • La sortie imminente de eclipse 3.5 : Galilelo
  • Le produit de réplication d'objets Terracotta a reçu le prix Duke Award lors de la conférence JavaOne 2009. La réplication d'objet c'est quoi ? Un article qui résume le produit. A réserver uniquement aux projets Java qui ont besoins de réplication d'objets productive, performante et mature.
  • JavaFX 1.2 et les 5 fonctionnalités les plus importantes.
  • Le binding de JavaFX.
  • Un article qui pose la question : peut-on imaginer la suppression des primitifs Java ?
  • Comment écrire la méthode equals() ? C'est un exemple de génération de code à capitaliser dans un outil UML.
  • Le JDK 6 update 14 qui propose des améliorations sur "l'escape analysis" : les performances sont meilleurs sur certains benchs.
Bonne lecture.


Conference a Paris : Le DDD par son inventeur

Eric Evans, auteur du classique "Domain-Driven Design: Tackling Complexity in the Heart of Software" est de passage à Paris et sera l'invité du paris JUG lundi 15/6. Le délai est court, mais le Paris JUG ne voulait pas laisser passer l'occasion.

C'est donc à une soirée exceptionnelle que le Paris JUG vous convie tous. Ne tardez pas à vous inscrire, comme d'habitude les places sont limitées.

DDD - La conception qui lie le fonctionnel et le code

Le DDD, Domain Driven Design, laisse une impression qui amène souvent à une des remarques suivantes :

  • J'en ai déjà entendu parlé … - (mais je ne sais pas ce que c'est)
  • Je crois l'avoir vu dans le TDD …
  • C'est comme le MDA? - ça marche avec un ensemble de sigles MDSD, MDD
  • Hein? T'as un problème avec ta touche "D"

L'objectif de cet article est de vous présenter le DDD, ses enjeux et son intérêt.
Dans DDD, il y a Driven Design, c'est donc une technique de conception. Il ne faut pas confondre
avec les techniques de développement (Driven Development) comme par exemple le TDD (Test
Driven Development).
DDD n'est ni une méthode ni une technologie. DDD est une manière de penser la conception
autour du code, de collaborer et de communiquer avec les experts fonctionnels.


Getting Ready for Eclipse 3.5 (Galileo): What's New?
With the announcement of Release Candidate 3, it's a couple of weeks until Eclipse 3.5 code named "Galileo" will reach GA status. This new release of the popular Java development environment includes several new features and improvements over its previous version.


Terracotta Wins Prestigious Duke's Choice Award at the 2009 JavaOne Conference
Sun Microsystems and Java Inventor James Gosling Recognize Ubiquity of Affordable and Scalable Java Infrastructure Software Terracotta, a recognized leader in infrastructure software for enterprise Java scalability, today announced it has been named a 2009 Duke's Choice "Java Everywhere!" Award winner by James Gosling and Sun Microsystems. Terracotta's technology is increasingly adopted by organizations to provide simple scalability and lower operational and capital costs for business-critical Java applications.


Ari Zilka, CTO of Terracotta, Inc., talks about the new features in Terracotta 3.1,
announced during JavaOne and available now.
This interview covers:
  • Terracotta is the winner, Duke's Choice Award for 'Java Everywhere', selected because of its leadership in innovation
  • Spring, Hibernate internals integration to help settle the stateful vs. stateless debate and to appease the 'database haters' among performance caching users
  • Turn the tuning exercise on its head: tune the caching first, then the database
  • The cache becomes a level-2 feature, offloading the 75% of the database traffic to Terracotta with a significant throughput boost
  • The differences between Terracotta versions ES, EX, and FX
  • Distributed garbage collectors and how they work across multiple JVMs
  • How to participate in the Terracotta 3.1 beta to kick the tires on all the new features

Terracotta - Présentation
Nous allons présenter Terracotta et des cas d'utilisations. Au cours de la dernière décennie, les systèmes informatiques ont enregistré une montée en charge foudroyante, et de nouvelles problématiques de scalabilité se sont posées. Aujourd'hui, les technologies standard (EJB, JMS, Jini) commencent à montrer leurs limites, tandis que le trafic réseau et les capacités de traitement des bases de données arrivent à saturation. Dans cet article, nous verrons comment Terracotta peut soulager vos architectures Java, grâce à son approche radicalement différente du clustering.


Problématique
Avant de présenter Terracotta, faisons un rapide tour des principaux problèmes rencontrés lorsqu'une application est victime de son succès. Nous prendrons ici l'exemple d'une application web. Lorsque la charge augmente et qu'un unique serveur web ne suffit plus, il devient nécessaire de mettre en place un cluster, c'est-à-dire un agrégat de serveurs se répartissant le traitement des requêtes de manière transparente pour l'utilisateur. Pour assurer la sécurité des données de session des utilisateurs et améliorer la résilience générale du cluster, les serveurs disposent de systèmes de réplication. Mais ceux-ci souffrent de sérieuses limitations : Ils sont peu efficaces car ils reposent sur le mécanisme de sérialisation de Java, qui ne permet d'échanger que des objets complets, et pas de simples différentiels d'état. Ils saturent rapidement le réseau car le nombre de liaisons inter-serveurs augmente exponentiellement avec le nombre de serveurs.


Top 5 Most Important Features in JavaFX 1.2
Lots of JavaFX related things were announced at JavaOne, many of them concerning future
products and other bits that aren't released yet. This post won't cover any of those. There were so
many things discussed at JavaOne that I'm afraid some of the key points of the new JavaFX might have been missed. In this post I'm only going to cover the things that you can actually download and work with today. I'm talking only about the new version of JavaFX, previously codenamed Marina, and now called JavaFX 1.2. Without further ado, here is my personal list of the most important features.


Hacking JavaFX Binding
  • Contents
  • Introduction
  • Locations
  • Establishing Bindings
  • Binding Swing Components
  • The VolumeControl Example
  • Conclusion

The JavaFX Script bind operator connects or links variables. This feature is backed by the underlying JavaFX runtime through a small framework based upon so-called locations. This article takes a closer look at its internal structure and demonstrates how JavaFX Binding can be "misused" as a binding framework for Swing.


Would Java be Better Off Without Primitives?
Language Design Gilad Bracha reopens an old debate about language design, specifically can a language be OO and enforce a primitive type system? In his Room 101 blog post he makes the assertion: "I've often said that Java's original sin was not being a pure object oriented language - a language where everything is an object." The main issue addressed in the post is not on the value of being a pure object oriented language; rather, it addresses the question of whether it would be possible for Java to be as efficient as it is without primitive types. The answer is yes." Gilad begins his argument with a simple example of how typing create problems. The Java char type was initially represented with 16 bits (in accordance with the Unicode standard at the time) but when the standard changed, "people dealing with unicode in Java have to deal with encoding code points themselves." Turning to the issue of performance, he provides several examples of how to get objects without impairing efficiency.


How to Write an Equality Method in Java
This article describes a technique for overriding the equals method that preserves the contract of equals even when subclassses of concrete classes add new fields. In Effective Java, Josh Bloch describes the difficulty of preserving the equals contract when subclassing as a "fundamental problem of equivalence relations in object-oriented languages." Bloch writes: There is no way to extend an instantiable class and add a value component while preserving the equals contract, unless you are willing to forgo the benefits of object-oriented abstraction.


Escape Analysis in Java 6 Update 14 - Some Informal Benchmarks
Sun recently released update 14 of the Java 6 JDK and JRE. As well as the usual collection of bug fixes, this release includes some experimental new features designed to improve the performance of the JVM (see the release notes [1]). One of these is Escape Analysis [2].
To see what kind of impact escape analysis might have on my applications, I decided to try it on a couple of my more CPU-intensive Java programs.

vendredi 5 juin 2009

Veille technologique semaine 23

Je vous propose, pour le bulletin de cette semaine, les articles suivants :
  • JavaOne 2009 qui c'est passé cette semaine : résumé des 5 jours.
  • l'annonce de java applications store par SUN : du même genre que App Store pour l'iPhone.
  • Google confirme que sa plateforme logiciel est le web, avec les session de Google I/O ou ils ont présentés l'application de collaboration Google Wave.
  • Le club Java de Paris présente mardi 9 juin, Java avancé.
  • La sortie de JavaFX 1.2 qui commence à être utilisable, avec des démonstrations convaincantes.
  • JavaFX c'est quoi ? Petit résumé pour utilisateur.
  • Le JDK et la modularité : intégration d'une partie des concepts de OSGi avec comme conséquence la suppression du classpath !
  • La sortie du JDK 6 update 14 qui propose : le garbage collector First avec des qualités de déterminisme intéressant, la compression de pointeur, et des amélioration de l'escape analysis. A suivre de très près.
  • Les problèmes nouveaux du logiciel qui doit prendre en compte la programmation concurrente pour bénéficier de l'augmentation de la puissance des CPU.
Bonne lecture.


JavaOne 2009
Towards the end of the Day 1 morning keynote at JavaOne 2009, Scott McNealy called Oracle CEO Larry Ellison up on stage to address the $7.4 billion dollar question -- what will be the future of Java? Java's forthcoming 'leader' assured an uncertain audience that Oracle would continue its investment in the Java platform. With a resounding applause, the next chapter of Java unfolded.


Java One 2009
Java One 2009 Day 0
Java One 2009 Day 1
Java One 2009 Day 2
Java One 2009 Day 3
Java One 2009 Day 4


Sun announces store.java.com
As a part of the opening general session of JavaOne on Tuesday, Scott McNealy and James Gosling unveiled the Java Store, at store.java.com. The purpose of the Java Store is to give developers who are building Java applications that they care about on their own time the opportunity to make money from them. The motto of this announcement was to "turn a labor of love into a day job."

Right now, the store is in beta, and while developers can post applications to the store (with a not-announced approval process), there is no ability to pay for those applications today. Gosling said that they have explored several possible mechanisms for payment, but want feedback from the community on the best approach.

This sounds like a great opportunity to get new Java applications to the world at large, and may represent a way for Java developers to eventually see some financial return for the investments they are making in specific projects.



Google I/O 2009
Google I/O 2009 s'est tenu la semaine dernière à San Francisco. Il s'agit d'une des conférence destinées aux développeurs utilisateurs des applications et des API de Google.
Dans cet article, je vais donc revenir sur les annonces et points marquants de ces deux jours de conférences.
D'autre part, les vidéos des keynotes sont disponibles, vous pouvez consulter celle du premier jour (html5, android, web components …) ou celle du second jour (google wave).
Google I/O 2009, voici ce que j'en ai retenu :
Le futur du Web, avec les premières démonstrations émoustillantes HTML 5.
Google Wave, le prochain outil de communication et collaboration made in Google.
La réconciliation de Google avec GWT et la sortie de GWT Query.
Le futur d'Android, avec l'annonce de la branche Android 2.0 : Donut.
Java sur Google App Engine en GA.
Google Web Elements, comment intégrer les services Google dans vos pages web.
Les macros dans Google Document, avec Google Apps Script.
Arrivée des extensions dans Chrome.


Google Wave
Google Wave is three things: a tool, a platform and a protocol. The architecture has at its heart the Operational Transformation (OT), a theoretical framework meant to support concurrency control.
First of all, a definition is needed. Google Wave is: a new communication and collaboration platform based on hosted XML documents (called waves) supporting concurrent modifications and lowlatency updates.


Is Google Wave Going to Have an Impact on RIA/Silverlight?
The recently announced Google Wave platform which is promoting HTML 5 is believed by some to have a major impact on RIA, including Silverlight, while others consider that Wave is actually a competitor for Microsoft's SharePoint and Exchange rather than RIA. It's poll time.
The HTML 5 specification contains some long demanded features that will probably make inroads into RIA space, specifically Flash, Silverlight and Java FX. Actually, RIA platforms were invented because HTML was providing too little desktop-like experience. This is going to change. HTML 5 is not yet standardized, but elements of it are already introduced in Firefox, Chrome, Safari and Opera. Microsoft promised they will support HTML 5 too. Some of the new features to be introduced in HTML 5 and web API proposals from W3C and WHATWG are: canvas, video, geolocation and web workers.


Google Pushes the Web Platform with Chrome 2.0 and Wave
Google has announced two more tools that will help in its mission "to organize the world's information and make it universally accessible and useful". One of them is version 2.0 of its Chrome browser which aims to facilitate demanding client-side applications and the other one is Wave, a new environment for communication and collaboration on the Web. On September 1st, 2008, Google announced its new open source browser, Google Chrome. The introduction of a new web browser by Google, a major player in the web by anyone's standards, resulted back then in a flurry of attention, analysis and soothsaying. Since then Google has been collecting feedback and feature requests some of have made it into the Beta version that we first released in March. In version 2.0 that was announced a few days ago, Google reports to have fixed over 300 bugs, while adding several improvements:


Java User Group Paris
Soirée Java Avancé (09 / 06 / 2009)
19h30 à 19h55 : Typage et généricité dans Java
20h00 à 20h25 : Les annotations
21h05 à 21h30 : l'API Java Concurrent


JavaFX 1.2 est arrivé
En accord avec le planning annoncé dès décembre dernier lors de
Devoxx, une nouvelle version de JavaFX vient d'être mise à disposition. Les apports sont nombreux et comblent certains manques de la version 1.1. Le site de JavaFX propose un tour d'horizon très complet des nouveautés et Stephen Chin en présente un résumé accompagné d'un guide de migration. On retiendra : Ajout de widgets propres à JavaFX, skinnables et disponibles sur toute les plate-formes. Il n'est donc plus nécessaire de faire appel à des composants Swing (qui étaient inaccessibles sur mobile). L'ensemble des composants simples sont disponibles (bouton, checkbox, …), par contre la ListView est le seul composant de haut niveau à être fourni, pas detable, ni de tree.
Ajout de composants dédiés à la création de graphiques de type Area, Bar, Bubble, Line, Pie, Scatter et X/Y.
Ajout de nouveaux layouts en supplément des VBox et HBox déjà disponibles.
Support de Linux et Solaris.
La compatibilité des binaires générés par JavaFX n'est pas assurée entre cette nouvelle version 1.2 et ses prédécesseurs. Il sera donc nécessaire de recompiler les applications pour assurer la migration.

Le nouveau JavaFX sera donc sorti dans les temps pour être le sujet de nombreuses présentations et annonces lors de JavaOne qui débute aujourd'hui même à San Fransisco. Comme nous vous en parlions il y a quelques semaines, le support des TVs pourrait y faire l'objet d'une démonstration.


Getting Started with JavaFX
JavaFX is an exciting new platform for building Rich Internet Applications with graphics, animation, and media. It is built on Java technology, so it is interoperable with existing Java libraries, and is designed to be portable across different embedded devices including mobile phones and set-top boxes. This Refcard will help you get started programming with JavaFX Script and also serve as a convenient reference once you have mastered the language.


JavaOne: Jigsaw and Java Modularity
I started off the morning at a pair of Java modularity talks by Mark Reinhold on Jigsaw and from Alex Buckley on JSR 294. Mark's talk was apparently a dup of the technical general session yesterday but I missed that so that was actually good for me. Project Jigsaw aims to provide a module system for the JDK itself (also open for external users). This system provides the means for packaging and deploying applications based on modules. I found it somewhat hard to separate in this talk which parts were Jigsaw and which parts were defined by JSR 294 but Alex's subsequent talk helped further break that down.


Sun's released the the Java Development Kit 6 update 14.
"This release is Windows 7 support-ready and includes support for Internet Explorer 8, Windows Server 2008 SP2, and Windows Vista SP2. New features include the G1 garbage collector, plus performance and security enhancements."

Java HotSpot VM 14.0

6u14 includes version 14.0 of the Java HotSpot Virtual Machine, which provides improved reliability, serviceability and performance.

Contributing to increased performance in this release are numerous enhancements to HotSpot's optimizing compiler, more efficient SoftReference processing and improvements to Parallel Compacting garbage collection. Optionally available are two new features - escape analysis and compressed object pointers. A preliminary version of the new Garbage First (G1) garbage collector is also included.

• Optimization Using Escape Analysis

• Compressed Object Pointers

• Garbage First (G1) Garbage Collector


Improvement TreeMap Iteration

Java VisualVM Updates

6u14 contains the following updates to Java VisualVM:

  • CPU usage and GC activity graph in the Monitor tab
  • Table view in the Threads tab
  • Command line options: --openpid, --openjmx, --openfile
  • Compare Memory Snapshots action in the context menu
  • Copy To Clipboard / Save To File buttons in the About dialog
  • Monitoring IBM JVM via JMX connection
  • Based on NetBeans Platform 6.5 and NetBeans Profiler 6.5
  • Faster computation of references, and improved readability of path to GC root in HeapWalker
  • Improved integration of the Visual GC tool

La programmation concurrente :
Les processeurs en ont en effet terminé avec la progression verticale : au lieu d'augmenter la puissance brute des processeurs, on augmente leur nombre. On obtient ainsi, du moins potentiellement, un bien meilleur rapport puissance/consommation. Le problème c'est qu'il faut désormais bâtir les logiciels très différemment pour en tirer parti. Ainsi, il faut couper les tâches en petits morceaux afin de les faire exécuter simultanément par les différents processeurs et leurs multiples cores. L'opération n'est résolument pas aisée, et nécessite une refonte de l'architecture des logiciels.

Ne nous leurrons pas : le parallélisme n'est qu'un pis aller. S'il permet de mieux tirer parti de nos multicores, toutes les opérations ne s'y plient pas pour autant, et nécessiteront une refonte des logiciels, alors qu'une augmentation de la puissance brute des processeurs était directement exploitable sans rien changer du côté logiciel. On voit déjà bien peu d'applications qui tirent parti des biprocesseurs. Les choses ne vont pas aller en s'arrangeant, car la multiplication des processeurs n'ira qu'en augmentant. Imaginez le casse-tête quand nous aurons pas moins de 32 processeurs dans nos machines!

Pourtant, l'industrie informatique a une longue expérience du multiprocessing, dans le champ d'application des serveurs notamment. Mais il y a un univers entre une application pour plusieurs utilisateurs et plusieurs applications pour un seul utilisateur, caractéristique essentielle qui différencie l'environnement serveur de celui que nous côtoyons quotidiennement. En effet, les applications serveur se prêtent par nature au parallélisme, chaque utilisateur étant susceptible de lancer une tâche qui s'exécute simultanément aux autres. Après tout, plusieurs processeurs dans une seule machine, c'est un peu comme si vous utilisiez plusieurs ordinateurs simultanément, et encore, ça n'en a pas tous les avantages, puisqu'on conserve une seule allocation mémoire vive, et la plupart du temps un seul disque dur, qui font figure de goulot d'étranglement en entrée et en sortie des processeurs. Les logiciels qui fonctionnent se contentent, la plupart du temps, d'utiliser de la mémoire et quelques cycles processeur ici ou là lorsqu'elles sont en tâche de fond : ça n'est pas tous les jours qu'on lance plusieurs opérations simultanément. Le parallélisme sur l'ordinateur personnel s'attache donc à découper les opérations monolithiques en petits morceaux à exécuter concomitamment. Seulement voilà, nombre de ces opérations sont séquentielles, chaque résultat dépend d'une opération précédente.

Il est d'ailleurs assez ironique de constater que, en regard de cette mise en parallèle des tâches avec les multiprocesseurs, une autre poussée va dans le sens radicalement opposé avec les GPGPU. Quand l'un s'attache à découper les opérations pour les répartir sur plusieurs processeurs, l'autre les unifie pour les traiter en une seule passe. C'est sans doute ce qui permet de mieux appréhender la différence fondamentale entre un CPU et un GPU. L'un dispose d'une multitude de portes étroites, quand l'autre n'en propose qu'une seule, mais béante. Jerry Harris, responsable scientifique au sein de l'équipe de développement de Photoshop, l'explique en termes imagés dans cette interview : le multiprocessing, c'est comme si on travaillait avec un troupeau d'ânes : on peut se débrouiller avec deux, mais à partir de quatre ou cinq, ça devient invivable, car ils n'en font qu'à leur tête. Alors qu'un GPU se comporte plus comme un banc de poissons ou une volée d'oiseaux : plus il y en a, et mieux ça se passe.

Les GPU sont entièrement voués à traiter de larges amas de données de manière très véloce. Mais cette approche n'est pas exempte d'inconvénients. Il faut déjà que les données et les opérations s'y prêtent, ce qui n'est pas le cas de toutes. Mais même dans ce cas, les GPU étaient jusqu'ici conçus pour être autonomes : une fois qu'on leur a envoyé les données et la nature des opérations à effectuer dessus, on ne s'en préoccupe plus, le GPU les garde dans son coin, par exemple pour afficher une texture à l'écran, sans repasser par la case processeur. L'utilisation d'un GPU comme coprocesseur implique qu'on récupère le résultat pour en faire autre chose, et comme le GPU peut appliquer une seule et même opération sur un lot hétérogène de données, on est susceptible de n'en demander qu'une partie à un instant T. Or, cette opération fait figure de goulot d'étranglement, la récupération de données étant plus lente que le calcul !

On le sait depuis longtemps, le micro-processeur à base de silicium arrive en bout de course. On réduit la résolution de gravure d'année en année, vaille que vaille, mais viendra un moment où on ne pourra pas aller au-delà. La frontière ultime et indépassable, c'est la taille de l'atome. Alors que les nanotechnologies font parler d'elles dans d'autres industries, voilà bien longtemps que, d'une certaine manière, l'informatique en est une représentante de taille. Il faudra, tôt ou tard, changer de paradigme, ce qui représentera une révolution à bien des égards. S'il y a différentes pistes de recherche qui sont très prometteuses (processeur optique, processeur quantique, supraconductivité…), elles sont pour l'heure bien loin d'être mises en application et pour certaines font plus figure de science-fiction. D'ici là il faudra bien composer avec les moyens dont nous disposons.