Buscar
Social
Ofertas laborales ES
miércoles
nov242010

OpenXava 4.0: Desarrollo Rápido Web con Java

OpenXava es un marco de trabajo para desarrollo rápido de aplicaciones de gestión con Java. Es fácil de aprender y rápido para desarrollar. Al mismo tiempo es extensible y personalizable, además el código de la aplicación se estructura desde un punto de vista orientado a objetos puro. Por lo tanto, puedes enfrentarte a aplicaciones complejas con él.


La aproximación de OpenXava al desarrollo rápido no es por medio de usar entornos visuales (como Visual Basic o Delphi), o scripting, como PHP. Más bien, el enfoque de OpenXava es dirigido por el modelo (model-driven), donde el corazón de tu aplicación son clases Java que describen tu problema. De esta forma conseguimos productividad sin utilizar código espagueti.

La nueva versión of OpenXava, OpenXava 4.0, mejora significativamente la experiencia del usuario, produciendo una interfaz de usuario RIA. Adicionalmente, se han hecho algunas mejoras interesantes para los desarrolladores, como Groovy, JPA 2.0 o Inyección de Dependencias.

La mejor forma de saborear las nuevas características de OpenXava 4.0 es descargándolo y siguiendo la guía de inicio rápido.
Abajo tienes algunas de las principales novedades de OpenXava 4.0.
Mejor experiencia de usuarioEl siguiente pantallazo de un módulo de OpenXava 4.0 muestra algunas de las nuevas caraterísticas:

Otra nueva y útil característica de OpenXava es el uso de diálogos. OpenXava los usa para crear y editar elementos de las colecciones y referencias, aunque el desarrollador puede mostrar sus propios diálogos en sus propias acciones. Además, el usuario tiene la posibilidad de ocultar y mostrar cualquier marco en la vista. Por tanto, pude ocultar cualquier referencia, grupo o colección para adaptar la interfaz de usuario a sus necesidades y preferencias. El siguiente pantallazo muestra estas características:

Éstas son sólo algunas de las nuevas caracteristica sobre la interfaz de usuario. OpenXava 4.0 tiene alrededor de 40 mejoras de la interfaz de usuario.
Más opciones para los desarrolladoresOpenXava 4.0 permite usar Groovy para codificar todas las partes de tu aplicación, ahora usa JPA 2.0, puedes usar inyección de dependencias en tus acciones y la forma de hacer tareas típicas ha sido simplificada.
Por ejemplo, puedes usar Groovy para definir tu entidad, como sigue:
@Entity
@Table(name="TOrder")
@View(members="""
    year, number, date;
    customer;
    details;
    amount;
    remarks
    """
)
class Order extends Identifiable {
    
    @Column(length=4)
    @DefaultValueCalculator(CurrentYearCalculator.class)
    int year
       
    @Column(length=6)    
    int number
   
    @Required
    @DefaultValueCalculator(CurrentDateCalculator.class)
    Date date    
   
    @ManyToOne(fetch=FetchType.LAZY, optional=false)
    @ReferenceView("Simplest")
    Customer customer   
    
    @OneToMany(mappedBy="parent", cascade=CascadeType.ALL)    
    @ListProperties("product.number, product.description, quantity, product.unitPrice, amount")
    Collection details = new ArrayList()  
    
    @Stereotype("MEMO")
    String remarks
       
    @Stereotype("MONEY")
    BigDecimal getAmount() {
        BigDecimal result = 0
        details.each { OrderDetail detail ->
            result += detail.amount
        }
        return result
    }
        
    @PrePersist
    void calculateNumber() throws Exception {         
        Query query = XPersistence.getManager()
            .createQuery("select max(o.number) from Order o " +
                    "where o.year = :year")
        query.setParameter("year", year)        
        Integer lastNumber = (Integer) query.getSingleResult()
        this.number = lastNumber == null?1:lastNumber + 1
    }
        
}
También tienes a tu disposición el estándar de Java para inyección de dependencias, JSR-330:
public class ChangeActiveYearAction extends ViewBaseAction {
 
    @Inject  // Standard annotation from JSR-330
    private int activeYear; // Getter and setter are not needed
 
    public void execute() throws Exception {
        assert activeYear == 2010; // The value from session object
        activeYear = 2012; // It changes the value of session object
    }
 
}
Así el objeto de sesión activeYear se inyecta en la propiedad activeYear antes de llamar a execute(); y después de ejecutar execute() el valor del campo activeYear se vuelve a asignar al objeto de sesión activeYear. Por tanto, se puede cambiar el estado de los objetos de sesión, incluso con tipos inmutables o primitivos.
Hay algunas mejoras en las acciones que no añaden nueva funcionalidad, pero permiten simplificar la codificación de algunos casos típicos. Por ejemplo, ahora es fácil añadir y quitar acciones en vivo desde una acción gracias a los nuevo métodos addActions(), removeActions(), clearActions(), setControllers(), returnToPreviousControllers() y setDefaultControllers()  presentes en BaseAction. Otros métodos nuevos en BaseAction tal como getRequest(), getContext() y getManager() añaden bastantes posibilidades con poco esfuerzo.

Éstas son sólo algunas de las nuevas características para los desarrolladores. OpenXava 4.0 tiene sobre 90 mejoras para los desarrolladores.

Descarga OpenXava 4.0 y pruébalo

martes
nov232010

Con cookies o sin cookies; no importa: en el siglo XXI la privacidad en la web ha muerto

Aunque el contenido de esta noticia no es puramente Java, me parece interesante poner al día a gente que desarrolla portales web (como es el caso de muchos usuarios de esta comodidad) sobre cómo está el estado del arte del tracking de usuarios online, más allá de las simples y tradicionales cookies.


Las Cookies, especialmente las de terceras partes, siempre han sido un mecanismo para realizar tracking de un usuario web cuando se está moviendo entre distintas páginas, y así saber qué sitios visita y poder hacer un perfil preciso de él. Hace unos pocos días me quede completamente sorprendido viendo el perfil que ha hecho sobre mi Google (podéis ver vuestro propio perfil de Google aquí).


Por temas de privacidad, mucha gente desabilitan las Cookies, especialmente las de terceras partes. Menos gente sabe que su plugin de flash (y de Silverlight y similares) también suelen tener "Cookies" propias, y además la interfaz de usuario que permite su configuración no está integrada dentro de la interfaz de usuarios del navegador, por lo que son más difíciles de desactivar.


Sin embargo, la realidad es que a día de hoy da igual lo que hagas, lo que actives o actives. Incluso lo que borres o dejes de borrar. Existen soluciones para realizar tracking que no requieren Cookies. 


Un proyecto muy interesante en esta línea es Evercookie, desarrollado por Samy Kamkar. Evercookie es un API javascript que ha implementado una "super cookie" de la cual es prácticamente imposible librarse. Esta "super cookie" se guarden tu equipo empleando 13 mecanismos diferentes, entre ellos las cookies tradicionales y las de flash, así como todos los mecanismos de Local Storage de HTML 5.


Pero entre los 13 mecanismos hay también ideas muy originales y potentes. Por ejemplo, codificar en forma de imagen un ID único del usuario. Los valores RGB de esta pequeña imagen realmente están codificando tu identificador único (que es lo que es necesario para realizar tracking de un usuario). La imagen en su cabecera indica que puede ser cacheada durante un período muy largo del tiempo. Esta imagen es empotrado en múltiples web que quieren seguir a sus usuarios. Cuando un usuario que tiene la imagen vuelve a pedirlo, el servidor responde 304, por lo que se carga de la cache local. Y empleando el API de HTML 5 canvas esta imagen cacheada puede volver a ser leída por javascript, decodificando así el identificador único del usuario y enviándolo al servidor. La "cookie" es la imagen, que te identifica de modo unívoco.


Otro de los mecanismos que emplea Evercookie es la historia del navegador. Evercookie genera para cada visitante un enlace único, y lo marca como visitado. Después, en otra web, Evercookie prueba a generar múltiples enlaces, sin mostrarlos al usuario, y comprueba su color; como todos sabéis prácticamente todos los navegadores modernos muestran los enlaces visitados en un color diferente de los no visitados. En un tiempo razonable, empleando un esquema jerárquico en la generación de los enlaces, Evercookie es capaz de volver a generar el enlace-identificador único para este usuario. Evercookie sabe que ha generado de nuevo el enlace porque su color es el color de los enlaces visitados. La cookie/identificador único aquí es simplemente un enlace.


Para deshacerse de Evercookie es necesario borrar los 13 sitios donde se guarda a la vez. Si te dejas uno, se vuelve a regenerar y se vuelve a guardar mediante los 13 mecanismos. Desde la página de Evercookie podéis bajar su código fuente (es opensource) e instalar una Evercookie en vuestro equipo a través de un botón, para experimentar con ella.


Pero bueno, en el caso de Evercookie, tienes la opción de borrar los 13 sitios de modo simultáneo. Peor es todavía el proyecto Panopticlick de la Electronic Frontier Foundation (EFF). Este proyecto no almacena nada en tu equipo (así que olvídate de borrar nada...). Este proyecto genera una "huella dactilar" de tu equipo.


Para ello recoge un montón de información que tu equipo hace pública, como las cabeceras de tu navegador, la resolución de tu pantalla (que puede obtenerse a través de Javascript), qué plugins tiene instalado tu navegador, y qué versiones de cada plugin, y un largo etcétera. Empleando sólo esta información, un 83,6% de los equipos que han probado hasta ahora y que no tenían instalado ni Java ni Flash han obtenido una huella única. Es decir, pueden ser identificados únicamente a partir de la huella que genera el proyecto Panopticlick, huella que no se basa en almacenar absolutamente nada en tu equipo.


Si el equipo tiene Java o Flash instalado (la inmensa mayoría de los usuarios lo tienen) el 94,2% de los usuarios genera una huella única. El truco en este caso consiste en emplear Java o Flash para enumerar las fuentes del sistema. Las fuentes suelen variar bastante entre equipos. Encima, las fuentes al enumerarlas se suelen enumerar por orden de instalación, y no por orden alfabético. Esto todavía aporta más información.


Puedes probar el test Panopticlick aquí. A pesar de que ya llevan 1,267,193 testados, al menos mi equipo sigue teniendo una huella única!!!. Os recomiendo que todos hagáis este test por colaborar con el experimento de la EFF.


Y el proyecto Panopticlick hace cosas relativamente sencillas. Hay empresas con soluciones comerciales (por las que cobran a sus clientes) que hacen todo tipo de virguerías. Aquí tenéis algunos ejemplos:

  • Arcot entre sus soluciones de autenticación fuerte tiene un jacascript que, entre otros factores, realiza distintos benckmarks a la CPU para generar la huella única.
  • 41st Parameter a pesar de su nombre, identifica no 41 sino más de 100 parámetros para generar una huella única de cada equipo. Uno de los más ingeniosos es medir la diferencia entre el reloj del equipo y un reloj de referencia con una precisión de milisegundos. Aunque los equipos modernos habitualmente se sincronizan periódicamente a través de Internet, todos los relojes de cada CPU suelen ser diferentes y suelen adelantar o retrasar algunos milisegundos entre sincronizaciones.
  • ThreatMetrix afirma que es capaz de detectar distintas irregularidades en el stack TCP/IP de los equipos, que le permiten realizar tracking ¡incluso de usuarios que se encuentran detrás de servidores proxy!.
  • Iovation afirma tener una base de datos con millones de equipos para los cuales ha generado huellas únicas y a partir de ellos ha generado una base de datos de "reputación" que emplea para recomendar a sus clientes si deben o no aceptar una transacción de un determinado equipo.

El ser capaz de realizar tracking de los usuarios a través de Internet es un mercado muy lucrativo. Y visto el panorama, parece que no hay solución. Las web van a ser capaces de realizar tracking preciso de los usuarios hagamos lo que hagamos. Aunque no nos guste y creó mucha polémica, Eric Schmidt (CEO de Google) tenía razón cuando dijo que la privacidad ha muerto.
martes
nov232010

Tapestry 5 estrena web y versión

El equipo de Tapestry 5, recientemente en la palestra por la respuesta a Matt Raible y su comparativa, han estrenado su tan esperada nueva web. Uno de los principales objetivos del equipo es la mejora de la documentación (no solamente el contenido sino también la estructura que facilite su búsqueda). Ademas de la ansiada web, la versión 5.2 (en beta) será próximamente disponible como última versión estable.

Han pasado muchas cosas en la comunidad Tapestry a lo largo del ultimo año. Su creador Howard Lewis Ship ha sido nombrado Java Champion, y nuevos commiters y PMC se han unido al proyecto. Cierto es que desde la versión 5.1 ha pasado mas de un año, algo que no ayuda a la visión externa de lo que ocurre en un proyecto, pero la versión 5.2 es mucho mas que una simple correctiva : se trata de una verdadera versión mayor que añade muchísimas funcionalidades ; todo ello respetando la compatibilidad con sus versiones anteriores ("release notes" aqui)

Tapestry 5 se posiciona en diversos países (Alemania o Austria por ejemplo) como una verdadera alternativa a JSF 1.x y 2.x. Una de las razones de esta creciente popularidad es seguramente la publicación de un libro en alemán en Noviembre 2009 por uno de los PMC del proyecto : Igor Drobiazko. La futura publicación del libro Tapestry 5 in action ... conseguirá que su popularidad crezca también en otros países ? En todo caso, si no habéis probado Tapestry 5 y buscáis un framework MVC basado en componentes, quizá sea el momento de darle una oportunidad. Para mas información, ahora también están en twitter.  

martes
nov232010

JavaHispano Podcast - 099 - El futuro de java en el escritorio

Publicado un nuevo número del podcast de javaHispano. En esta ocasión Abraham Otero, Eduardo Frigerio y Alvaro Hernández hablarán del futuro de java en el escritorio.

Links de interés:

 

lunes
nov222010

Disponible la Beta de NetBeans 7

Ya está disponible para descargar la Beta de la próxima "major" versión de NB, la 7.

http://dlc.sun.com.edgesuite.net/netbeans/7.0/beta/ 

Está disponible para todos los SS.OO. habituales. Sin embargo, han cambiado levemente los paquetes disponibles:  siguen estando los habituales (JavaSE, JavaFX, Java, Ruby, C/C++, PHP), pero se ha eliminado la opción de "All", imagino que se debe a que es la que se descarga todo el mundo que no se lee la recomendación de no utilizar ese paquete.

Llama especialmente la atención que el paquete de JavaFX casi a duplicado su tamaño.

Las novedades principales de esta nueva versión se pueden encontrar aquí: http://netbeans.org/community/news/show/1502.html 

Sobre el soporte del JDK 7 en NB, hay un breve artículo aquí: http://netbeans.dzone.com/news/jdk-7-support-netbeans-ide-70, aunque es de esperar que se vayan añadiendo nuevas características al IDE al tiempo que se incorporen en el JDK.