Spring Boot, le couteau suisse du développeur Java

Ralenti et frustré par les problèmes de build rencontrés en utilisant Play Framework (que j’avais détaillés ici), j’ai finalement décidé de migrer vers Spring Boot.

Après quelques mois (ou années pour certains morceaux) de développement et d’exploitation d’applications Spring Boot en production, je pense avoir pu prendre le recul nécessaire pour me livrer à l’exercice du retour d’expérience. Continuer la lecture de Spring Boot, le couteau suisse du développeur Java

AssertJ pour des assertions plus expressives

Écrire des tests, c’est bien, écrire des bons tests c’est encore mieux. La technique given when then est une des bonnes pratiques pour écrire des tests (unitaires ou pas d’ailleurs). Les 3 concepts sont en effet nécessaires, y-compris le dernier qui correspond aux assertions. En effet, un test n’apporte vraiment de la valeur que si il procède à des vérifications sur le résultat de son exécution. Ça parait évident mais je suis tombé à plusieurs reprises sur des tests qui exécutaient du code sans rien vérifier…

En Java, les outils de base les plus populaires pour écrire des tests (JUnit et TestNG) sont assez pauvres pour écrire les assertions. Heureusement, il existe des outils permettant de gagner à la fois en puissance et en expressivité pour exprimer les assertions. Continuer la lecture de AssertJ pour des assertions plus expressives

Fin de crise d’ado en vue pour Play Framework

play_full_color J’avais écrit un retour d’expérience à propos de Play Framework il y a un peu plus d’un an. J’y exprimais ma frustration quant au fait qu’il ne manquait pas grand chose à Play Framework pour être un super outil de développement.

J’étais assez peu optimiste sur le fait que ces points puissent s’estomper rapidement parce que c’étaient ceux que Typesafe mettait en avant pour se différencier des autres. Il semblerait cependant que le vent a tourné récemment et il souffle maintenant de mon point de vue dans la bonne direction ! Continuer la lecture de Fin de crise d’ado en vue pour Play Framework

Générer les structures de données avec AutoValue

En Java comme dans d’autres langages, nous écrivons souvent des classes qui représentent des structures de données (appelées parfois objets métier, DTO, value objects, ou encore value types). Nous appliquons très souvent le principe d’encapsulation en exposant les valeurs à travers des getters et des setters quand la structure de données est mutable.

Mais implémentez-vous systématiquement la méthode equals de votre classe ? Et la méthode hashcode ? Si c’est le cas, equals et hashcode sont-elles cohérentes ? Et quand vous ajoutez un champ, pensez-vous à mettre à jour ces deux méthodes ? Il est pourtant important que ces méthodes soient correctement implémentées, faute de quoi on peut avoir des surprises en les insérant dans une HashMap ou un HashSet par exemple. Continuer la lecture de Générer les structures de données avec AutoValue

Retour d’expérience sur Java 8 après un an d’utilisation

JavaAlors que Java vient de fêter ses 20 ans, Java 8 a soufflé il y a peu sa première bougie. J’avais suivi de loin l’évolution de Java 8 lors de son développement sans vraiment chercher à l’utiliser en pratique. Mais le hasard fait bien les choses, et Devoxx France 2014 suivait de près sa sortie. Je me suis dit que c’était l’endroit idéal pour se familiariser avec cette toute nouvelle version. Et je n’ai pas été déçu, j’ai suivi deux universités consacrées à Java 8. La première était proposée par Rémi Forax et expliquait l’histoire des lamba et comment elles ont été implémentées, la suivante était celle de José Paumard qui nous montrait toute la puissance de l’API stream. Ainsi, de retour de Devoxx je n’ai pas mis longtemps à me familiariser avec cette nouvelle version que j’utilise maintenant quotidiennement depuis un an. Il est donc temps pour moi d’en dresser un premier bilan. Continuer la lecture de Retour d’expérience sur Java 8 après un an d’utilisation

Ceylon la route vers le langage idéal

L’informatique est une science jeune et en perpétuelle évolution. Même si ses fondamentaux n’ont pas changé depuis ses balbutiements, des concepts nouveaux, des langages, des technologies et bien d’autres concepts apparaissent et disparaissent au fil du temps.

Yet another language

Un des principaux axes dans lesquels l’informatique évolue au fil du temps est sans conteste les langages de programmation.

Des principes fondamentaux

Les principaux paradigmes de programmation existent depuis très longtemps (1957 pour le procédural avec Fortran, 1969 pour l’orienté objet avec Smalltalk, 1958 pour le fonctionnel avec Lisp d’après Wikipédia).

Les langages se distinguent également par la façon dont le code qu’ils produisent est exécuté. Certains sont des langages compilés directement en code machine, d’autres nécessitent un interpréteur. Là encore, les concepts principaux existent depuis longtemps. Par exemple, la première machine virtuelle avec compilation à la volée (Just In Time) a été créée en 1980 pour exécuter du Smalltalk.

Les langages sont aussi caractérisés par d’autres critères. On peut évoquer le typage qui peut être statique, dynamique ou inféré mais aussi plus ou moins fort. La syntaxe est également un critère qui compte énormément dans la mesure où elle représente sa partie visible.

L’ensemble de ces axes permet d’envisager des possibilités absolument infinies en terme de diversité. Les langages modernes sont nettement différents de leurs ancêtres même si ils reposent sur des principes identiques. Ils ne sont ni plus ni moins que des assemblages de ces différents concepts de base qui ont gagné en maturité depuis leur création. Ils sont généralement conçus en capitalisant sur leurs grands frères. Continuer la lecture de Ceylon la route vers le langage idéal

Retour d’expérience sur Play Framework

Après un peu plus d’un an d’utilisation quotidienne de Play Framework dans sa version 2, il est temps pour moi de me livrer à l’exercice du retour d’expérience. Je précise que j’utilise Play en Java et pas en Scala.

Un concept très séduisant

Play FrameworkPlay est un des frameworks web les plus connus dans le monde Java. Lancé en 2009 dans sa première version, une deuxième version avec des changements majeurs a été publiée en 2012, le principal changement étant sa réécriture en Scala. L’idée qui est à l’origine de Play est de créer un outil simple et léger pour faire du développement web en Java. A une époque où tous les langages fréquemment utilisés dans le monde du web proposaient des outils modernes pour créer des sites web (Django pour Python, Rails pour Ruby, Symfony pour PHP, Grails pour Groovy, et bien d’autres), Java en était encore aux servlets et autres conteneurs d’application Java Enterprise Edition et toute la lourdeur qui va avec, aussi bien en terme de développement que de déploiement. Play a vocation à apporter à l’écosystème Java les avantages de ces outils qui existent dans d’autres langages. Continuer la lecture de Retour d’expérience sur Play Framework

Devoxx France 2014 – premier jour

J’ai passé trois excellentes journées à Devoxx France. A l’aide d’un article par journée de conférence, je vais essayer de résumer mon Devoxx à moi, comment j’ai vécu ces trois jours et ce que j’y ai appris.

La journée du mercredi était consacrée aux universités et ateliers. D’une durée de 3 heures, ces sessions permettent de rentrer en profondeur dans un sujet. De mon côté, j’ai choisi de faire une journée Java 8 et je n’ai vraiment pas été déçu ! Continuer la lecture de Devoxx France 2014 – premier jour

En finir avec les NullPointerExceptions en Java grâce à Optional

Une des erreurs que la JVM doit lever le plus souvent lors de l’exécution d’un programme Java est très certainement la NullPointerException.

L’origine de cette erreur d’exécution est très simple. Lorsqu’on manipule un objet d’un type donné, on sait qu’il peut être compatible avec ce type (lui-même ou un type fils) ou null. Lorsque qu’il s’agit de null, il suffit d’accéder à une propriété (attribut ou méthode) de l’objet en question, qui en fait n’existe pas, pour engendrer cette fameuse NullPointerException. Rappelons que cette erreur d’exécution existe dans la plupart des langages. En C ou C++ cela provoque une erreur de segmentation et c’est encore plus gênant parce que cela provoque l’arrêt du processus. En Python cela conduit à AttributeError. Continuer la lecture de En finir avec les NullPointerExceptions en Java grâce à Optional

Java 8 est arrivé

Le 18 mars dernier est sortie la version 8 du langage Java. Il s’agit d’une évolution majeure du langage. Même si elle s’est faite attendre, elle est la preuve que le développement de Java s’est vraiment remis en route après une longue période de stagnation avec notamment le rachat de Sun Microsystems par Oracle.

Continuer la lecture de Java 8 est arrivé