vendredi 27 novembre 2009

Veille technologique semaine 48

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • la conférence Devoxx : les sujets présentés, la synthèse, ...
  • Google et Chrome OS : l'annonce de Google sur la sortie de son prochain OS en 2010
  • GWT : Google Web Toolkit sortie de la première version 2
  • les manques de Java ?.
  • explication du multi-dispatch : c'est quoi ?
  • les closures pour le JDK 7, suite
  • quelques nouveautés de JavaFX 1.2
Bonne lecture


JDK 7, JEE 6, et Maven 3.0 : les annonces de Devoxx

La conférence Devoxx ayant eu lieu la semaine dernière a été l'occasion de plusieurs annonces importantes qui ont rapidement fait le tour de la blogosphère.

JDK 7 avec les closures, mais retardé à nouveau

C'est surement l'annonce qui à fait le plus de bruit. Elle s'est répandue comme une trainée de poudre tant elle était inattendue. Lors d'une présentation en apparence sans surprise sur les nouveautés du JDK 7, Mark Reynold explique que le temps est venu pour Java de supporter les closures. Afin de permettre leur implémentation, la finalisation du JDK 7 est repoussée à septembre 2010. Trois nouveaux milestones sont donc ajoutés au calendrier initial avec une finalisation des fonctionnalités (features complete) prévue pour Juin 2010. Ce nouveau délai permet donc à l'équipe du JDK de travailler sereinement sur la finalisation de Jigsaw, d'implémenter les closures, et devrait vraisemblablement permettre également l'inclusion du multi-catch pour les exceptions.

En fait ce délai semble laisser la possibilité à de nombreuses autres fonctionnalités et spécifications qui avaient été mises de coté de prétendre de nouveau intégrer le JDK 7. On peut ainsi imaginer :

Questionné à Devoxx sur l'étendue des fonctionnalités pouvant être concernées par une potentielle inclusion, Mark Reynold ne ferme la porte à aucune hypothèse. Il explique ainsi qu'il n'a pas eu l'occasion de voir de proposal pour les propriétés qui lui semblait satisfaisante jusqu'à présent mais n'exclue pas une telle possibilité d'ici la finalisation des fonctionnalités du JDK 7.

JEE 6 finalisé en décembre

Lors du keynote du premier jour des conférences, Roberto Chinnici (Spec lead JEE 6) a annoncé la finalisation de l'ensemble des spécifications JEE 6 ainsi que de l'implémentation de référence associée (Glassfish V3) pour le 10 décembre 2009.

Cette nouvelle intervient alors que JEE 6 a été très bien accueilli par le public à Devoxx comme il l'a été maintes fois répété dans le dernier épisode des Cast Codeurs.

Maven 3.0 finalisé en Janvier

Cette annonce est passée plus inaperçue parmi l'actualité de Sun. Pourtant Jason van Zyl, lors de sa présentation des nouveautés de Maven 3.0, a annoncé une finalisation de la nouvelle version de son outil de build pour la fin janvier 2010.

Cette nouvelle version apportera le support des builds multithreadés ainsi qu'un environnement de base pour les extensions très intéressantes que sont Polyglot Maven et Maven Shell.

Nous publierons rapidement un article plus détaillé sur l'ensemble des nouveautés à venir sur Maven 3.x.


Devoxx 2009, une synthèse 1/2

  • Les keynotes
  • Le cloud computing

Devoxx 2009, une synthèse 2/2
  • Java comme une plateforme
  • Java plus simple et plus productif
  • La SOA
  • L'OSGI
  • Les sessions méthodologiques, avec par exemple Pomodoro et « development is social? »

Devoxx – Jour 3 – La keynote
Cette première keynote qui a eu lieu Mercredi marque le début officiel des conférences de Devoxx. Stephan Janssen nous a souhaité la bienvenue en nous précisant quelques chiffres pour Devoxx:
  • 2500 participants,
  • 737 compagnies représentées
  • comme Xebia par exemple ,
  • 132 sessions,
  • 120 speakers,
  • 56 JUGs (dont 10 en France),
  • 36 pays,
  • et 19 partenaires ce qui est moins que d'habitude.

Devoxx – Jour 2 – Scala Actors
Le langage Scala était très représenté cette année à Devoxx avec une session sur les acteurs par Franck Sommers, une autre sur ScalaTest par Bill Venners ou encore celle sur le framework web Lift par Timothy Perrett. Cette dernière n'a malheureusement pas tenu toutes ses promesses : la moitié de la présentation
s'est focalisée sur les spécificités du langage et une autre partie sur la déjà vue application ChatDemo en comet de David Pollack sans réelle explication de code, ne laissant ainsi que très peu de place pour Lift lui même.
Nous consacrerons donc un retour à Scala en deux parties : la première sur les acteurs (présent billet) et la seconde sur ScalaTest.


Devoxx – Jour 3 – ScalaTest
Devoxx consacrés à Scala. Après les acteurs, c'est au tour de la librairie ScalaTest de faire son show.


Devoxx – Jour 3 – Spring Actionscript
Spring ActionScript est un framework Spring permettant de faire de l'inversion de contrôle en ActionScript. Ce framework connu initialement sous le nom de Prana Framework est actuellement en incubation chez Spring. Devoxx fut l'occasion pour Christophe Herreman, initiateur du projet, de nous le présenter.


Details of the Now Available Google Chrome OS
Google has open sourced Chrome OS a year before the planned launch which is to happen some time before winter holidays in 2010. Google is working with manufacturers on a new reference hardware to accommodate their speed and security requirements which are key features of their new operating system.


GWT version 2.0 RC1

Une nouvelle version majeure du RIA de Google, GWT, sort en version 2.0 RC 1. Cependant, aucune date de sortie n'est encore annoncée. Cette version s'accompagne d'un plugin pour Eclipse, nommé Google Plugin for Eclipse 1.2 RC1, dont l'on recommande vivement la mise à jour.
Parmi les nouveautés, on peut citer:

  • Utilisation du Development Mode (anciennement appelé Hosted Mode) dans le navigateur de votre choix via un plugin.
  • Possibilité de fragmenter le code JavaScript généré en plusieurs morceaux en utilisant GWT.runAsync() va permettre d'accélérer considérablement les temps de chargement.
  • Story Of Your Compile (SOYC) génère un rapport sur le processus de compilation et permet d'avoir une meilleure vision du code généré.
  • Facilitation de la création d'IHM par déclaration avec Ui Binder.
  • Apparition d'un ClientBundle, similaire au ImageBundle, qui permet la généralisation du sprinting à d'autres formats les fichiers textes, css, etc.
  • Utilisation de HtmlUnit pour les tests unitaires, qui permet maintenant de débugger directement dans le débuggeur Java.
Les nouveautés sont donc nombreuses et apportent un réel gain de productivité.
Le combat auquel se livrent actuellement les RIA est loin d'être terminé…


The following is a list of the language features I miss most when programming Java:

  • Closures
  • Modules
  • Generators
  • Mix-ins
  • Post-hoc interfaces

Multiple dispatch: a fix for some problems of single dispatch (Java etc.)
Almost all well-known object oriented languages (Java, C#, JavaScript, Python, Ruby, ...) have single dispatch: Methods are chosen depending on the (single) receiver of a message. On the other hand, there is multiple dispatch which is an interesting mix of functional method selection with mutable state. It is used in less-known object-oriented languages such as Common Lisp.


More detail on Closures in JDK 7
This blog goes into a little more detail about the closures announcement at Devoxx and subsequent information that has become apparent.


What's New In JavaFX 1.2 Technology: RSS, Storage, and Charts
The first article in this series, What's New In JavaFX 1.2 Technology: New Layouts and Effects, introduced you to new layout classes such as ClipView, Flow, and Stack, and demonstrated how to use these classes within your applications.
Unlike the many articles that concentrate on graphical user interface (GUI) features and application design in JavaFX technology, this article and the next will provide insight into the more technical features such as RSS and Atom tasks, local
storage using JavaFX's built-in storage classes, and the use of JavaFX charts.


Devoxx – Jour 2 – Java FX The developer guide
La session JavaFX fut l'occasion de découvrir comment développer une application JavaFX. Le speaker Stephen Chin, chef de projet de WidgetFX, nous a proposé une introduction au langage de script JavaFX. La présentation semblait à mon avis plus modeste que les présentations faites l'année dernière. Le nombre de sessions
JavaFX est moins important comparé l'année précédente. De même pas de présentation au Keynote où Adobe semble être mis en avant avec sa plateforme Flash.

vendredi 20 novembre 2009

Veille technologique semaine 47

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

  • présentation d'un retour d'expérience à la conférence Model Driven Day 2009 sur Paris le 26 novembre prochain (site www.mdday.fr) dans les locaux de Microsoft. Je présente l'usage du Model Driven Architecture (MDA) et de l'Aspect Oriented Programming (AOP). L'inscription est gratuite (voir sur le site).
  • Des résultats de performances du standard OpenCL pour le traitement du signal audio. Le standard OpenCL (à ne pas confondre avec OpenGL) propose une API qui permet de déléguer du travail de traitement sur le processeur graphique (GPU). Ce traitement n'est pas lié à des pixels (contrairement à OpenGL). CUDA est l'API propriétaire
  • Un article au sujet de HTML 5 qui veut remplacer Flash.
  • La NASA qui adopte NetBeans comme plateforme.
  • 5 bonnes pratiques pour le développement du code.
  • La conférence Java Devoxx qui a eut lieu du 16 au 20 novembre en Belgique, plusieurs présentation on été faites.
  • Toujours à cette conférence, a été annoncé le retour des closures pour le JDK 7. Différents articles au sujet des closures en Java.
  • Deux articles sur l'intégration du concept de services dans Java
Bonne lecture.


La journée du « Model Driven » - Edition 2009

Titre de la présentation:JAva COmponent MOdel - How Aspect Oriented Programming can help Model Driven Architecture

Abstract : Model Driven Architecture (MDA) propose to transform Platform Independant Model to Platform Specific Model (PIM). Aspect Oriented Programming (AOP) propose to weave technical code inside domain code. JAva COmponent MOdel (JACOMO) technologie use AOP to implement MDA.

Intervenant : Emmanuel Grivot


OpenCL Standard Speeds Compute Intensive Applications
OpenCL, an emerging new standard for distributing applications across processor cores and GPUs promises to dramatically speed up processing time for parallelizable tasks. One Mac programmer was stunned to see a 492 seconds audio processing task shrink to a mere 14.1 seconds..


HTML 5, tueur de Flash ?
Les fonctionnalités étaient jusqu'à présent seulement disponibles sur nos postes de travail. Aujourd'hui, on trouve des applications Web capables de proposer de la retouche de photos, la visualisation de bande annonces de film, la gestion et l'écoute de musique, la lecture de livres, etc. Les standards actuels du W3C n'ayant pas été conçus pour la création d'applications Web, des plugins tels que Flash ont comblé
ce manque. Le W3C préparait XHTML 2 depuis des années mais cette spécification était orientée document et non application.

Des employés d'Apple, de Mozilla Foundation et d'Opera Software ont
formé la communauté WHATWG. Point de départ d'HTML 5, leurs travaux ont été orientés vers un standard capable de créer des applications : ajout de la vidéo, mode hors-ligne, etc. HTML 5 est-il une réelle alternative aux plugins comme Flash ? Voire un Flash-killer ?


NASA Adopts the NetBeans Platform
Tim Boudreau, Senior Staff Engineer at Sun Microsystems,
recently spent some time with engineers at NASA, showing them how to use
the NetBeans Platfom.
Below, he reflects on some of the interesting engineering needs that NASA
has and how the NetBeans Platform is well suited to respond to these. During
the interview, Tom Wheeler, one of the NetBeans Platform's several external
contributors, talks about his participation in the course at NASA, too!


5 practices to create good code.
  • Keep it simple
  • Make it work, then make it fast.
  • Automated Test
  • Code reviews.
  • Refactor.

Devoxx Conference
Devoxx Day 1: University Day 1
Devoxx Day 2: University Day 2
Devoxx Day 3: Conference Day 1


JDK 7 Unexpectedly Gets "Simple" Closures, but is Pushed Back to End of 2010
During his Devoxx talk, Mark Reinhold has announced that JDK 7 will have Closures. With the inclusion of this much debated feature, JDK 7 schedule will be extended until around September 2010.
Joseph D. Darcy, lead engineer of Project Coin, which aims to make small language changes for Java 7, has confirmed that the next version of the language will include some kind of "lightweight" Closures:


Closures after all?
Apparently Mark Reinhold announced that closures would be added to JDK 7 at Devoxx today:


Closures? In Java 7???
Today, a tantalizing announcement by Mark Reinhold about closures in Java 7 has made its way through the twittersphere.


Closures for Java (v0.6a)
We describe a proposed extension of the Java Programming Language that supports deferred execution of snippets of code. These correspond to lambda expressions in languages such as Javascript, C#, and Groovy.


First-class methods: Java-style closures
The following examples refer to static methods:

Math#min(int, int)
Collections#sort(List, Comparator)

The following examples refer to instance methods:

Integer#intValue()
Object#equals(Object)


How to create services in Java
Creating services is quite an abstract subject, everyone has his own ideas and preconceptions, so is worth clarifying what I mean by services in this article. A service is a component that holds some business logic which can be easily reused anywhere else in the application no matter where the service is located, or what the communication mechanism is used between the client and the service. The following code samples detail my own personal approach on how to implement services in Java.


Service Provider Interface: Creating Extensible Java Applications
Most of an application's life cycle revolves around maintenance. An extensible application allows for easy maintenance—i.e., upgrading of specific parts of a product—without affecting the entire application. This article examines the service provider interface (SPI) approach to creating extensible applications, a key to modular, plug-in architectures. The article begins by defining what a service provider interface is, how it is implemented, and how you can achieve extensibility by using the ServiceLoader API (part of JDK 1.6).

vendredi 13 novembre 2009

Veille technologique semaine 46


Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • le JDK 5 a atteind la fin de son cycle de vie le 3 novembre dernier. Il n'y a donc plus de mise à jour publique du JDK 5 qui reste à l'update 22. La maintenance est passé en mode payant : de 15K$ à 250k$ par ans. La fin de vie du JDK 6 est prévue pour 2010.
  • le produit de gestion de configuration subversion passe en projet apache.
  • Oracle confirme le soutien des produits SUN : sparc, solaris, glassfish, openoffice, mysql, netbeans ...
  • un mouvement anti SQL : noSQL.
  • sortie de JavaFX 1.2.1 : perf et correction de bugs.
  • Java et le multi-core :
  • Groovy et la délégation : @Delegate
  • JBossCache et le MVCC : Multi Version Concurent Controle.
  • JUnit et l'annotation @Rule
  • un article au sujet des performances de Java versus C/C++.

Bonne lecture.


Java SE 5 Reaches End Of Service Life
Sun's implementation of J2SE 5.0 reached its End of Service Life (EOSL) on November the 3rd 2009, which is the date of the final publicly available update of version 5.0 (J2SE 5.0 Update 22).

Customers looking for support from Sun can either update to Java 6 or subscribe to Sun's Java for business program.
Sun offers a number of paid support options for Java. Java classic support covers the latest release of Java for a period of three years from product release and comes in two variations: Standard support which provides business-hour (12x5) coverage with a four hour response time SLA, and premium support which offers 24x7 support with an immediate response time. The cost of Java classic support starts at $15,000 per year. Pricing increases by the size of the organisation and for very large enterprises could be up to around $250,000 per year.



Java SE & Java SE for Business Support Road Map
JDK 6 : GA Date = 6 December 2006, EOL Notification = 2009*, EOSL = 2010*, Support Period = 4 years*

* EOL Notification date, EOSL date, and exact support period for the Java SE 6 release family have not been determined at the time of the writing of this article. Information will be posted to the Java SE web site as it becomes available.


Subversion, le nouveau projet de la Fondation Apache

C'est officiel, Subversion fait maintenant partie des projets de la fondation Apache. Avant de pouvoir devenir projet top-level, Subversion doit d'abord passer par l'incubateur. Durant cette période, CollabNet continuera d'héberger le projet surhttp://subversion.tigris.org. De plus, les différents binaires continueront d'être publiés sur ce site au-delà de la période d'incubation. Nous sommes donc en droit de nous demander ce que cette nouvelle va finalement changer ?

Certains imaginent la refonte de Subversion pour lui ajouter des fonctionnalités de gestionnaire de sources distribué, comme GITou Mercurial. Il est pourtant difficile de croire à une telle transformation, Subversion étant connu comme le gestionnaire centralisé star du moment. Un tel virement de bord signifierait la fin de ce modèle centralisé.

D'autres perçoivent au contraire cette nouvelle comme une fierté personnelle et voient l'arrivée de Subversion dans l'ASF comme un aboutissement. Le projet est assez mature pour rentrer dans une nouvelle phase et Apache est la maison idéale pour le faire vivre sur le long terme tout en pérennisant la communauté.

Au final, la véritable réponse à cette question se situe probablement entre ces deux visions. Pourquoi le projet ne continuerait pas tout simplement à avancer sur le chemin qu'il suit depuis sa création ? Il lui reste du trajet à parcourir : performances, intégration avec les IDEs, outillage …



Oracle Announced Plans for the Future of Sun's Products, but Raised Concerns about NetBeans
Oracle has released an FAQ that describes its plans for the future of popular Sun technologies like GlassFish, NetBeans, MySQL and more. In some cases Oracle's announcement is unclear and raises concerns about product viability.
The announcement makes clear that the Oracle will continue to invest in Sun hardware, in Solaris, SPARC, GlassFish and OpenOffice.


Le mouvement NoSQL divise et intrigue

Le nom NoSQLest apparu courant 2009 pour qualifier un mouvement initié depuis longtemps mais qui a pris une importance et une visibilité particulière ces derniers mois. Il regroupe l'ensemble des projets proposant une solution de persistance de données non relationnelle qui se caractérisent par un design favorisant la scalabilité et la flexibilité. On reconnaît dans ces deux caractéristiques les besoins du Web, dont les grands acteurs que sont Google, Amazon et Facebook ont joué un rôle important en apportant leur propre solution (respectivement BigTable, SimpleDB et Cassandra).

Remettre en question le stockage relationnel exclusif qui s'était imposé presque comme une évidence dans le monde de l'entreprise ne pouvait se faire sans initier de nombreux débats. La dernière intervention en date est celle de Michael Stonebraker qui critique vivement cette initiative en avançant :

  • Le choix du NoSQL comme solution de persistance est en général amené par un besoin de performance et de flexibilité. Ces deux caractéristiques peuvent être assurée par les RDBMS traditionnelle par la mise en place de bonnes pratiques épaulées d'un éventuel sharding
  • Les systèmes NoSQL souffrent eux aussi de certaines des problématiques des RDBMS et ne sont donc pas une solution parfaite
  • L'utilisation de procédures stockées permet d'obtenir la performance voulue dans de nombreuse situations
Ces arguments, assez classiques à l'encontre du NoSQL, sont opposés à ceux mis en avant par Debasish Ghosh, l'auteur du prochain DSLs in action à paraître chez Manning :
  • Le sharding, solution souvent mise en avant pour sauver la scalabilité des RDBMS, est une solution très lourde à mettre en place, qui évolue mal et qui est très intrusive dans la logique métier ; elle est appliquée à des systèmes qui n'ont pas été prévus pour une telle utilisation
  • Le théorème CAP montre que seule une approche différente des RDBMS classiques permet d'obtenir les performances voulues
  • Une coopération intéressante se met en place entre les projets NoSQL afin de permettre des interopérabilités (tel queNeo4j s'appuyant sur Cassandra ou Riak sur CouchDB)
La remise en question apportée par le NoSQL est forcément bénéfique et ne peut amener qu'une innovation. Si le mouvement est encore récent et qu'il doit gagner en maturité, il amènera probablement à se poser plus naturellement la question de la ou des meilleure(s) solution(s) de persistance pour les données d'une application ou d'un système d'information.


JavaFX 1.2.1 is out, fixes binding leaks and performance
Sun just released the first maintenance update for JavaFX 1.2. This release brings mostly a batch of important javafxc fixes, that I dissect in this blog...


Creating Highly-Scalable Components in Java
With multi-core processors becoming main-stream, there is significant pressure on application developers to write correct highlyscalable applications to take advantage of the underlying hardware. Further, legacy applications have to be ported to run on the new architectures.
An efficient way to ensure scalability of applications is to use highly-scalable components to build the applications. For example, in various applications, java.util.concurrent.ConcurrentHashMap can replace a synchronized HashTable and make the application more scalable. Thus, providing a set of highly scalable building blocks that can be directly introduced into applications to introduce parallelism will be very useful.


Practically Groovy: The @Delegate annotation
Exploring the frontiers of duck typing in a statically typed language.
@Delegate is a compile-time annotation that instructs the compiler to push all of the delegate's methods and interfaces up to the outer class.


A Look Inside JBoss Cache
This follow-up article focuses entirely on the brand-spanking-new JBoss Cache 3.0.0 - codenamed Naga, and goes in depth to discuss how our high-performance concurrency model works.

MVCC has landed
Multi-versioned concurrency control - MVCC - was adopted as the default concurrency scheme in the cache. When run in local mode, the most costly part of the cache in terms of memory and CPU cycles is the locking involved in maintaining integrity of shared data. In a clustered mode, this locking is the second most expensive thing, after RPC calls made by the cache instance to remote instances.

Legacy locking schemes
In JBoss Cache 1.x and 2.x, we offered two different locking schemes - an optimistic one and a pessimistic one. Each had their pros and cons, but in the end they were both still costly in terms of performance.
The pessimistic scheme used a lock per tree node. Reader threads would obtain nonexclusive read locks and writer threads would obtain exclusive write locks on these nodes before performing any operations. The locks we used were a custom extension of JDK ReentrantReadWriteLocks, modified to support lock upgrading where within the scope of a transaction, a thread may start off reading a node and then later attempt to write to it.

So how does MVCC help?
MVCC offers non-blocking readers where readers do not block writer threads, providing a high degree of concurrency as well as removing the risk of deadlock. It also is fail-fast, in that writers work sequentially and don't overlap, and if they do time out in acquiring a write lock, it happens very early on in the transaction, when a write occurs rather than when a transaction commits. Finally, MVCC is also memory efficient in that it only maintains 1 copy of state for all readers, and 1 version being modified for the single, sequential writer. Even better, our implementation of MVCC uses no locks at all for reader threads (very significant for a readheavy
system like a cache), and a custom exclusive lock implementation for writers. This
custom lock is completely free of synchronized blocks and uses modern techniques like compare-and-swap and memory fencing using volatile variables to achieve synchronization. All this leads to a very highly performant and scalable locking scheme.


Writing Your Own JUnit Extensions Using @Rule
In the new release (4.7) you have access to a lot of interesting stuff (still in development for some). One that is really interesting is @Rule [1]. This annotation allows you to annotate a public field in your test class, which is of type MethodRule [2]. This binding will intercept test method calls like an AOP framework would do
and redefine the execution, skip it, or do anything else.


Java vs C performance... again...
I just foolishly got caught in a You-Tube discussion on Java vs C performance. Foolish because You-Tube comments are a lousy way to present anything and because it's hard to keep the level of discourse scholarly.
And foolish especially for me because I've had this discussion so many times and it always comes out the same way... so here's my attempt at distilling my arguments into something I can point people the *next* time I get caught in this silly discussion.

Is Java faster than C/C++? The short answer is: it depends.



Ubuntu : Intel® Q6600 quad-core Computer Language Benchmarks Game (Read the FAQ!)
You choose the language implementations for robust Box and Whiskers statistics of program time measurements on the default benchmarks!

vendredi 6 novembre 2009

Veille technologique semaine 45

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • le futur de Java par Google
  • la communication entre les architectes et les développeurs
  • l'injection de dépendances avec JEE6
  • les optimisations du compilateur JIT par défaut pour le JDK 7
  • l'outil Sonar et les métriques sur la qualité du logiciel
  • des designs pattern d'instanciation d'object en Java
  • l'outil VisualVM qui passe en version 1.2
  • JUnit : annotations vous avez dit annotations ?
  • le mélange des composants "lourd et léger" en Java : pour les IHM.

Bonne lecture .


The Future of Java
  • Project Coin
  • JSR-330: Dependency Injection for Java


Turtles and Architecture
Many of us can relate. In dysfunctional organizations, architects and
developers fail to communicate effectively. The result is a lack of
transparency and a lack of understanding by both sides, as shown in
the diagrm (click to enlarge). The failure often occurs (though I
recognize there are other causes) because architecture is about
breadth and development is about depth. Each group has disparate
views of software architecture, and while both are warranted, a gap
between these views exists. The architect might focus on applications
and services while the developer focuses on the code. Sadly, there is
a lot in between that nobody is focused on. It is this gap between
breadth and depth that contributes to ivory tower architecture.


Dependency Injection in Java EE6 - Part 1
This series of articles introduces Contexts and Dependency Injection for Java EE (CDI), a key part of the soon to be finalized Java EE 6 platform. Standardized via JSR 299, CDI is the de-facto API for comprehensive next-generation type-safe dependency injection for Java EE. Led by Gavin King, JSR 299 aims to synthesize the best-of-breed dependency injection features from solutions like Seam, Guice and Spring while adding many useful innovations of its own.


Les optimisations du JDK 6u14 activées par défaut sur le JDK 7
Rémi Forax, un contributeur sur OpenJDK et sur la JSR-292, a fait part
de son étonnement en constatant un gain significatif de performance
entre deux builds successifs de l'OpenJDK 7 actuellement en cours de
développement. C'est ainsi qu'il a pu se rendre compte que deux
optimisations majeures du compilateur JIT de la JVM étaient activées
par défaut depuis le build 72 du projet : l'escape analysis et la
compression de pointeurs. Celles-ci étaient apparues dans le JDK 6u14
mais n'y étaient pas activées par défaut.

Pour rappel l'escape analysis consiste en l'analyse du bytecode d'une
méthode pour découvrir les références vers les objets qui ne «
s'échappent » pas du contexte de la méthode. Grâce à cette analyse, la
JVM peut alors décider d'allouer ces objets directement sur la stack
plutôt qu'en heap comme c'est normalement le cas. Il en résulte un
gain de performance évident puisque le coût d'allocation et de
libération de mémoire est alors supprimé pour ces objets.

La compression de pointeurs, quant à elle, concerne uniquement les JVM
64 bits. En effet le passage d'un adressage de 32 à 64 bits entraîne
une consommation plus élevée de la mémoire du fait de l'augmentation
de la taille des pointeurs, induisant elle-même des temps de
chargement plus longs et une surconsommation du cache du processeur.
Pour palier ce problème, la compression de pointeurs se base sur le
fait que la JVM aligne l'adresse des objets sur 64 bits (ceci afin de
simplifier et donc d'accélérer leur accès en mémoire), pour procéder à
un scaling des pointeurs. Ainsi, en limitant l'espace mémoire
adressable à 32 Go, il est possible de contenir un pointeur dans 32
bits et donc de revenir à une consommation mémoire proche de celle
d'une JVM 32 bits.

L'activation par défaut de ces deux optimisations sur le JDK 7 montre
que l'équipe du projet estime désormais qu'elles ne sont plus
expérimentales et qu'elles conviennent dans la majorité des cas.
Ismael Juma précise par ailleurs qu'il est possible que ces
activations par défaut soient reportées également au JDK 6 courant 2010.



Contrôles de qualité avec Sonar
La qualité d'une application étant directement liée à la qualité de son code, de nombreux outils sont apparus pour effectuer différents contrôles : reporting de tests unitaires, analyse de la couverture du code par les tests, vérifications du respect des règles de codage, de nommage des variables et méthodes, etc. Sonar est un outil qui permet d'évaluer rapidement et clairement la qualité des projets Maven2, mais aussi
d'autres types de projets, moyennant une "Mavenisation" assez simple. Il s'appuie sur des outils comme Checkstyle, PMD et Cobertura et offre un reporting web très intuitif pour synthétiser les résultats de ces différents outils et guider l'utilisateur sur la voie de la qualité.


Applying Creational Design Patterns in Java
Design patterns, made famous by the "gang of four" (GOF) [9], as they are fondly called (Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides), are a collection of proven steps to be followed for a particular type of problem in software scenario. Java Design patterns provide a time tested solution which can be applied to a set of problems (the problems will have a common set of characteristics) to come to a solution. Obviously, the solution should be optimal in terms of execution.
Among the different categories of Java Design Patterns available, this article will focus on "Creational Design Patterns" [10], which focus on the creation of objects in Java from a class or group of classes. The patterns present under the umbrella of Creational Design Patterns basically define:
  • How the Objects will be instantiated
  • How many Objects will be instantiated
  • At what point the Objects will be instantiated


VisualVM 1.2 Adds Powerful New Performance and Memory Profiler
VisualVM 1.2 has just been released and is available for download at
https://visualvm.dev.java.net [1]! After eight months of development, this release introduces many new features and improvements, including a new sampling profiler (read further for details), redesigned charts, unmatched jstatd support and customizable proxy settings.


JUnit: A Little Beyond @Test, @Before, @After
Most people I see using JUnit are limiting themselves to the very basic features, that is, indicating tests with @Test and maybe @Before and @After. Hey, I myself didn't do much more than that up to a couple of weeks ago. This is just a syntactical update to Java 5, but later releases of JUnit can do much more.


Mixing Heavyweight and Lightweight Components
Historically, in the Java language, mixing heavyweight and lightweight components in the same container has been problematic. However, as of the JDK 6 Update 12 and JDK 7 build 19 releases, mixing heavyweight and lightweight components is easy to accomplish. This article explains some details you might need to know.
Contents:
  • A Bit of History
  • Component Mixing Just Works
  • Requirements
  • Limitations
  • Demo