La plateforme Java EE conserve de nos jours encore une mauvaise réputation. Les fameux EJB 2 et conteneurs lourds démarrant en plusieurs minutes vous rappelleront quelques bons souvenirs. L’arrivée de Spring a ouvert la voie aux conteneurs légers, à l’inversion de contrôle, ou encore à l’injection de dépendances; et est devenue la solution de référence. Cependant, la plateforme Java EE a beaucoup évolué entre temps.
Nous allons voir que Java EE 6 n’a maintenant rien à envier à Spring. Cette plateforme est devenue légère et simple à prendre en main. Toutes les spécifications ne seront pas abordées en détails. Nous parlerons plutôt de conteneurs légers et testables, de managed beans, d’EJB Lite, ainsi que des nombreux services et patterns offert par la plateforme. Nous terminerons par la spécification CDI et ses extensions portables, qui offrent de belles perspectives à la plateforme Java EE 6.
Lire la suite de cet article »
Pour cette avant-dernière session de la conférence, l’incontournable Joshua Bloch remplit comme à son habitude la grande salle de Devoxx. Il nous présente aujourd’hui une rétrospective des meilleures et des pires fonctionnalités ajoutées au fil des versions de Java. Sa critique est objective et sans détours, d’autant qu’il a participé de près ou de loin à bon nombre des sujets abordés.

Lire la suite de cet article »
En Java EE, on parle souvent de clustering de serveurs d’application pour évoquer la mise en relation d’un certain nombre de serveurs.
On parle également de failover pour parler de la capacité à rendre l’indisponibilité d’un ou de plusieurs serveurs du cluster complètement transparente vis à vis du client; cela se traduit par le fait de garantir au client la reprise du même contexte d’exécution qui existait en amont de l’apparition de la panne du serveur incriminé.
Glassfish V3, l’implémentation de référence de JEE6 (JSR 316), inclut à partir de sa version 3.1 des nouvelles fonctionnalités de clustering (synchronisation lors du démarrage d’une nouvelle instance, réplication des changements dynamiques de configuration,…), et offre également un mécanisme de réplication de la session http et des EJB statefull.
Au cours de cet article nous aborderons la mise en place d’un cluster glassfish, la configuration Apache avec le plugin Glassfish Load Balancer et le test du failover à travers une application web.
Il faut noter que toutes les étapes d’installation et de configuration peuvent être réalisées en mode console ou en mode GUI (à travers la console d’administration Glassfish). L’approche console (ligne de commande) a été adoptée.
Lire la suite de cet article »
Voilà 11 ans que Roy Fielding a introduit REST, le style d’architecture original du web appliqué aux échanges inter-applications. Reposant sur HTTP, il promet économie, simplicité et profit des structures réseau en place. Voyons comment l’implémenter via un client JavaScript — présenté dans un article connexe — communiquant avec un serveur Java — présenté ici –. Le code clé-en-main est disponible sur GitHub.
JAX-RS — Java API for RESTful Web Services — standardise l’implémentation de REST en Java (une API + une servlet). Nous retiendrons son implémentation de référence, Jersey, et la déploierons sur un serveur Jetty-Embedded (le code clé-en-main dispose d’un main effectuant le déploiement ; pas besoin d’installer de serveur).
Les web services REST sont des ressources. Une ressource est identifiée par un nom du domaine, produit, commande, etc. HTTP définit 7 verbes pour manipuler les ressources :
- GET pour la lecture,
- PUT pour la modification,
- DELETE pour la suppression,
- POST pour la création et autre,
- OPTIONS (verbes disponibles), HEAD (prise de pouls) et TRACE (écho des headers de l’appelant) non abordés
Une fois déployée, la servlet Jersey mappe l’url /resource/* ; la partie cliente est disponible sur /index.html. Le web.xml définit deux filtres Jersey afin de loguer les trames HTTP des échanges client-serveur.
Lire la suite de cet article »
Dans un précédant article, nous avons vu les lambda expressions et comment elles allaient apparaître dans Java 8 — l’idée étant d’orienter Java vers un style plus fonctionnel. Mais pour parfaire l’intégration de ce style de programmation dans Java, Brian Goetz indique qu’il faudra modifier l’API Collection pour y ajouter des fonctions telles que filter, map ou fold. Afin de faciliter la mise en place de telles fonctions au sein de l’API Collection, Brian Goetz propose d’intégrer les méthodes virtuelles d’extension (virtual extension method) dans le langage.
Dans cet article, nous allons voir ce que sont les méthodes virtuelles d’extension, comment est-ce que Java résout le lien entre ces méthodes et leur implémentation, et comment est traité le cas du diamant (un problème classique en programmation objet). Puis nous comparerons les méthodes virtuelles d’extension avec une autre approche plus ou moins similaire utilisée dans d’autres langages : les mixins.
Lire la suite de cet article »
Durant cet été, l’actuel architecte de Java auprès d’Oracle, Brian Goetz, a fourni des informations intéressantes sur l’implémentation des lambda expressions dans le futur Java 8 et de ses conséquences sur le langage. Par lambda expression comprenez ici closure ou fonction anonyme, qu’il est possible de stocker dans une variable ou de retourner depuis une méthode ou depuis une autre fonction, et bien sûr d’appeler. L’intégration des lambda expressions se fait dans le cadre de la JSR 335 (JSR 335: Lambda Expressions for the JavaTM Programming Language), aussi appelé Lambda Project.
Du point vue d’Oracle, la stratégie donnée à Brian est celle-ci :
Oracle’s position is that Java must evolve – carefully, of course – in order to remain competitive. (« La position d’Oracle est que Java doit évoluer – prudemment, bien sûr – afin de rester compétitif. »)
À partir de quoi, Brian propose :
It is my belief that the best direction for evolving Java is to encourage a more functional style of programming. (« Je suis convaincu que la meilleure orientation pour l’évolution de Java est d’encourager un style de programmation plus fonctionnel. »)
Nous allons voir dans cet article, l’état des actuelles propositions faites pour étendre le langage Java vers un style fonctionnel.
Lire la suite de cet article »
Si vous êtes lecteur de notre blog, vous avez probablement entendu parler des journées XKE. Organisées une fois par mois, cette journée est dédiée aux échanges techniques et humains entre les consultants. Nous souhaitons partager avec vous l’une de ces sessions en vidéo. La session, animée par Cyrille Le Clerc, concerne la gestion des ressources en Java, et plus particulièrement leur fermeture.
Gestion des ressources par Cyrille Le Clerc
Tous les podcasts Xebia France :
Gestion des ressources par Cyrille Le Clerc [ 24:18 ] Download Alors que le Java Community Process (JCP) a annoncé l’apparition de la programmation fonctionnelle dans le langage Java, avec l’introduction des expressions lambda (JSR 335: Lambda Expressions for the JavaTM Programming Language), est-il possible avec la version actuelle de Java de pratiquer ce paradigme ? A l’heure où ces lignes sont écrites, le JCP est en plein brainstorming sur le sujet. Il existe différentes propositions concernant la syntaxe à adopter pour la JSR 335 : une proposition factice, un prototype pour l’OpenJDK serait en cours, la proposition BGGA (comprenez Bracha, Gafter, Gosling et von der Ahé), etc. Mais aucune de ces syntaxes n’ont été officialisées. Toutefois, un premier brouillon devrait apparaître d’ici septembre 2011 en vue d’une sortie officielle a priori avec Java 8 en 2012.
En attendant, il existe un certain nombre d’API permettant aux développeurs d’utiliser la programmation fonctionnelle avec Java sans forcément changer de langage.
Dans cet article, après avoir introduit la programmation fonctionnelle, nous allons nous intéresser à l’état actuel de ce style de programmation dans Java au travers des API suivantes :
- Guava
- Functional Java
- FunckyJFunctional
- LambdaJ
En partant d’un exemple commun, nous verrons les différences qui caractérisent ces API.
Lire la suite de cet article »
En tant que développeur, ne vous êtes vous jamais dit entre deux itérations : « Ah, si seulement j’avais un peu de temps je tenterais d’écrire ce code autrement ? ».
N’attendez plus ! Une code retreat est organisée dans les bureaux de Xebia ce 24 Juin.
L’idée de cette journée est l’amélioration et le partage des compétences au travers d’une pratique répétée de techniques de programmation.
Le principe est le suivant: sur la journée coder en binôme sur plusieurs sessions de 30-45 minutes chacune afin de résoudre un problème. A l’issue de chaque session on change de binôme et tout le code produit est effacé. Drastique mais efficace pour rester créatif. C’est aussi le lieu privilégié pour tester de nouvelles techniques et algorithmes.
Le langage retenu est Java – le code existant du problème étant en Java – et la méthodologie privilégiée le Test Driven Development. Si vous n’êtes que débutant en TDD, cela sera l’occasion d’apprendre aux côtés de gens plus expérimentés.
Rendez-vous le 24 juin à partir de 9h30 jusqu’à 17h dans les bureaux de Xebia au 156 boulevard Haussmann, Paris. Vous aurez besoin d’un ordinateur portable muni de votre IDE préféré. Le repas de midi est fourni.
Le nombre de place est limité à 20; nous vous invitons à vous inscrire sur http://coderetreat-paris.eventbrite.com
Pour plus de détails sur le fonctionnement d’une code retreat vous pouvez parcourir le billet « How a code retreat works ».
L’attente fut longue, depuis l’annonce du rachat de SpringSource par VMware en août 2009, cependant la synergie VMware + SpringSource semble porter ses fruits. Le terrain a été préparé consciencieusement depuis presque 2 années maintenant, puisque SpringSource/VMware a bâti au fur et à mesure son portefeuille de technologies Cloud, leur permettant à ce jour de proposer sûrement une des offres les plus prometteuses du marché, comme le montre cet historique:
- En décembre 2008, SpringSource annonce la sortie de tcServer.
- En mai 2009, SpringSource annonce la mise à disposition gratuite de sa suite de développement Spring Tool Suite.
- En mai 2009, SpringSource rachète Hyperic l’éditeur de l’outil de supervision HypericHQ, permettant ainsi de disposer d’une solution de monitoring performante.
- En août 2009 déjà, le mois du rachat de SpringSource par VMware, Rod Johnson annonçait sur son blog son intension de lancer Cloud Foundry tout en donnant sa vision sur une gestion unifiée du cycle de vie des applications au travers des solutions de SpringSource. L’offre classique de Cloud Foundry est d’ailleurs toujours en ligne, mais à une nouvelle adresse.
- En avril 2010, SpringSource/VMware rachète RabbitMQ, proposant ainsi une brique de messaging prête pour le Cloud et intégrée avec Spring.
- En mai 2010, SpringSource/VmWare se dote d’un cache distribué en rachetant GemStone qui édite le produit GemFire.
- En septembre 2010, SpringSource/VMware annonce la sortie de sa plateforme vFabric.
- Au SpringOne2GX en novembre 2010, SpringSource/VMware annonce sa plateforme Code2Cloud, qui propose ni plus ni moins d’apporter le Cloud au développeur via la mise à disposition d’une suite logicielle de gestion du cycle de vie des applications. Cette plateforme Cloud met à disposition des développeurs des outils tels qu’un bugtracker basé sur Bugzilla, une intégration avec Mylyn pour Eclipse, un Gestionnaire de code source avec Git, une plateforme d’intégration continue avec Hudson, ainsi qu’un ensemble d’outils intégrés via STS.
Lire la suite de cet article »