
Iniciando un proyecto con appfuse 2.0M5
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í):
mvn archetype:create -DarchetypeGroupId=org.appfuse -DarchetypeArtifactId=appfuse-basic-jsf -DremoteRepositories=http://static.appfuse.org/repository -DarchetypeVersion=2.0-m5 -DgroupId=com.mycompany.app -DartifactId=myproject
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 -Declipse.workspace=
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:
@Entity public class Persona extends BaseObject {
Ahora indicamos cual es la PK (Primary Key) y como se generará:
@Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return this.id; }
El resto de campos se declaran con la anotacion Column:
@Column(name="first_name", length=50) 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:
$ mvn compile hibernate3:hbm2ddl
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:
$ mvn jetty:run-war
Como diría Matt Raible ...
Yeah Baby, Yeah: BUILD SUCCESSFUL Total time: 9 seconds