Hay una cambio de época con la aparición de Appfuse. Antes, en la programacion Java para la web todo era oscuro, para iniciar un proyecto tardabas dias en establecer el esqueleto de la aplicacion, y para añadir funcionalidad, replicabas cientos de lineas que ya tenías en librerías o guardadas en algun archivo de texto.
Con appfuse crear el esqueleto de una aplicacion web con Java es extremadamente sencillo, vamos a ver lo facil que es crear una aplicacion java con las operaciones basicas CRUD .
Instalamos Maven 2, Java 5 y Mysql .(creo que esto no hace falta explicarlo)
Instalamos appfuse en la modalidad mas sencilla empleando para la presentacion JSF (el resto de combinaciones se pueden ver aquí):
Sustituimos com.company.app por el paqquete que queramos y myproject igual.
Ahora generamos con maven todo lo necesario para empezar a desarrollar desde eclipse, nos situamos en el directorio myproject recien creado:
$ mvn jetty:run-war (probamos la simple aplicacion accesible a través de http://localhost:8080)
$ mvn install eclipse:eclipse (instala lo necesario para que el eclipse se entere del proyecto .project y .classpath entre otros)
$ mvn -Declipse.workspace=<path-to-eclipse-workspace> eclipse:add-maven-repo (para que el eclipse reconozca la variable M2 del appfuse, es necesario ejecutar esto indicando el workspace de nuestro eclipse ~/workspace).Mas aquí.
Ahora que tenemos la base instalada, ya desde el eclipse importamos el proyecto:
File > Import > Existing Projects into Workspace
Empezamos a desarrollar un nuevo POJO llamado Persona con todo lo que le rodea (Modelo, Servicio y Web):
Creamos el paquete com.mycompany.app.model y dentro de el la clase Persona que extiende BaseObject:
package com.mycompany.app.model;
import org.appfuse.model.BaseObject;
import javax.persistence.Entity;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Column;
public class Persona extends BaseObject {
private Long id;
private String firstName;
private String lastName;
/*
Generate your getters and setters using your favorite IDE:
In Eclipse:
Right-click -> Source -> Generate Getters and Setters
*/
}
Sobre la persistencia tenemos toda la info aqui.
Añadimos anotaciones para Hibernate: Entity identifica la clase con la tabla:
public class Persona extends BaseObject {
Ahora indicamos cual es la PK (Primary Key) y como se generará:
public Long getId() {
return this.id;
}
El resto de campos se declaran con la anotacion Column:
public String getFirstName() {
return this.firstName;
}
…
@Column(name=»last_name», length=50)
public String getLastName() {
return this.lastName;
}
Con esto ya tenemos creado nuestro Pojo Persona, ahora mapeamos esta clase dentro del archivo de configuracion de Hibernate (src/main/resources/hibernate.cfg.xml):
Ahora si ejecutamos el siguiente comando maven, genera la tabla de la base de datos asociada a este POJO:
Finalmente para que se genere la capa de servicio y las paginas web ejecutamos:
$ mvn appfuse:install -Dentity
Y probamos la aplicacion en la pagina http://localhost:8080 publicando el resultado con Jetty:
Como diría Matt Raible …
Yeah Baby, Yeah:
BUILD SUCCESSFUL
Total time: 9 seconds