BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Guava incompatible avec Java 1.7 update 51

Guava incompatible avec Java 1.7 update 51

Suite à la publication par Oracle de la mise à jour 51 de Java 1.7, des contributeurs de la populaire librairie Guava (originaire de Google) ont constaté que certains tests unitaires ne passaient plus. Creusant le problème, il a été constaté que cette mise à jour rendait Guava incompatible avec la version 1.7u51 de Java, en raison d'une modification dans la méthode equals de la classe TypeVariableImpl dans le jdk.

En effet, la méthode equals a été changée dans le jdk et vérifie maintenant l'égalité de classe avec l'objet comparé, cassant ainsi la compatibilité avec une implémentation alternative de TypeVariable présente dans Guava (TypeVariable étant bien une classe de l'API publique et non interne à l'implémentation Oracle du JDK).

Ce changement est mis en correspondance dans les sources du JDK avec une "Amélioration de Sécurité" des notes de version, avec la mention "Amélioration des classes génériques" ("S8023301: Enhance generic classes").

Guava apporte entre autres choses une API de réflection, avec notamment les TypeToken, qui utilisent des astuces liées à la réflection pour autoriser le développeur à manipuler et s'informer sur des types génériques, y compris pendant l'exécution. C'est cette API qui est impactée par le problème (NdR: les impacts en cascade sur les autres parties de la librairie Guava n'ont pas été évalués).

Une fiche dans le bugtracker du JDK a rapidement été ouverte par Robert McKenna, ingénieur IBM, mais a tout aussi rapidement été fermée par un employé d'Oracle, Joel Borggrén-Franck, indiquant que c'était un changement voulu, pas un problème.

Cependant Google Guava est massivement utilisé, dans des projets privés comme publics/opensource (comme Apache JClouds, une abstraction d'APIs liées au cloud pour de nombreux fournisseurs de services), or ce cassage de compatibilité n'est pas cantonné aux tests unitaires mais impacte bel et bien les projets utilisant la librairie.

Ainsi il paraît difficile pour les (nombreux) utilisateurs de Guava de voir la mise à jour 51 comme une mise à jour de sécurité mineure. Pour se donner une idée de l'impact du problème, ne serait-ce qu'au travers de JClouds, on pourra se référer à la liste des applications utilisant ce projet (CloudBees, Jenkins, Hudson, Salesforce et Twitter notamment).

Dans ces conditions, les développeurs et opérationnels de projets faisant usage de Guava devraient y réfléchir à deux fois avant de migrer vers la dernière version de Java.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT