Buscar
Social
Ofertas laborales ES
domingo
mar062011

El proyecto OpenJDK6 cambia de líder

La semana pasada Joseph Darcy, empleado de Oracle que es el líder del proyecto OpenJDK6, renunció a su puesto. Según él, el motivo fue poder dedicarle más tiempo a otros proyectos como el proyecto coin, que formará parte del JDK 7. Ahora el líder de OpenJDK6 será Kelly O'Hair.


Joseph Darcy había estado a cargo del proyecto desde que se liberó la primera pieza de código hace tres años. Tanto él como Kelly O'Hair son exempleados de Sun. Actualmente Kelly O'Hair tiene una categoría más elevada dentro de Oracle que Joseph.

domingo
mar062011

Jenkins y Hudson: seguimiento un mes después de la ruptura

Como supongo que todos estaréis al tanto, al final del año pasado Kohsuke, el fundador de Hudson y la persona que más código había contribuido al proyecto, abandonó Oracle y, poco después, comenzaron a surgir discrepancias sobre cómo dirigir el proyecto Hudson. Oracle quería tener la voz última respecto a lo que pasase con el proyecto, y  Kohsuke no estaba de acuerdo con la dirección que Oracle quería tomar.


Oracle para tratar de ganar control sobre el proyecto opensource decidió registrar la marca Hudson en un montón de países. De este modo, a golpe de talonario y de abogados, impidió que Kohsuke y sus seguidores la usasen. Todo esto llevó hace aproximadamente un mes a Kohsuke a crear un fork (para ser más precisos, lo que realmente hizo fue cambiarle el nombre al proyecto en Github) de Hudson llamado Jenkins.

 

 


Kohsuke hizo una votación interna entre los commiters del proyecto para ver lo que pensaban y el resultado fue demoledor: la comunidad estaba con Kohsuke y no con Oracle. A pesar de esto, Oracle afirmó que Kohsuke estaba dando un paso contraproducente para la comunidad, que la comunidad no quería que se crease ese fork, que quería continuar adelante con Hudson y que la comunidad estaba de acuerdo con la dirección que Oracle le daba al proyecto. 


Ahora ya se han establecido los dos proyectos y ha quedado bastante claro con quién está la comunidad, al menos la más directamente involucrada en el futuro del proyecto (los commiters). Aquí puedes ver la lista de commiters de Jenkins (87), y aquí la lista de commiters de Hudson (4). En estos momentos, sólo Oracle y Sonartype (en este último caso un movimiento que sorprendió bastante en su día y que con toda probabilidad se ha debido a algún pacto no público) siguen con Hudson.


¿Cuántos de vosotros estáis usando Jenkins? Y ¿Cuántos todavía seguís usando Hudson? Estos últimos ¿tenéis intención de cambiar a Jenkins?

jueves
mar032011

Sé estándar, sé libre: usa JSR-303 para validar

No importa que tipo de aplicaciones desarrollemos, codificar validaciones es el pan nuestro de cada día. Durante años hemos estado usando una gran variedad de técnicas y marcos de trabajo para validación con buenos resultados. Sin embargo, desde hace algún tiempo contamos con un estándar para la validación en Java, la especificación Bean Validation (JSR-303). La cuestión es: ¿merece la pena escribir (o rescribir) nuestras validaciones usando el estándar Bean Validation? ¿hay alguna ventaja práctica en usar JSR-303?
Antes de nada, escribamos un validador (una restricción si usamos la nomenclatura JSR-303) y después usémoslo en nuestro código, para ver de que estamos hablando.
Crear una restricción JSR-303Una restricción JSR-303 es tan solo una simple anotación Java. Por ejemplo, si queremos validar ISBNs hemos de crear una anotación @ISBN como la siguiente:
package org.openxava.books.constraints;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.*;
import javax.validation.*;
import org.openxava.books.constraints.impl.*;

@Constraint(validatedBy = ISBNValidator.class)  // ISBNValidator contiene la lógica de validación
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
public @interface ISBN {
    
    String message() default "{org.openxava.books.constraints.ISBN.message}";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };

}
Lo importante aquí es la anotación @Constraint, que además de marcar esta anotación como una "restricción", indica la clase validador, ISBNValidator, la cual contiene la lógica de validación:
package org.openxava.books.constraints.impl;

import javax.validation.*;
import org.openxava.books.constraints.*;

public class ISBNValidator implements ConstraintValidator<ISBN, String> {
    
    private static org.apache.commons.validator.ISBNValidator validator =
        new org.apache.commons.validator.ISBNValidator(); // Validator from commons validator

    public void initialize(ISBN isbn) {        
    }

    public boolean isValid(String value, ConstraintValidatorContext ctx) { // The validation logic
        if (value == null || value.trim().equals("")) return true;
        return validator.isValid(value); // We simply delegate in commons validator
    }

}
El validador tiene que implementar ConstraintValidator, por tanto ha de tener los métodos initialize() y isValid(), este último contiene la lógica de validación. En este caso simplemente delegamos en un validador del proyecto Commons Validator de Apache .
Podemos ver como crear un validador es bastante fácil. Ahora bien, ¿cómo podemos usar esta validación en nuestra aplicación?
Usar el validadorLa especificación JSR-303 trata sobre como se definen los validadores, pero no sobre como se han de usar y como se comportan en nuestra aplicación, esto depende del marco de trabajo que estemos usando. JPA2 y JSF2 cuentan con integración de Bean Validation, además muchos marcos de trabajo modernos tienen soporte para JSR-303 también. En este caso vamos a desarrollar una miniaplicación usando el marco de trabajo OpenXava y usaremos la anotación @ISBN que hemos desarrollado. No te preocupes, desarrollar una aplicación OpenXava es breve, dado que sólo necesitamos escribir las clases del dominio.
Después de crear un proyecto de OpenXava nuevo (ejecutando una tarea ant) le añadimos las clases Author y Book.
Author.groovy:
package org.openxava.books.model

import javax.persistence.*
import org.openxava.model.*
import org.openxava.annotations.*

@Entity
class Author extends Identifiable {

    @Required
    String name
    
}

Book.groovy:
package org.openxava.books.model

import org.openxava.model.*;
import org.openxava.annotations.*;
import org.openxava.books.constraints.*;
import javax.persistence.*;

@Entity
class Book extends Identifiable {

    @Required @Column(length=60)
    String title
    
    @ManyToOne(fetch=FetchType.LAZY)
    @DescriptionsList
    Author author
    
    @Column(length=10)
    @ISBN
    String isbn
    
}
Aunque podríamos haber escrito las clases con Java, hemos escogido usar Groovy. Sí, el desarrollo web Groovy sin Grails es posible. Sin embargo, lo importante aquí es la anotación @ISBN en la propiedad isbn. No necesitamos hacer más para ver la validación funcionando. Si vamos a http://localhost:8080/Books/modules/Book, e intentamos añadir un libro con un ISBN incorrecto obtendremos algo como esto:
Como se puede ver usar la validación @ISBN en nuestra aplicación es una tarea totalmente declarativa y por lo tanto extremadamente fácil.
¿Por qué deberíamos usar Bean Validation?

Aunque JSR-303 es fácil de usar y lo suficientemente versatil como para cubrir nuestras necesidades de validación, tampoco es algo espectacular, y posiblemente no sea mucho mejor que nuestra solución actual de validación, así que ¿por qué deberiamos usarlo? Porque lo soportan JPA2, JSF2, Spring Roo, Wicket, OpenXava, Tapestry, etc. además de formar parte del estándar Java EE 6. Por lo tanto, nos da más libertad, porque nuestro código es menos dependiente del marco de aplicaciones que estemos usando, así es más fácil migrar nuestro código (al menos la parte del modelo) de Wicket a Tapestry, o de Spring Roo a OpenXava.

 

Usa el estándar Bean Validation. ¡Sé libre!
Referencias


jueves
mar032011

El nuevo java.net está online

Este martes Oracle ha puesto online la nueva versión de http://www.java.net/. Además de cambios en la apariencia del portal para qué tenga una apariencia más "web 2.0", así como proporcionar más opciones de configuración para el distinto contenido que queremos que nos muestre, lo más interesante probablemente sean los cambios internos de infraestructura.


Ahora java.net ha sido integrado con el antiguo proyecto Kenai de Sun. Además, los proyectos opensource albergados en este portal podrán tomar ventaja de herramientas como Mercurial, Git y Jira.


La migración ha sido descrita como "un gran esfuerzo" por un ingeniero de Oracle. Sin embargo, no todos los proyectos del antiguo Java.net están en la nueva versión. Según fuentes de Oracle, había un buen número de proyectos opensource abandonados en el portal, y en muchos casos estos no se han migrado.

miércoles
mar022011

El JSR 342 (Java EE 7) ha sido enviado al Java Community Process

Hoy Oracle ha enviado el JSR 342, en el que definirá Java EE 7, al Java Community Process. En la siguiente revisión mayor de la plataforma Java EE una de las principales novedades es "la nube". Esta buzzword parece traducirse en dar soporte a emplear en un mismo servidor de aplicaciones Java EE a aplicaciones de varias organizaciones diferentes, soporte explícito del versionado de las aplicaciones y soporte de base de datos NoSQL.


Otra de las cosas en las que se hará énfasis es en incrementar la modularidad de la plataforma. También se tratará de alinear la especificación de los Servlets con HTML5, y se está discutiendo incluir el API de WebSockets. Habrá actualizaciones para JPA, JAX-RS, JSF, EJB, JSP, EL, JMS, JAX-WS, CDI, Bean Validation, JSR-330, JSR-250 y JCA. 


Por último se añadirá un API de caches (JCache, JSR 107), así como un conjunto de utilidades de concurrencia orientadas a Java EE (el JSR 236).

 

Buzzwords aparte, creo que las partes más interesantes son el alineamiento con HTML5, la inclusión de una cache y (si lo incluyan) WebSockets. ¿Qué opines vosotros sobre las novedades que traerá Java EE 7?