BT

Guava incompatible avec Java 1.7 update 51

par Simon Baslé le 24 janv. 2014 |

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.

Bonjour étranger!

Vous devez créer un compte InfoQ ou cliquez sur pour déposer des commentaires. Mais il y a bien d'autres avantages à s'enregistrer.

Tirez le meilleur d'InfoQ

Donnez-nous votre avis

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet
Commentaires de la Communauté

ouch by Mathieu POUSSE

sympa la retro compatibilité chez oracle !

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

Html autorisé: a,b,br,blockquote,i,li,pre,u,ul,p

M'envoyer un email pour toute réponse à l'un de mes messages dans ce sujet

1 Discuter

Contenu Éducatif

Rien ne serait possible sans le soutien et la confiance de nos Sponsors Fondateurs:

AppDynamics   CloudBees   Microsoft   Zenika
Feedback Général
Bugs
Publicité
Éditorial
InfoQ.com et tous les contenus sont copyright © 2006-2014 C4Media Inc. InfoQ.com est hébergé chez Contegix, le meilleur ISP avec lequel nous ayons travaillé.
Politique de confidentialité
BT