Buscar
Social
Ofertas laborales ES
« Groovy sobrepasan los 3 millones de descargas al año | Main | 10 días para que acabe el C4P de Greach »
miércoles
ene222014

Oracle ha introducido un bug en Java 7 Update 51 que está rompiendo aplicaciones

Recientemente Oracle ha anunciado una versión nueva de Java 7, la Update 51, que contiene bastantes parches de seguridad. En esta nueva versión ha cambiado la implementación de la clase sun.reflect.generics.reflectiveObjects. TypeVariableImpl. Por algún motivo que no comprendo completamente, el método equals de esta clase no seguían las prácticas estándares en Java de comprobar si el objeto que se le pasa es exactamente de la misma clase que la clase del objeto sobre el que se ha invocado el método. Así es como solía comenzar el método hasta la Update 51:

  @Override
158    public boolean equals(Object o) {
159        if (o instanceof TypeVariable) {
160            TypeVariable that = (TypeVariable) o;

Código que ahora ha sido cambiado para comprobar si el objeto que se le pasa es una instancia de TypeVariableImpl. Y esto está provocando fallos en varias aplicaciones, siendo probablemente el más notorio la librería Guava de Google (es bastante ilustrativo leer los comentarios en este post), así como muchas otras librerías que dependen de Guava. Este problema ya ha sido recogido en el bug traking de OpenJDK.

Hasta que este tema se resuelva, está bien tenerlo en la cabeza por si está rompiendo directamente tu código, o está rompiendo alguna librería de la que depende es.

PrintView Printer Friendly Version

EmailEmail Article to Friend

Reader Comments (2)

bueno, "no es un bug, es una feature" ;-)

los paquetes sun.* ... "are considered to be implementation details, and they are not part of the JDK API. They can change arbitrarily between versions, so they can cause problems when you try to upgrade JDK versions"

Jor.

enero 22, 2014 | Unregistered CommenterJor

Ese argumento se aplica cuando tú usas directamente el paquete. Pero en este caso, tú puedes llamar algún otro método del JDK que termina invocando a este método y falla tu código. Y no creo que en Guava use directamente este método…

enero 22, 2014 | Registered CommenterAbraham

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>