jueves, 21 de febrero de 2008

Hibernate

Hoy en dia las base de datos más frecuentes son las base de datos relacionales,que se basan en las relaciones entre las entidades.
Este framework nos permite el mapeo de atributos entre clases y bases de datos a través de XML.
Con ello conseguimos un código más limpio al no tener que utilizar sentencias sql.
Por ejemplo:
Tenemos una clase
public class Libro{

private String nombre;
private String foto;
private Double precio;
private Long id;

public Long getId()
{
return id;
}

public void setId(Long id)
{
this.id = id;
}

public String getNombre()
{
return nombre;
}

public void setNombre(String nombre)
{
this.nombre = nombre;
}

public Double getPrecio()
{
return precio;
}
public void setPrecio(Double precio)
{
this.precio= precio;
}
public String getFot()
{
return foto;
}

public void setFoto(String foto)
{
this.foto= foto;
}

}

Para que el hibernate reconozca este objeto tenemos que hacer el mapeo de esta clase
creandonos un archivo llamado Cliente.hbm.xml para que nos cree la relacion entre objeto y tabla

Luego para configurar la conexion que va a usar hibernate utilizamos el archivo hibernate.cfg.xml(esta es la forma más sencilla se pueden hacer de otras o eso es lo que he leido por ahi)


Vamos hacer una prueba para ver como funciona esto:
package es.cea.juego;

import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import es.cea.juego.util.HibernateUtil;

public class JugadorTest {
SessionFactory sessionFactory;
@BeforeClass
public void iniciarFactoria(){
sessionFactory = HibernateUtil.getSessionFactory();
}

@Test
public void pruebaArranqueHibernate(){
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Cliente cliente=new Cliente();
cliente.setNombre("noelia");

Session sesion = sessionFactory.getCurrentSession();

sesion.beginTransaction();

sesion.save(cliente);

sesion.getTransaction().commit();
}

}

Todo el codigo que hayy entre sesion.beginTransaction() y sesion.getTransaction().commit(); lo ejecuta el hibernate.

Al hacer esto se crea un cliente en nuestra base de datos.

Si queremos obtener de la base de datos un dato en cocrerto se hace:

Cliente cliente1= (Cliente) sesion.get(Cliente.class,1);

Con esto le estas diciendo al hibernate que saque los datos de la tabla cliente con id=1

Vamos a ver las distintas formas que se pueden utilizar para hacer consultas con hibernate:
  • Criteria y SimpleExpression
Session session = sessionFactory.getCurrentSession();

Criteria criteria = session.createCriteria(Cliente.class);

SimpleExpression expression=Expression.eq("nombre", "noelia");

criteria.add(expression);
Cliente noelia=(Cliente) criteria.uniqueResult();

Con esto le decimos al hibernate exctamente lo que querems buscar con que condiciones,aqui por ejemplo el nombre que sea noelia,solo nos saca uno puesto que le hemos puesto la condicion de uniqueResult();
  • Example--> este nos permite crear búsquedas a partir de una instancia dada.
Session session = sessionFactory.getCurrentSession();

Cliente cliente = new Cliente();
cliente.setNombre("noelia");

List results = session.createCriteria(Cliente.class)
.add( Example.create(cliente) )
.list();

lunes, 18 de febrero de 2008

Maven

Maven es una herramienta de línea de comandos, sin interface gráfica ni nada que se le parezca, que nos ayuda a crear los directorios de nuestro proyecto y con las tareas habituales que se realizan en él, como compilado, generar jar, documentación, distribuir, dependencias con otros jar.

En este enlace bien muy clarito explicado el funcionamiento del maven:
http://www.chuidiang.com/java/herramientas/maven.php

miércoles, 13 de febrero de 2008

Instalando AppFuse Light- All 1.8

Esto es copiado de mi compi Mawi.

No pensad que me copio de todo, sino que por motivo que no viene a cuento tuve que faltar varios dias a clase y en vez de copiarlo de la wikipedia prefiero de mi compañero que lo explica con sus palabras y es mas fácil de entender.

Que conste que el que lo copie no significa que no lo sepa o entienda y que no lo haya hecho.


Antes de comenzar, ten instalado una base de datos MySQL, Tomcat, Maven y Ant. A continuación, sigue los siguientes pasos:

  1. Descomprime dicho archivo en workspace del eclipse.
  2. Abre la consola y desplázate hacia el directorio descomprimido situado en el workspace.
  3. Opcional: En caso de que trabajes con un repositorio local u otro remoto, edita el archivo /pom.xml de Maven y sustituiye http://download.java.net/maven/2 por href=http://...
  4. Ejecuta ant new ( cuando solicite el nombre aplicación inserta el deseado).
  5. Desciende un nivel, verás que hay un directorio con el nombre que le hayas puesto a tu proyecto, accede a él. El otro, el archivo .zip descomprimido, lo dejaremos por si necesitamos crear nuevos proyectos.
  6. Para generar el proyecto de eclipse, utilizamos Maven:
    • mvn eclipse:eclipse . Esto sirve para que prepare el entorno, como por ejemplo el .proyect, el .classpath , ...
    • mvn eclipse:eclipse -DdownloadSources=true . Se descargarán las librerías necesarias para el proyecto.
    • mvn -Declipse.workspace="La ruta de tu workspace" eclipse:add-maven-repo . Esta línea añade una variable nueva (M2_REPO) al Eclipse.
  7. Crea en de eclipse un nuevo proyecto java existente.
  8. Preparar el despliegue de la aplicación con el tomcat de nuestro equipo y la conexion a datos (mysql):
    • Edita /build.xml propiedad server.home y pon la dirección del Tomcat.
    • Edita src/main/resources/jdbc.properties y ponle el nombre de usuario y contraseña de la base de datos MySQL.
  9. Utiliza el archivo ant (build.xml) del proyecto para construir, desplegar ... En especial, utiliza un DeployWar.

*** Todo esto esta sacado de la siguiente URL: https://appfuse-light.dev.java.net/

Logging en appfuse (spring)

Para imprimir por consola utilizando el Log de apache

  1. Para imprimir por consola utilizando el objeto
    • protected final Log logger = LogFactory.getLog(getClass());
  2. hay que importar en nuestro archivo las siguientes clases:
    • import org.apache.commons.logging.Log;
    • import org.apache.commons.logging.LogFactory;
  3. utilizarlo dentro de nuestro código sustituyendo las lineas
    • System.out.println("mensaje"); por ...
    • logger.debug("userId set to: " + user.getId(); , donde el objeto logger nos permite indicar varios niveles de logging (DEBUG, INFO, WARN, ERROR)
  4. configurar el archivo /src/main/resources/log4.xml para indicarle los niveles que queremos imprimir en consola

POJO

Plain Old Java Object
Esto del pojo me entere de casualidad al ver arrancando el tomcat y me entro curiosidad y empece a investigar, por lo visto esto lo explico el profe pero yo ese dia no estaba y como no quiero que me pregunte donde estaba ese dia he decidio copiarlo a mi compañero Rover que lo explica muy bien y muy clarito.

Aunque creamos que es algo con mucha complicacion POJO no son ni mas ni menos que Objetos creados simplemente con miembros y estos con sus getters and setters correspondientes y no heredan de nadie.

public class Equipo(){
private String nombre;
private Integer puntos;

  public String getNombre() {
return this.nombre;
}

public void setId(String nombre) {
this.nombre = nombre;
}

public Integer getPuntos() {
return this.puntos;
}

public void setId(Integer puntos) {
this.puntos = puntos;
}
}

Clases persistentes

Clases presistentes son clases en una aplicación que implementan las entidades del problema de negocio (por ejemplo, Cliente y Pedido en nuestra applicacion myapp). No todas las instancias de una clase persistente se considera que estén en el estado persistente, una instancia puede en cambio ser transitoria o estar separada.
Hay 4 reglas para crear una clases persistente:
  1. Tiene que tener un ID
  2. Un constructor vacio
  3. Los metodos getter and setter de los atributos de la clase
  4. Tienes que sbreescribir los métodos equals() y hascode()

jueves, 7 de febrero de 2008

Trabajando sobre el proyecto myapp

Vamos a explicar paso a paso el desarrollo de una aplicacion que esta dentro del proyecto myapp.
Estamos trabajando estos dias con creacion de listado de libros,autores,temática etc
Pues voy a explicar como se han ido haciendo por si alguien tiene duda de algo.
  1. Creamos la clase Libro.java
  2. Como esta relacionada con base de datos le ponemos los requisitos necesario para que sea persistente como id,constructor vacio,set an get de las variables.
  3. En el applicationContext-hibernate.xm le incluimos el mapeo de la clase incluyendo la linea org/appfuse/model/Libro.hbm.xml com aparece en la imagen:
  4. Nos creamos Libro.hbm.xml en el paquete org.appfuse.model que es un intermediario entre java y base de datos ,sirve como traducto de java para la base de datos
  5. Creamos LibroDao y su implementacion LibroDaoHibernate q esto es para acceder a la base de datos y para poder también modificarla.LibroDao nos lo creamos en org.appfuse.dao y el otro en org.appfuse.dao.hibernate.
  6. Modificamos el applicationContext-hibernate.xml para indicarle el nuevo DAO
  7. Creamo LibroManager y LibroMangerImpl (or.appfuse.servicio y org.appfuse.servicio.imp) y modificamos el applicarionContext.xml incluyendo el dao en el manager.
  8. Modificamos el UserControler para que reciba libro.html y creamos el jsp que devuelve el metodo que nos hemos creamos en UserControler.