Posts en la categoría: Java

Gestión de dependencias en Play

Depués de mi post acerca de gestión de dependencias en Play con Maven tenía pendiente escribir cómo utilizar Ivy para este menester. Hay una nueva web, Cuisine, que recopila recetas para el framework Play y, entre ellas, hay dos para gestionar dependencias: la de Maven que ya conocéis y la prometida con Ivy.

Cada vez hay más documentación para Play, congratulémonos.

Usando un keystore con Play

Este post es para Simón. El otro día mientras le dábamos clase en el Master de Software Libre nos dijo que últimamente no escribíamos mucho. Acto seguido le prometimos un post dedicado. Seguro que se lo tomó a broma :)

Play en su versión actual (1.0.3.1) no soporta keystores, sin embargo, con un poquito de Python podemos modificar el script play para que lo haga.

Alrededor de la línea 468 del fichero $PLAY_HOME/play (en el contexto del método do_java) metemos un código parecido a este:

trustStore = readConf('java.trustStore')
if not trustStore == '':
    if os.path.exists(trustStore):
        print "~ using keystore \"%s\"" % trustStore
        java_args.append('-Djavax.net.ssl.trustStore=%s' % trustStore)
        trustStorePassword = readConf('java.trustStore.password')
        if trustStorePassword == '':
            print "~ WARNING: No java.trustStore.password key found in config. You need a password to use a keystore"
        else:
            java_args.append('-Djavax.net.ssl.trustStorePassword=%s' % trustStorePassword)

Y ya podemos configurar nuestro keystore en el fichero conf/application.conf de nuestra aplicación.

java.trustStore=/home/david/opt/javacerts/development
java.trustStore.password=123456
play run y a correr.

Timestamps automáticos para los modelos de Play

Una de las cosas a las que me he acostumbrado al trabajar con Rails es al mantenimiento automático de timestamps (a saber, fecha de creación y fecha de actualización). El framework Play no tiene nada del estilo, así que aquí os dejo la clasecilla que usamos nosotros para obtener este comportamiento. Con sólo dejarla en app/models todos los modelos tendrán los atributos createdAt y updatedAt y sus valores se actualizarán automáticamente. A nosotros nos gusta así, pero podéis afinar el comportamiento a vuestro gusto.

package models;

import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;

@MappedSuperclass
public class Model extends play.db.jpa.Model {

    public Date createdAt;

    public Date updatedAt;

    @PrePersist
    void onPrePersist() {
        if (this.createdAt == null) {
            this.createdAt = new Date();
        }
        this.updatedAt = this.createdAt;
    }

    @PreUpdate
    void onPreUpdate() {
        this.updatedAt = new Date();
    }
}