viernes, 22 de febrero de 2008

Herencia e Hibernate

Para explicarlo bien,vamos a utilizar un ejemplo:
Vamos a utilizar la clase padre Empleado y las subclases Tecnico y Desarrollador.
Para hacer el mapeo de estas relaciones se pueden utilizar 3 formas:

  1. Una sola tabla,donde se guarda la jerarquia de clase.Es la mejor opción ya que sólo hay que acceder a una sola tabla.
  2. Una tabla para la Padre con las cosas comunes y dos tablas para cada hija con las cosas más concretas.Tiene el incoveniente de que para acceder a la información hay que utilizar los join.Pero la ventaja de que se puede crear tablas para cada nuevo tipo,son mas flexibles,ya que si hay que cambiar algún atributo se hace a la tabla correspondiente.
  3. Una tabla independiente para cada clase,pero los atributos de la clase Padre tiene que estar en cada tabla Hija.

A continuación presentamos un ejemplo de uso que vale para cualquiera de las tres estrategias. Con esto se demuestra que podemos cambiar la configuración, pero que la lógica de negocio sigue intacta.

@Test
public void addEmpleado() {
log.info("\n\n*** añadiendo Emppleado ***\n");

try {
Empleado empleado = new Employee("nombre"

session.persist(empleado);

log.debug("La clave del nuevo empleado es: " + empleado.getId());


Tecnico tecnico = new Tecnico();
tecnico.setName("nombre tecnico");
ttecnico.setExperienceYears(24);
session.save(tecnico);
log.debug("La clave del nuevo tecnico es: " + tecnico.getId());



} catch (Exception e) {
log.error(e);
}
}

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.

AppFuse

Según lo que he entendido,no se si me equivoco,si es asi corregirme,appfuse es una proyecto de codigo abierto que nos facilita la creación de aplicaciones creando una estructura base con una seria de clases y archivos por defecto que se pueden ir modificando como mas nos convenga para nuestra aplicación.
Appfuse nos quita el problemas mas engorroso que es empezar una proyecto desde cero,crear la estructura de la aplicación que puede llevarnos dias.

martes, 5 de febrero de 2008

Instalando Maven en 5 minutos(al final fueron una 3 horas)

Descomprimimos la carpeta maven en C:
Nos vamos a las propiedades del sistema,en entorno de variables nos creamos dos nuevas:
  • JAVA_HOME donde le indicamo donde esta nuestro jdk.
  • M2_HOME donde le indicamos donde esta la carpeta maven.
En la variable PATH le añadimos al final un ; pegamos las rutas del maven y del jdk separadas por ; y acabadas ambas en \bin.
Nos vamos a la carpeta maven y entramos en la carpeta conf y dentro de esta abrimos un archivo llamado settings.xml.
Este es el archivo de configuracion del maven.
Una de las cosas que hace el maven es gestionar las librerias de nuestro programa,se conecta solo a internet y baja las librerias al repositorio que se encuentran en C:\Documents and Settings\javaape a una carpeta .m2\repository que esta oculta.
Para que funcione el Maven en ecplise:
  • desde consola en cd workspace
  • ejecutamos comando que viene en la web http://www.appfuse.org/display/APF/Home y pinchamos en el enlace y hay tenemos las diferentes direccion de librerias,cambiamos http://static.appfuse.org/releases por http://172.16.151/repository
  • nos metemos en el proyecto que nos hemos creado
  • ponemos mvn eclipse:eclipse
  • se le añade las librerias mvn -Declipse.workspace=workspace ecplise:add-maven-repo
  • mvn install
Los objetivos del maven:
  • Repositorio local
  • Generar proyectos automaticos
  • Despliegue de proyectos automaticos.
Para ver la aplicacion en el navegador se le dice al maven que utilice mvn jetty:run-wa

Desarrollo: respuesta solicitud web

Una aplicacion de pedir autores.
  1. Crear en el controlador el metodo pedirAutores() y anotacion indicando la solicitud web y devolviendoel nombre del jsp
  2. Creamos el jsp correspondiente.
  3. Incluimos en el modelo la información dinámica y accedemos desde el jsp a través ${clave}.

Problemas con la aplicación

Cuando tengamos un problema con la aplicacion y no sepamos que es lo que ocurre hacemos estos pasos:
  • Para tomcat.
  • Ant clean->borra todo codigo compilado.
  • Ant undeploy->borrar la aplicacion del servidor.
  • Ant deploywar->desplegamos la aplicacion.
  • Arrancar el tomcat.

lunes, 4 de febrero de 2008

Servlets, JSp, MVC

Definiciones:
  • Servlets-->es un pequeño programa que corre en un servidor.Un servlet es una clase java que extiende de la clase HttpServlet,esta es la que hace todo el traajo,esta clase tiene muchos metodos,encapsula el protocolo web (request,response),es la clase inteligente y lo que nosotros hacemos es sobrescribir los métodos de esta clase.Al escribir una direccion en el ordenador,se invica al archivo descriptor web.xml que sn esto no se puede hacer nada,sin este archivo el tomcat no sabe que hacer con los archivo y alli ponemos una declaracion de los servlet,ponemos que según lo que se escriba en el navegador se vaya a la clase servlet correspondiente.El jsp ayuda a desarrollar la aplicación accediendo a la información java desde web.
    En conclusion: El modelo Servlet consiste en la creación de páginas web dinámicas basadas en java. Los servlets permiten que un ordenador se conecte a una clase java y genere respuesta.
  • Jsp(java server page)-->digamos con mis propias palabras que son aplicaciones java para la web.
  • MVC(modelo-vista-controlador)-->es una forma de organizar la aplicación en 3 apartados distinto,separando la interfaz de la lógica del programa,este forma se utiliza sobre todo en entornos web.Este patrón nos permite/obliga a separar la lógica de control (sabe que cosas hay que hacer pero no como), la lógica de negocio (sabe como se hacen las cosas) y la lógica de presentación (sabe como interactuar con el usuario). Para entenderlo mejor:En una aplicación el modelo seria el planteamiento de la aplicación como vamos a resolver el "problema". La vista seria la forma de presentarlo y visualizarlo,es decir la interface.El controlador seria el código de la aplicación.

Varios idiomas en el proyecto

Copiamos el archivo messages.properties
y l pegamos en el mismo lugar donde se encuentra(src/main/resources) y le cambiamos el nombre por ejemplo messages_fr.properties.
Le cambiamos las palabras al idioma correspondiente.
Hacemos un deploy y en firefox en herramientas/avanzado/idioma ponemos en primer lugar el lenguaje Frances(que es el que hemos elegido para este ejemplo) y ya vemos en la pagina como salen las palabras que hemos cambiado.

viernes, 1 de febrero de 2008

Spring FrameWork

Es un framework de código abierto para el desarrollo de aplicaciones java.
Para poder utilizar este framework debemos indicarlo en el archivo web.xml que se encuentra en la carpeta web-inf de nuestro proyecto.
El web.xml tiene todos los parametros de configuración del proyecto.
Esta linea es la indica que vamos a utilizar este framework.