vendredi 3 avril 2009

Veille technologique semaine 14

Pour le bulletin de cette semaine 14, je vous propose les sujet suivants :
  • un premier article au sujet du développement au forfait qui n'est pas compatible avec les besoins d'itérations des méthodes agiles (modification des spécifications).
  • un article sur les problème de mesure de la qualité (et la non qualité) pour pouvoir réduire cette non qualité. Il faut des critères mesurés par des outils.
  • Quatre gurus donnent leur point de vue sur la qualité du code.
  • Premier chapitre du livre "Coder propement" : Introduction. La lecture de ce livre est fortement recommandé à tous ceux qui manipule du code.
  • Un petit memo sur les 23 design patterns du Gang Of Four (GOF).
  • Encore quelques articles au sujet du JDK 7 :
    • Le JDK 7 en open sources
    • le projet coins : fin des proposition d'évolution du langage
    • le JDK 7 et les performances d'accès aux tableau et sur l'arithmétique
    • le projet de modularisation du JDK
    • Un article sur les enumérés dynamique.

Bonne lecture



Pourquoi les projets agiles ne peuvent pas (vraiment) être menés au forfait.
En matière de sous-traitance du développement logiciel, la pratique contractuelle la plus fréquente est celle dite du projet au forfait. La notion de forfait n'a, en principe, pas de rapport avec le processus de développement ou les pratiques d'ingénierie utilisée dans la réalisation du projet. Il s'agit simplement, dans l'esprit des contractants, de fixer les contours exacts de leur relation commerciale, et de définir leurs obligations mutuelles – en terme de coûts, de délais, de mode de paiement et de livraison.
Ce processus de développement est aujourd'hui fortement remis en question, sous le constat empirique de son échec relatif, et sous l'impulsion des méthodes agiles. Je pense quant à moi que la "cascade" sera perçue dans quelques années comme l'aveuglement juvénile d'une industrie encore adolescente, à la recherche de son identité.
La question qui nous intéresse ici est de savoir si le projet au forfait survivra à la cascade.


Mesurer la qualité d'un projet pour le désendetter

En ingénierie logicielle, tant qu'un projet se développe, la dette technique s'accumule inexorablement. Les sessions de refactoring sont là pour contrebalancer cette tendance et leur mise en place régulière garantit la maintenabilité du projet. Mais ce qui est délicat avec la dette technique, c'est qu'elle n'est pas vraiment mesurable, et comme l'iceberg, on n'en voit que la partie émergée. Résultat, le refactoring est souvent sous estimé et mal maitrisé. Si on ajoute à cela une mauvaise couverture de test, refondre le code applicatif fait peur, fait mal.


Plus personne n'a l'audace de le tenter, et à long terme, c'est la banqueroute assurée du projet.


L'objectif de cet article est de proposer une approche efficace pour savoir comment attaquer efficacement un grosse refonte d'un code mal couvert par les tests. Cette tâche technique est divisée en plusieurs problématiques : comment déterminer les zones de risque du projet, trouver où poser les tests pour sécuriser l'étape de refactoring et trouver les zones à refactorer.



The Developer Insight Series, Part 1:
Write Dumb Code -- Advice From Four Leading Java Developers
Most performance problems these days are consequences of architecture, not coding -- making too many database calls or serializing everything to XML back and forth a million times.
While we write code to run on a machine, the primary consumers of code are humans
.


Coder proprement

La maîtrise de l'art du métier englobe deux parties : connaissances et travail. Vous devez acquérir les connaissances concernant les principes, les motifs, les pratiques et les heuristiques connus de l'artisan, et vous devez également polir ces connaissances avec vos doigts, vos yeux et vos tripes, en travaillant dur et en pratiquant.

Je peux vous enseigner la physique qui permet de rouler à vélo. Il est vrai que les mathématiques classiques sont relativement simples. Gravité, frottements, moment angulaire, centre d'inertie, etc. peuvent être expliqués en moins d'une page d'équations. Grâce à cette formule, je peux prouver qu'il vous est possible de rouler à vélo et vous apporter toutes les connaissances dont vous avez besoin pour ce faire.
Néanmoins, vous tomberez immanquablement la première fois que vous grimperez sur la bicyclette.

Écrire du code n'est pas si différent. Nous pourrions rédiger tous les bons principes d'écriture d'un code propre et vous faire confiance pour réaliser le travail (autrement dit, vous laisser tomber lorsque vous monterez sur le vélo), mais quelle sorte de professeurs serions-nous alors et quelle sorte d'étudiant seriez-vous ?


Apprendre à écrire du code propre est un travail difficile. Cela ne se limite pas à connaître des principes et des motifs. Vous devez transpirer. Vous devez pratiquer et constater vos échecs. Vous devez regarder d'autres personnes pratiquer et échouer. Vous devez les voir hésiter et revenir sur leurs pas. Vous devez les voir se tourmenter sur des décisions et payer le prix de leurs mauvais choix.



ABOUT DESIGN PATTERNS

This Design Patterns refcard provides a
quick reference to the original 23 Gang of Four design patterns, as listed in the book Design Patterns: Elements of Reusable Object-Oriented Software. Each pattern includes class diagrams, explanation, usage information, and a real world example.


Java 7: new coffee
Big changes
JVM changes
Project Coin
Conclusion

The biggest difference compared to previous Java releases is the fact that all development is done in the open. Most of it will be part of the OpenJDK project, and otherwise as part of the Java 7 project. The OpenJDK development release, which already contains some improvements for Java 7, can be downloaded and installed at this very moment. So check it out if you want to try the new features!



Project Coin: The Call for Proposals Phase is Over!
Project Coin's call for proposals phase is now over! Thirty four days long, the proposal period included nearly 70 proposals being sent to the mailing list, 19 coming in over the last two days, and over 1100 messages on the list discussing those proposals and related topics. With the flurry of pre-deadline activity over, the more deliberative task of finishing reviewing and evaluating the proposals awaits.



JDK 7 Twice as Fast* as JDK 6 for Arrays and Arithmetic
The 7th version of the Java Developer's Kit (aka JDK 7) delivers quite a speed boost over JDK 6 array accesses. For us, this is huge. It's like another year and a half of Moore's law for free.


Java's always suffered relative to C in straight matrix multiplication because Java does range checks on every array access (set or get). With some clever static and run-time analysis, Würthinger et al. are able to eliminate most of the array bounds checks.



Project Jigsaw

Vision The JDK is big—and hence it ought to be modularized. Doing so would enable significant improvements to the key performance metrics of download size, startup time, and memory footprint.

Java libraries and applications can also benefit from modularization. Truly modular Java components could leverage the performance-improvement techniques applicable to the JDK and also be easy to publish in the form of familiar native packages for many operating systems.


Finally, in order to realize the full potential of a modularized JDK and of modularized applications the Java Platform itself should also be modularized. This would allow applications to be installed with just those components of the JDK that they actually require. It would also enable the JDK to scale down to
smaller devices, yet still offer conformance to specific Profiles of the Platform Specification. Okay—so where do we start?


Dynamic enums in Java

The introduction of Enums in Java 5 finally provided a powerful (and slightly magical) way of modelling fixed sets. One can have too much of a good thing, however, and in some situations an enum is a little too fixed to be convenient. Here, I'd like to discuss a pattern I'll call - for want of a better name - the dynamic enum, that addresses this issue.

"'Dynamic enums'? Isn't that a bit like 'type-safe scripting language' or 'fully-specified requirements'?" Well, let me try to outline the intended purpose of a dynamic enum:



vendredi 27 mars 2009

Veille technologique semaine 13


Pour le bulletin de cette semaine, après l'actualité, je vous propose un spécial JDK 7 avec les articles suivants :
  • La perte de savoir faire des entreprises : c'est un constat de plus en plus répandu. Cela touche également le logiciel.
  • La sortie de silverlight 3 par Microsoft pour la réalisation d'application internet riche (au sens de l'expérience utilisateur) : RIA (Rich Internet Application). le 3D, le multimédia et le mode déconnecté sont ajoutés.
  • Différent articles au sujet du prochain JDK numéroté 7 : prévu pour le premier trimestre 2010. La liste des fonctionnalités n'est pas encore fixées, et la liste est longue. Il est possible de faire des propositions sur les évolution du langage Java, jusqu'à fin mars .
  • Swing et JavaFX, c'est quoi l'avenir sur le poste bureautique ?


Bonne lecture.


La prolétarisation dans les sociétés informatiques
Par prolétarisation, j'entends le processus qui conduit à la perte de connaissance critique et de savoir-faire.

Au début de la phase d'industrialisation, le prolétaire est celui qui a vu son savoir-faire passer dans la machine. En conséquence de quoi on ne l'a plus payé pour son savoir faire mais pour sa simple force de travail qui ne le distinguait dès lors plus d'un autre travailleur, et donc pouvait être mis en concurrence permanente.

C'est quelque chose que l'on peut constater : dans tout marché, dans la mesure où il s'industrialise, il y a une prolétarisation non seulement des utilisateurs et des consommateurs mais également de ceux qui font partie de la chaîne de conception et d'ingénierie. Aujourd'hui un garagiste ne répare plus les voitures : il branche une machine à diagnostic et vous indique le module à changer si son appareillage ne peut faire la réparation en réinitialisant le module incriminé.

Or ne peut pas être architecte (que ce soit de l'architecture réseau, applicative ou même de l'architecture des données) en étant incapable de porter un regard critique. Cela passe nécessairement par la capacité à discuter et à émettre des avis critiques, ce que ne sont pas capables de faire les experts techniques maîtrisant les solution d'un seul éditeur de logiciel.



RIA : Sortie de Silverlight 3 en Beta et d'Internet Explorer 8

Vnunet.fr consacre un article à la sortie de la version beta de Silverlight 3. Microsoft a dévoilé cette nouvelle version à l'occasion de l'évènement Mix 09. Celle-ci est aussi disponible pour mac.
Pour faire court, cette nouvelle version apporte les fonctionnalités suivantes :

  • de nouvelles fonctions 3D (animation et graphisme)
  • support des vidéos haute définition et plein écran
  • et le mode déconnecté.
Microsoft a également profité de Mix 09 pour présenter Internet Explorer 8. Présenté comme plus rapide, facile et fiable par Microsoft, IE8 a amélioré son système d'onglets évitant la perte de tous les onglets en cas de plantage.
Cependant, certaines controverses demeurent et les standards ne sont toujours pas aussi bien respectés que ses concurrents : il n'obtient que 21 / 100 à l'Acid Test 3 contre 71 pour Firefox 3 et 100 / 100 pour Safari 4.0. En outre, IE8 représente également, pour les développeurs web, la nécessité de tester et valider le comportement de leurs applications web sur trois moutures d'IE, les versions 6 et 7 étant toujours largement répandues.


OpenGL 3.1 Released Plus New Audio Standard
Nine months ago the Khronos Group released the specification to OpenGL 3.0. OpenGL 3.0 brought version 1.30 of the GL Shading Language, the introduction of Vertex Array
Objects, texture arrays, more flexible framebuffer objects, and a number of other graphical features. What OpenGL 3.0 didn't bring was a major API revision that many developers had expected, and it was also arrived many months late. Today though, Khronos has announced OpenGL 3.1.


Spécial JDK 7 :

Year in Review: What to expect in Java SE 7

An overview of features in and out of the next Java specification

  • Better dependency management
  • Project Jigsaw and the 'module' keyword
  • (More) NIO APIs
  • Tackling the time dimension
  • Parallel processing
  • Better precision through annotations
  • Simplifying Swing
  • Java Management Extensions (JMX) updates
  • Language changes
  • Dynamic-language support
  • Java SE 7 and the future of Java

Java 7

This page lists the proposed features in Java 7 and information about them. At this point, no Java 7 JSR has been created (although Danny Coward apparently is working on it). So, consider this a list of possible features and libraries, not the actual future contents of Java 7.


JDK 7 Schedule : 1Q 20010
The primary goal of this Project is to produce an open-source implementation of the next major revision of the Java SE Platform.


JDK 7 Features
This is the list of features being developed by Sun, and others, for JDK 7. When the Java SE 7 Platform JSR is submitted then these features will be proposed therein, except for those listed as either VM-level or implementation specific.


Presentation: Evolving the Java Platform

The current status of the JVM regarding languages running on top of it and the need to evolve in order to support dynamic languages.
In this presentation recorded at QCon London 2008, Ola Bini talks about the current status of the JVM regarding languages running on top of it and the need to evolve in order to support dynamic languages.


What will be in Java SE 7 (subject to change) Posted on 20 Mar 2009



New Features in Java 7.0 - Part 1
This article discusses the new features that are available in Java 7.0. Java 7.0 comes with bunch of new features – language level changes as well as API level changes and this article concentrates on the new API features such as Cache API, New Date and Time API and New IO 2 as well as the language level changes in the form of Super packages. The readers are assumed that they are more familiar with the Java 5.0 language level changes such as Generics and Annotations. This article covers few of the new features in Java 7.0 and the remaining set of new features will be covered in the next article. It is likely that the APIs may undergo changes before the formal release of Java 7.0 happens.

The following new features will be discussed in detail in this article.
  • Cache API
  • Date and Time API
  • New IO2
  • Super Packages

Introduction to Java Module System in Java 7.0

This article explains the new Java Module System that will be included in the Java 7.0 release. Modules are new to the java language and they provide a standard for developing and deploying applications. The article will explain the various sub components that are available as part of the Java Module System's architecture. The various sections discussed in the article will provide in-depth details about the module definition, the metadata associated with the module, the versioning system and the repositories for storing and retrieving the module definitions.

The architecture of Java Module System consists of three main components:
  • Java Module
  • Versioning System
  • Repository

Java on the Desktop, the past, the present and the future - interview with Richard Bair

In this interview Richard Bair answers my questions on Swing, SwingX, JavaFX and Java on the desktop in general, saving some of the announcements for the next week's Devoxx conference. We wanted to do this interview immediately after my thoughts on the state of core Swing, but the JavaFX release has postponed it up until now.

vendredi 20 mars 2009

Veille technologique semaine 12


L'actualité du monde logiciel ne s'arrête pas, je vous propose les sujets suivants :
  • IBM est en discussion pour racheter SUN pour 6,5 milliards de dollars.
  • Un livre qui vient de sortir, écrit par Robert Cecil Martin, traduit en français "coder proprement" dont la lecture est obligatoire. C'est un expert reconnu par la communauté qui propose des bonnes pratiques qui ont données des résultats.
  • un article sur le Domain Driven Design : comment séparer correctement les préoccupations avec un tissage de code réalisé par une technologie de programmation par aspects (AOP) dont les points de coupures sont réalisés par des annotations (@).
  • C#4 propose des API pour exprimer le principe de la programmation par contrat : les préconditions, les post conditions et les invariants sont disponible à l'aide d'une librairie. Exemple : string GetDescription(int x){ Contract.Requires(x>0); Contract.Ensures(Contract.Result<string>() != null);
  • Les nouveaux langages qui s'execute dans une JVM canditat à l'entrée dans les entreprises : c'est une évolution des JVM qui deviennent multi-langages (comme DotNet).
  • le nouveau garbage collector prévu pour le JDK 7 : Garbage First, donne de très bon résultat et SUN l'intègre dans le JDK 6 update 14 actuellement en beta. C'est un garbage collector qui est capable de réduire le temps de latence à quelques millisecondes au lieu de quelques dizaines de milliseconde actuellement.
Bonne lecture.


IBM en discussion pour racheter Sun

IBM serait intéressé par racheter Sun, c'est ce qu'affirme le Wall Street Journal citant des sources proches de ces sociétés. Des discussions seraient en cours mais rien ne garantit qu'elles aboutissent. Toutefois, dans le cas contraire, l'annonce pourrait se faire dès cette semaine.

IBM serait prêt à mettre 6,5 milliards de dollars sur la table (4,9 milliards d'euros) pour acquérir la totalité de Sun. Et de renforcer ainsi sa position face à HP. Sun aurait précedemment abordé HP et Dell pour se faire racheter affirme le quotidien économique. Sun a affiché des pertes de 209 millions de dollars sur son second trimestre fiscal.



Nettoyez votre code et devenez plus performant !
Si un code sale peut fonctionner, il peut également compromettre la pérennité d'une entreprise de développement de logiciels. Chaque année, du temps et des ressources sont gaspillés à cause d'un code mal écrit. Toutefois, ce n'est pas une fatalité.

Grâce à cet ouvrage, vous apprendrez à rédiger du bon code, ainsi qu'à le nettoyer "à la volée", et vous obtiendrez des applications plus robustes, plus évolutives et donc plus durables. Concret et pédagogique, ce manuel se base sur les bonnes pratiques d'une équipe de développeurs aguerris réunie autour de Robert C. Martin, expert logiciel reconnu. Il vous inculquera les valeurs d'un artisan du logiciel et fera de vous un meilleur programmeur.

Coder proprement est décomposé en trois parties. La première décrit les principes, les motifs et les pratiques employés dans l'écriture d'un code propre. La deuxième est constituée de plusieurs études de cas à la complexité croissante. Chacune d'elles est un exercice de nettoyage : vous partirez d'un exemple de code présentant certains problèmes, et l'auteur vous expliquera comment en obtenir une version
saine et performante. La troisième partie, enfin, sera votre récompense. Son unique chapitre contient une liste d'indicateurs éprouvés par l'auteur qui vous seront précieux pour repérer efficacement les défauts de votre code.

Après avoir lu ce livre, vous saurez
• faire la différence entre du bon et du mauvais code ;
• écrire du bon code et transformer le mauvais code en bon code ;
choisir des noms, des fonctions, des objets et des classes appropriés ;
• mettre en forme le code pour une lisibilité maximale ;
implémenter le traitement des erreurs sans perturber la logique du code ;
• mener des tests unitaires et pratiquer le développement piloté par les tests.

Véritable manuel du savoir-faire en développement agile, cet ouvrage est un outil indispensable à tout développeur, ingénieur logiciel, chef de projet, responsable d'équipe ou analyste des systèmes dont l'objectif est de produire un meilleur code.

Au sommaire
• Code propre
• Noms significatifs
• Fonctions
• Commentaires
• Mise en forme
• Objets et structures de données
• Gestion des erreurs
• Limites
• Tests unitaires
• Classes
• Systèmes
• Émergences
• Concurrence
• Améliorations successives
• Au coeur de JUnit
• Remaniement de SerialDate
• Indicateurs et heuristiques
• Annexe A : Concurrence II
• Annexe B : org.jfree.date.SerialDate
• Annexe C : Références des heuristiques


Domain-Driven Pointcut Design
  • What is a pointcut language?
  • The problems with using signature patterns in pointcuts
  • Metadata to the rescue?
  • Metadata and Ubiquitous Languages
  • Bringing it all together: Domain-Driven Pointcut Design

Adopting New JVM Languages in the Enterprise

I'll limit my discussion to these representative (and best known) alternative languages for the JVM.
  1. JRuby – Ruby running on the JVM.
  2. Scala – A hybrid object-oriented and functional language that runs on .NET as well as the JVM. (Disclaimer: I'm co-writing a book on Scala for O'Reilly.)
  3. Clojure – A Lisp dialect.

I picked these languages because they seem to be the most likely candidates for most enterprises considering a new JVM language, although some of the languages listed below could make that claim. There are other deserving languages besides these three, but I don't have the time to do them justice. Hopefully, you can generalize the subsequent discussion for these other languages.


.NET 4 Feature Focus: Code Contracts
Last year we started talking about Spec#, a language based on C# that supports design by contract. Design by contract builds on top of concepts like static typing, where certain actions cannot be performed unless it can be verified at compile time. Contracts usually take the form of pre- and post conditions such as a parameter or return value never being null or only containing a certain range of values.
Rather than force developers to learn a whole new language such as Spec#, Microsoft is working on a language-agnostic library that can beleveraged by any .NET language. In some ways contracts look like assertions, but they are very different under the covers. Contracts are supported by a combination of static code analysis, which can be both inside and outside the compiler, as well as by testing frameworks. They are also executable, meaning they behave like assertions when running a debug build.


New garbage collector G1 available in JDK7 / OpenJDK
Garbage collection forms a big part of languages like Java that support memory management. This post by Jeremy Manson discusses the new garbage collector that will form part of JDK 7, and which is already available in the latest OpenJDK drop.

vendredi 19 décembre 2008

Veille technologique semaine 51

Pour cette semaine 51, je vous propose les articles suivants :
  • c'est la saison des prévisions pour 2009 et le JDK 7. Il est reporté début 2010 avec une réduction des évolutions. Certaines ne sont pas encore prêtes.
  • La conférence Devoxx 2008 en Belgique a permis d'avoir des précisons sur le JDK 7.
  • Un résumé, jour par jour, des conférences Devoxx 2008.
  • Un article sur une présentation de Devoxx au sujet des estimations et des engagements dans le développement du logiciel.
  • Ensuite, deux articles au sujets des composants logiciels. Un premier qui explique l'intérêt de la modélisation UML2 et qui propose le concept de composant
  • et un exemple de modèle de composants de l'industrie : SCA (Services Component Architecture) proposé par IBM et actuellement normalisé chez OASIS qui a en charge des spécifications. Une implémentation open sources est proposée par le groupe Apache avec TUSCANY.
  • La société Excelsior qui sort la version 6.4 de son compilateur Java. Cette version propose une gestion de la propriété intellectuelle du code Java avec un maquillage complet du binaire.
  • L'article suivant rappel, pour ceux qui font des IHM avec Swing, que le thread de l'IHM (EDT : Event Dispatcher Thread) est le seul thread autorisé à manipuler un JavaBean Swing. C'est une règle qu'il faut respecter à 100% sinon les disfonctionnement arrive très vite (dead lock, comportement non conforme ou non prévue, ...). Swing n'est pas thread safe, il faut en tenir compte.
  • Sortie de l'update 11 du JDK 6, avec son lot de bugs corrigés.

Bonne lecture.



Year in Review: What to expect in Java SE 7
An overview of features in and out of the next Java specification. The current target for Java SE 7 is early 2010. We can expect a platform JSR to arrive in the first quarter of 2009.
  • Better dependency management
  • Project Jigsaw and the 'module' keyword
  • (More) NIO APIs
  • Tackling the time dimension
  • Parallel processing
  • Better precision through annotations
  • Simplifying Swing
  • Java Management Extensions (JMX) updates
  • Language changes
  • Dynamic-language support
  • Java SE 7 and the future of Java


From Devoxx: JavaFX on show, JDK 7 News !
Closing out a busy week here at Devoxx, the release of JavaFX and JDK 7 news have been the talk of the town !



Java 7 Update from Mark Reinhold at Devoxx
This is a summary of Mark Reinhold's Java 7 update given at Devoxx, with a few comments from myself. Mark described his presentation as a provisional plan and not binding. The changes in Java 7 will come from Sun and others.


Devoxx 2008 : Bien plus que Java. En effet.

Devoxx, comme vous le savez, c'est le nouveau nom donné à Javapolis. Et ce nom permet bien plus de liberté qu'auparavant.

Avant, Javapolis oblige, tout tournait autour de Java.
Maintenant, avec Devoxx, les organisateurs peuvent se permettre d'étendre le spectre. Même si le focus est toujours principalement sur Java.




Devoxx : présentation sur les estimations du temps de dév
Estimation : Prediction is a very difficult task especially about future ones…"
Giovanni demande à l'assistance qui donne des estimations de temps de développement ? la majorité de la salle. Qui se fait négocier par son managment ces temps de développement ? Encore une fois pas mal de monde.

Il explique ensuite la différence entre "Estimation" et "Engagement".
L'estimation est la mesure objective du temps nécessaire pour faire une tâche. Cette estimation n'est donc pas négociable.
L'engagement représente le but à atteindre et donc la promesse. Cette promesse regroupe un niveau de qualité, un certain nombre d'itérations, bref c'est bien la promesse de ce que le client aura. L'estimation c'est le prix à payer.

Faut-il surestimer ou sous-estimer ?
A cette question, Giovanni répond que les développeurs sont trop optimises de 30%. Par sécurité il faut donc mieux ajouter un peu plus à une estimation initiale.
Cependant, l'effet inverse s'appelle la loi de Parkinson : le temps de travail temps à rejoindre le temps donné pour effectuer une tâche. Si tu me donnes 10 jours pour faire cette tâche, je vais tendre à remplir ces 10 jours, c'est humain.
Avoir trop de temps disponible entraine aussi le phénomène de procastination. On tend à remettre à demain des tâches.



Définir une architecture par composants avec UML2
Les limitations de la modélisation / programmation par objet sur la réutilisabilité et l'autonomie, ont renouvelé l'intérêt pour les composants. En effet, réutiliser une classe signifie souvent importer un ensemble de classes liées, mal identifié par l'utilisateur. Hériter d'une classe signifie créer une dépendance forte, qui sera excessivement sensible aux évolutions de la classe héritée. Les points d'utilisation, les modes d'assemblage, l'autonomie des éléments réutilisés, le contrat d'utilisation ne sont pas fournis par la programmation/modélisation objet.

La notion de composant a été un ajout majeur introduit dans le standard UML2. Le composant permet en effet d'isoler des parties de logiciel en unités autonomes, avec des points de connexion bien définis. Les notions de "structure interne" de classe, de port et de part sont des notions nouvellement introduites offrant des mécanismes utiles pour les architectures orientées composant. A travers ces mécanismes, UML2 apporte la modélisation par composant. Ces mécanismes d'assemblage de composants permettent de réaliser le vieux rêve du "lego logiciel", c'est à dire d'assembler des composants qui ne se connaissent pas obligatoirement, pour former un système englobant. Pour ceux qui ont connu l'enfer de l'intégration logicielle, ou pire encore l'intégration logiciel / matériel, ces mécanismes sont très prometteurs.



Introduction à SCA (Service Component Architecture)
SCA (Service Componant Architecture) est un ensemble de spécifications visant à simplifier la création et la composition de services (indépendamment de leur implémentation) dans le cadre d'Architectures Orientées Service (SOA). SCA propose donc un modèle de programmation pour la construction d'applications à base de composants suivant le paradigme SOA. Ce modèle se base notamment sur l'idée qu'un service de niveau N se construit par assemblage / agrégation / orchestration de services de niveau N-1 ou N (Et ce quelque soit la hiérarchisation choisie. Par exemple : Services organisationnels, Services métiers, Services techniques).

A ce titre, SCA fournit deux niveaux de modèle :

  • Un modèle d'implémentation : Construire des composants qui fournissent et utilisent des services
  • Un modèle d'assemblage : Construire une application métier à forte valeur ajoutée en liant entre eux un ensemble de composants.

Ainsi, SCA insiste sur une séparation forte entre l'implémentation des services et leur assemblage.

Le modèle SCA se veut agnostique vis-à-vis :
  • Des technologies d'implémentation des composants de service. Il inclut entre autre les technologies d'implémentation suivantes : Java, C++, BPEL, XQuery ou SQL.
  • Des technologies d'exposition et d'invocation des composants de services (même si WSDL et les interfaces java sont mis en avant).

SCA permet de décrire des services et leur assemblage indépendamment de toutes considérations techniques d'implémentation.


Excelsior JET
Accelerate, protect, and deploy your Java applications.
Excelsior JET is a compliant Java SE 6 technology implementation with an ahead-of-time (AOT) compiler and a deployment toolkit. Use it if you want to:
  • Speed up your Java applications without any source code changes or hardware upgrades
  • Protect your Java code from decompilers without compromising performance
  • Build compact, professional installers for your Java applications without dependency on the JRE

Excelsior JET 6.4 is the first release that introduces features designed specifically for IP protection enhancement.



Swing threading and the event-dispatch thread
The evolution and pitfalls of Swing's single-threaded event model.
To ensure your Swing components are accessed correctly you should always create the entire UI in the event-dispatch thread, as shown here:

Runnable runner = new Runnable() {
public void run() {
// ...create UI here...
}
}

EventQueue.invokeLater(runner);

Moving your initialization code to the event-dispatch thread is the only way to ensure that your Swing GUIs are thread safe. Yes, it will feel awkward at first, but progress usually does.




JavaTM SE 6 Update Release Notes Changes in 1.6.0_11


vendredi 12 décembre 2008

Veille technologique semaine 50

Pour le bulletin de cette semaine 50, je vous propose les sujets suivants :
  • une première rétrospective de l'année 2008 sur la technologie Java : du langage à la plate-forme.
  • JavaFX est sorti depuis début décembre, et un certain nombre d'articles commencent à sortir. Une version 1.1 de JavaFx devrait voir le jour en Février, et une autre version 1.5 fera son apparition aux alentours de Juin 2009. Je vous propose les articles suivants :
    • SUN et JavaFX
    • des plugins qui permettent d'utiliser photoshop ou illustrator comme outil de composition visuel pour JavaFX
    • la FAQ de JavaFX
    • un article sur la création d'une petite application en JavaFX
  • Comment mesurer la productivité ? C'est une question récurrente pour laquelle l'article propose une solution qui a fait ses preuves : les tests automatisés pour permettre le refactoring.
  • Le planning de la conférence annuelle Javoxx (anciennement JavaPolis) qui se passe en Belgique en décembre. C'est une conférence très importante pour le monde Java avec des présentations de qualités. Ce planning montre un très grands nombre de sujets tous les plus intéressant les uns que les autres. Je vous indiquerais lorsque les slides seront disponible sur internet.
  • Un article au sujet de quelques amélioration des EJB proposé par la version EJB 3.1 avec : l'asynchronisme sur les services, une version d'EJB lite, ...
  • un petit article au sujet des exceptions en Java et de leur bon usage.
  • encore une page sur les performances en Java.
  • et enfin, pour ceux qui font de l'IHM avec Swing et Awt, sur la suppression de la limitation sur le mélange de composants lourd et léger : enfin corrigé dans le version JDK 6 update 12 (non encore officiel) et JDK 7.
Bonne lecture


Year in Review: Java in 2008 - What just happened?

When high-tech history is inscribed for the ages, 2008 may be remembered as the year Java tipped from a language-centric to a platform-centric technology. Andrew Glover kicks off JavaWorld's Year in Review series with a look back over the last 12 months in Java development, when alternate languages for the JVM took center stage, new directions emerged in the enterprise space, and Sun Microsystems staked its claim on the client side -- with or without Swing.


With JavaFX, Sun seeks new coders, new revenue.
JavaFX also comes with a slick feature, the ability to move running applications out of the browser and onto the desktop--and back, if desired. Essentially, they can change their nature and abilities according to where they're housed. And the same application also can run on JavaFX Mobile, holding the promise for programmers that they won't have to endlessly rewrite the same applications for different media.

"You can build a media player, run it in a browser, then you can simply drag it out of your browser onto your desktop, and it becomes a desktop application automatically. It's the same code, the same application," said Jeet Kaul, Sun's senior vice president of Java engineering. Moving to the desktop, the application could take advantage of new screen real estate that affords a better user interface and new permissions for tasks such as writing files to a hard drive, Kaul said.

JavaFX 1.0 Production Suite enables designers to convert their rich media assets to JavaFX format and view the converted files before handing them off to JavaFX application developers. JavaFX 1.0 Production Suite consists of three components:

JavaFX Plugin for Adobe Photoshop (exports graphics in Photoshop to JavaFX format)
JavaFX Plugin for Adobe Illustrator
(exports graphics in Illustrator to JavaFX format)

JavaFX Media Factory
(converts SVG files to JavaFX format and provides a Viewer for displaying JavaFX format files)



JavaFX Technology - FAQs


Getting Started With JavaFX Technology
Creating Your First JavaFX Application
This section guides application developers in creating their first JavaFX application by using the NetBeans IDE 6.5 for JavaFX 1.0 technology. For web designers who want to get started using the JavaFX 1.0 Production Suite, see the Getting Started With JavaFX 1.0 Production Suite article.


Comment mesurer la productivité ?
Depuis toujours, dans le monde du logiciel, on entend « Il faut augmenter la productivité des développements ». Il ne suffit pas d'en parler pour améliorer la productivité. Comment passer d'un slogan très abstrait à des actions concrètes et des résultats tangibles ?

On ne peut améliorer que ce que l'on mesure. Il est donc impératif de trouver un indicateur permettant de vérifier l'amélioration recherchée. Les mesures comme le nombre de lignes de code ou le nombre de points de fonctions, encore utilisées aujourd'hui, sont trop éloignées de la valeur produite pour être intéressantes. Un indicateur beaucoup plus proche de la satisfaction client, et donc plus pertinent, est « le nombre de fonctionnalités sans erreur ajoutées à un logiciel durant un période donnée », ce que l'on pourrait appeler le débit de fonctionnalités.
Malgré les différences de technologies, les deux tendances (1) et (2) ont une caractéristique commune : après un certain temps, le débit de fonctionnalités chute. Le profil 3 montre les équipes arrivant à conserver une augmentation de leur productivité. Quelle caractéristique magique ont-elles ?

Une technologie spécifique ? Non. Une architecture spéciale ? Non. Elles observent simplement deux disciplines : le test automatisé et le remaniement permanent du code.


Javoxx 2008 - Schedule

Avec 3200 personnes inscrites la conférence Devoxx 2008 qui a eu lieu du 8 au 12 décembre 2008 est complète ! C'est un vrai plébiscite et une grande réussite pour le JUG Belge, organisateur de cette conférence.


EJB 3.1 – EJB New and Improved!

The EJB 3.0 specification was a huge improvement from what we were used to in the early versions of EJB. Available as an early draft, EJB 3.1 has many more features and is even easier to use. Let's take a brief overview of a few interesting topics being considered in this new and improved version of EJB.


Exceptions in Java

In this article, we look at exception handling in Java. We start with the history of exceptions, looking back at the precursor of Java, a language called Oak. We see reasons why Thread.stop() should not be used and discover the mystery of the RuntimeException name. We then look at some best practices that you can use for your coding, followed by some worst practices, in the form of exception anti-patterns.


Java Performance

I remember 12 years ago, when Java was on the rise, and it was seen as "too high level" and slow when compared to C and C++.
The latter languages were the languages of choice when you wanted to achieve maximum performance.
Java, on the other hand, was seen back then as a high overhead alternative, due to its features like bytecode generation by the compiler, automatic memory management, references instead of pointers, and built in array bounds checks. At that time, those features looked like a costly overhead. The reasoning behind that point of view went more or less along these lines:

  • Java provides automatic array bounds verification, which means that it has to check the limits of the array at every access, therefore it has to be slower.
  • Java doesn't have pointers. There must be an overhead every time a reference is accessed, therefore Java is slower than C/C++.
  • Java has the garbage collector, therefore the virtual machine has to spend a long time finding unreachable objects, therefore Java is slower than C/C++.
  • Java compiles to bytecode, therefore it loses to C and C++ because those two languages compile to native code.

The reasoning above may have been true back then, in the pre-HotSpot era of Java 1.0 and 1.1, but since the introduction of the HotSpot virtual machine in java 1.3 those problems have been greatly reduced and in some cases Java now even beats C and C++ in terms of performance.


Allow limited mixing of heavy and lightweight components

Release Fixed 7(b19), 6u12(b01) (Bug ID:2167756)



vendredi 5 décembre 2008

Veille technologique semaine 49

Pour cette semaine 49, je vous propose les sujets suivants :
  • sortie de JavaFX en version 1.0. Après plus d'un an depuis l'annonce à JavaOne en juin 2007, SUN propose la technologie JavaFX en version 1.0. Une technologie basée sur Java, pour réaliser des applications IHM pour internet : les RIA (Rich Internet Application). Le terme riche fait référence à l'expérience utilisateur : interactions, look and feel, multimédias, etc... pour des IHM connectés à des applications distantes à travers internet. C'est une technologie qui se place en concurrence de la technologie Air d'Adobe (flash) et de la technologie Silverlight de Microsoft, ou de l'HTML 5. C'est ambitieux de la part de SUN de se placer en challenger.
  • JavaFX c'est quoi ?
  • FAQ JavaFX
  • JavaFX script
  • La version 2.0 des API de persistance : JPA avec les requêtes basées sur des critères typées. C'est une avancé importante sur le chemin de l'intégration d'un langage de requête dans Java, comme LINQ pour C#.
  • LIQUidFORM par google qui propose de résoudre le même genre de problème de requêtes typées pour JPA.
  • Un article technique sur le principe de compression des pointeurs mémoire pour les JVM 64 bits en pointeur 32 bits. Cette compression permet d'avoir les avantages du mode 64 bits du pentium (meilleures performances) sans les inconvénients de la taille des pointeurs 64 bits : la JVM est en mode 64 bits mais avec des pointeurs 32 bits, ce qui donne une mémoire maximum adressable de 32 Go = 4Go x 8 = 32G octets. Question : pourquoi 4 x 8 ? A votre avis ? Réponse dans l'article.
  • L'article suivant est une explication de ce principe de compression de pointeur : oops = "ordinary object pointer"
  • Un article sur l'analyse de la couverture de code. C'est un point incontournable pour augmenter la qualité de code.
Bonne lecture.


JavaFX Technologies At a Glance
JavaFX provides a productive development environment for web developers, mashup authors, and Java developers to quickly and easily build the next generation of rich internet applications (RIAs). With JavaFX, designers and developers can collaborate on building high-impact RIAs. Designers gain a broad set of tools to complete the designer/developer workflow, and developers have a simple, declarative scripting language with the right set of tools.

site JavaFX
http://javafx.com

Quickly and easily create and deploy Rich Internet Applications with JavaFX
It's here. The JavaFX Rich Client platform. A platform and tools suite that offers distinct advantages to Web developers, Web designers, and Java developers that are building rich, connected experiences.


Frequently Asked Questions : JavaFX
JavaFX is an expressive rich client platform for creating and delivering rich Internet experiences across all screens of your life.
JavaFX is fully integrated with the Java Runtime and takes advantage of the performance and ubiquity of Sun's Java Runtime Environment that is installed on literally billions of devices worldwide. In addition, JavaFX fosters a productive and collaborative developer-designer workflow.
Web developers and designers can use JavaFX to imagine, create and express a real experience that jumps out of the browser and into our day-to-day lives. JavaFX is the powerful combination of a scripting language â€" JavaFX Script, a rich client platform and set of tools that enable a complete, productive and collaborative developer-designer workflow.



JavaFX Released: Top 10 Things to Know



Experiments With JavaFX Script

JavaFX was unveiled at JavaOne 2007 as a new initiative for consumer-oriented Java applications. The strategy includes a new programming language called JavaFX Script that is geared towards developing Java-based GUIs, as well as libraries and tools for developing desktop, browser and mobile applications.



Java Persistence 2.0 Public Draft: Criteria API :
Probably the most significant of the new features introduced in the JPA 2.0 Public Draft is the Criteria API. This is a non-string-based API for the dynamic construction of object-based queries.

Criteria queries are constructed in terms of query definition objects.
As with JPQL static and dynamic queries, criteria query definition objects are passed to the EntityManager createQuery method to create Query objectsâ€"and then executed using the methods of the Query API.

Loosely speaking, a QueryDefinition object can be thought of as a set of nodes corresponding to the semantic constructs of the query: domain objects, which correspond to the range variables and other identification variables of the JPQL FROM clause where clause predicates, which comprise one or more conditional expression objects select clauses, which comprise one or more "select item" objects order-by and group-by items subqueries and so on...




LIQUidFORM stands for Language Integrated QUeries
For Object Relational Mapping and is a Java library that provides a Java Domain Specific Language for building type-safe and refactoring proof JPA queries.



Language Integrated Queries For Object Relational Mapping
LIQUidFORM stands for Language Integrated QUeries For Object Relational Mapping and is a Java library that provides a Domain Specific Language for
building type-safe and refactoring proof JPA queries. While the project draws its inspiration from the LINQ project, it is not LINQ for Java : its aim is only to help in writting JPA queries against your domain model. Read on to understand what LIQUidFORM is and what it is not.



32-bit or 64-bit JVM? How about a Hybrid?
Before x86-64 came along, the decision on whether to use 32-bit or 64-bit mode for architectures that supported both was relatively simple: use 64-bit mode if the application requires the larger address space, 32-bit mode otherwise. After all, no point in reducing the amount of data that fits into the processor cache while increasing memory usage and bandwidth if the application doesn’t need the extra addressing space.

When it comes to x86-64, however, there’s also the fact that the number of named general-purpose registers has doubled from 8 to 16 in 64-bit mode. For CPU intensive apps, this may mean performance at the cost of extra memory usage. On the other hand, for memory intensive apps 32-bit mode might be better in if you manage to fit your application within the address space provided. Wouldn’t it be nice if there was a single JVM that would cover the common cases?



Compressed oops in the Hotspot JVM
What's an oop, and why should they be compressed?
An "oop", or "ordinary object pointer" in HotSpot parlance is a managed pointer to an object. It is normally the same size as a native machine pointer, which means 64 bits on an LP64 system. On an ILP32 system, there is a maximum heap size of somewhat less than 4Gb, which is not enough for many applications. On an LP64 system, though, the heap for any given run may have to be around 1.5 times as large as for the corresponding IPL32 system (assuming the run fits both modes). This is due to the expanded size of managed pointers. Memory is pretty cheap, but these days bandwidth and cache is in short supply, so significantly increasing the size of the heap just to get over the 4Gb limit is painful.


L'analyse de couverture de code en Java
Il ne reste plus grand monde pour soutenir que l'écriture de tests unitaires automatisés est une perte de temps sur un projet logiciel - la notion de dette technique entre dans les moeurs. Cette prise de conscience salutaire se heurte pourtant souvent à deux grandes catégories de difficultés :
Le conservatisme - pour ne pas dire la stupidité - de certains chefs de projet, qui persistent à voir dans l'écriture des tests une activité contre-productive, qui servira de variable d'ajustement au moindre coup de grisou. L'existant : quand le projet n'a pas systématisé la pratique du test dès son origine et que la multiplication des anomalies tardives le pousse à la réintroduire. Par où commencer ?

Pour le premier point, la solution passe par un effort pédagogique, ou, pour les cas désespérés, par une reconversion imposée ou un congé sabbatique.
Pour le second, il faut un peu de bon sens, et un peu d'outillage.

C'est sur le deuxième aspect qu'interviennent les outils d'analyse de couverture de code (ou "code coverage" en anglais). Dans la suite, nous verrons que ces outils ne permettent pas
d'évaluer les tests unitaires d'un point de vue qualitatif, mais qu'ils peuvent en revanche apporter au bon sens un précieux appui en répondant aux questions suivantes :
  • Quels sont les tests unitaires déjà en place ?
  • Les tests sont-ils en phase (à jour) avec le code qu'ils testent ?
  • Les fonctions critiques de l'application sont-elles couvertes par les tests ?

vendredi 28 novembre 2008

Veille technologique semaine 48

Pour le bulletin de cette semaine 48, je vous propose les sujets suivants :
  • un article de wikipédia au sujet des transactions en mémoire. Ces transactions permettent de prendre en compte la préoccupation de la gestion du multi-thread d'une manière fiable. Ce concept provient des systèmes de gestion de base de données, avec les propriétés ACID bien définies. La version transaction mémoire correspond à : ACID = Atomique (c'est entièrement fait ou pas du tout), Cohérence (si l'application est cohérente, la transaction le sera), Isolation (chaque thread travail comme si il est tout seul) et Durable (en mémoire, visible des autres threads). Cette gestion des transactions doit être prise en charge par l'infrastructure et non pas par le développeur. Sans les transactions, c'est le développeur qui doit écrire (directement ou indirectement) le code de gestion des verrous avec tous les risques que cela comporte (accès concurrent non thread safe, dead lock, gestion imbriqué compliqué, ...). Il est donc temps d'intégrer les transactions mémoire dans nos infrastructures.
  • un article sur OpenCL qui est un standard géré par le groupe Khronos, et qui propose une API qui permet d'utiliser la puissance de calcul des GPU (Graphic Processeur Unit).
  • l'article suivant est la version pour utiliser les GPU par NVidia : CUDA.
  • un problème récurrent dans les IHM (en dehors de l'ergonomie) relatif à la perception des couleurs en fonction des couleurs voisines. Le cerveau humain fait des corrections qui mettent en évidence ou qui atténue la perception relative de ces couleurs. Il faut donc en tenir compte pour construire des IHM. Il est parfois nécessaire d'ajuster les couleurs avec l'image finale de l'IHM. Il faut avoir un processus de composition visuel : WYSIWYG (What You See Is What You Get).
  • la gestion des fenêtres semi transparentes et non rectangulaires avec JavaFX.
  • la distribution d'objet Ruby avec le produit Terracotta : c'est encore un exemple de solution qui montre l'intérêt d'avoir des objets Java et Ruby (JRuby) qui partagent le même runtime : ils peuvent tous être répliqués par Terracotta.
  • la liste des modifications du langage Java proposée pour le JDK 7. Cette liste n'est toujours pas validé officiellement.
  • le Beans Binding for Java (JSR 295) du JDK 7 permet de faire le lien entre un JavaBean et un objet Swing. Il ne permet pas de faire le lien avec un objet Java tout simple (POJO : Plain Ordinary Java Object) et un objet Swing.
Bonne lecture.


Software transactional memory
In computer science, software transactional memory (STM) is a concurrency control mechanism analogous to database transactions for controlling access to shared memory in concurrent computing. It functions as an alternative to lock-based synchronization. A transaction in this context is a piece of code that executes a series of reads and writes to shared memory. These reads and writes logically occur at a single instant in time : intermediate states are not visible to other (successful) transactions.


OpenCL - The open standard for parallel programming of heterogeneous systems
OpenCL (Open Computing Language) is the first open, royalty-free standard for general-purpose parallel programming of heterogeneous systems. OpenCL provides a uniform programming environment for software developers to write efficient, portable code for high-performance compute servers, desktop computer systems and handheld devices using a diverse mix of multi-core CPUs, GPUs, Cell-type architectures and other parallel processors such as DSPs.
OpenCL supports a wide range of applications, from embedded and consumer software to HPC solutions, through a low-level, high-performance, portable abstraction. By creating an efficient, close-to-the-metal programming interface, OpenCL will form the foundation layer of a parallel computing ecosystem of platform-independent tools, middleware and applications.
OpenCL is being created by the Khronos Group with the participation of many industry-leading companies and institutions including 3DLABS, Activision Blizzard, AMD, Apple, ARM, Barco, Broadcom, Codeplay, Electronic Arts, Ericsson, Freescale, HI, IBM, Intel, Imagination Technologies, Kestrel Institute, Motorola, Movidia, Nokia, NVIDIA, QNX, RapidMind, Samsung, Seaweed, Takumi, Texas Instruments and Umeå University.


CUDA, QU'EST-CE QUE C'EST ?
La technologie NVIDIA CUDA est le seul environnement en langage C permettant aux programmeurs et aux développeurs de développer un logiciel et de résoudre des problèmes de calcul complexes en un rien de temps en accédant à la puissance multi-coeur de traitement parallèle des GPU. Avec les millions de GPU déjà déployés et disposant de la fonction CUDA, des milliers de programmeurs de logiciels utilisent les outils de développement CUDA en libre accès pour accélérer les applications (encodage vidéo et audio, forages pétroliers et gaziers, design de produits, imagerie médicale et recherche scientifique).


Colors and the UI
As the name suggests, GUIs (Graphical User Interfaces) present their features and functions visually. The human-computer interaction is heavily based on seeing things, looking for things and interacting with graphical UI elements. Color is a main characteristic of any visual scene, not only on computer screens, but in any situation where we see something. Because most of what we see and interact with in our everyday life is colored (as opposed to shades of white-gray-black), we are very familiar with colors – maybe so much that we don't think about them a lot. On the other hand, it does bother us when we need to read a dark-gray label on a black button. So colors have the potential to boost or wreck the user experience. This article will introduce the concept of user experience and highlight some aspects of colors and color perception together with recommendations for UI design.



Clustered JRuby - Transparent Clustering of JRuby with Terracotta
Similar projects have been attempted in the past. Gemstone also experimented with supporting JRuby on top of their Java based product and there was a previous attempt of JRuby on Terracotta, although that hasn't been updated in some time.


How to Create Translucent and Shaped Windows
The article describes a feature that allows creating applications with translucent and shaped windows.

JavaFX Script is a capable new language that offers a set of APIs for creating RIAs. It also provides you with access to the rich features of the the standard Java language. One of the major features introduced in the Java SE 6u10 release is the ability to create translucent and shaped windows. This includes:
  • making application windows translucent (tuning the general opacity of the window and using a per-pixel translucency effect)
  • setting shapes on application windows
Contents - Introduction
  • Feature Overview
  • Translucent Windows
  • Shaped Windows
  • API Overview
  • Using the Feature
  • Determining the Support for a Desired Effect
  • Making a Window Translucent
  • Setting the Opacity Level of a Window
  • Enabling Per-Pixel Translucency
  • Setting the Opacity Level of a Window
  • Translucent and Shaped Windows Demo
  • Summary


Les nouveautés du langage dans Java 7
  • Support des propriétés JavaBean
  • Support des opérateurs numérique pour le type BigDecimal
  • Comparaison pour les énumérations
  • Invocation chainée
  • Méthodes d'extension
  • Clause catch améliorée
  • Instruction invokedynamic et langages dynamiques
  • Support natif XML
  • Comparaisons de chaines de caractères dans la clause switch
  • Tiered Compilation
  • Garbage collector G1
  • Types et génériques
  • Closures et blocs de gestion automatique des ressources


Beans Binding: A Java Data-Binding Solution with a Serious Problem
Data binding simplifies how you sync a data object's properties with their visual representations, and Beans Binding for Java (JSR 295) aims to deliver a default data-binding specification for the Java platform. Find out how to use Beans Binding and work around its onerous overhead.
In the past couple of years, data binding has emerged as an important concept for GUI development in Java. Its main objective is to simplify the task of syncing a data object's properties with their visual representations on the screen (text fields, tables, combo boxes, etc). JSR 295 (Beans Binding for Java, or simply Beans Binding) aims to deliver a default data-binding specification for the Java platform.

Binding to POJOs (Where Beans Binding Fails)
At this point you likely are ready to jump into Beans Binding. Alas, this library contains a major hidden flaw that makes it extremely cumbersome to use. The flaw is not the fault of Beans Binding itself, but rather the lack of required binding plumbing in the Java language. To be two-way bindable, each object on both the source and target sides must be a full JavaBean with manually-coded property change support—in other words, a simple POJO like this is not fully bindable out of the box.