viernes, 8 de febrero de 2008

SPRING - HIBERNATE - Ejemplo

(Tengo que editar 1 par de cosas, como problema al mostrar el código del jsp)

Partiendo de una petición hecha por un usuario a través de una petición web, vamos a obtener una lista de editoriales.



Teniendo en cuesta que ya existe una peticón de 'getUsers', simplemente haremos lo mismo pero con las editoriales.



Partiremos de la clase UserController (myapp/src/main/java/org.appfuse.web), aquí nuestra clase controlador es quien recibira la petición hecha y controlará a donde se redireccionará y que datos debemos cargar.

Por lo tanto, debemos pedir los datos a cargar, que para ellos y sabiendo que pedimos las editoriales, debemos hacer una consulta a nuestra base de datos para pedir las editoriales.

Mediante el diagrama que hemos mostrado, nuestra clase UserController se comunicarña con la clase EditorialManager (que es un Servicio). Ésta a su vez se comunicara con un DAO y ésta a su vez hara la consulta pertinente.

Empezaremos creando un EditorialManager y se la añadiremos a la clase UserController. Por lo tanto nos quedaría:



@Autowired
private EditorialManager editorialManager;

Ahora debemos crear una interfaz EditorialManager. La interfaz la crearemos en: myapp/src/main/java/org.appfuse.service.

Esta interfaz sólo tendrá el método getEditoriales. Por lo tanto nos quedará:



public interface EditorialManager {
public List
getEditorial();
}

Puesto que es una interfaz, debemos implemetar sus métodos con una clase que crearemos en myapp/src/main/java/org.appfuse.service.impl. La clase la llamaremos EditorialManagerImp.

Puesto que nuestro Manager (servicio) se comunica con el Dao, crearemos un dao con el nombre editorialDao de la clase EditorialDao que crearemos posteriormente. Y ahora implementaremos los métodos de la implementación y los getters & setter del editorialDao.
(Recuerda que si al editorialDao le pones otro Nombre cómo dao, hacer un método setEditorialDao)

Al final obtendremos:



public class EditorialManagerImpl implements EditorialManager
{
public EditorialDao editorialDao;

@Override
public List getEditorial() {
return editorialDao.getEditorial();
}
public getEditorialDao()

{
return this.editorialDao;
}

public setEditorialDao(EditorialDao editorialdao)
{
this.editorialDao=editorialDao;
}
}


En estos momentos nos dirá que no existe la clase EditorialDao y por lo tanto no reconoce la variable editorialDao. Crearemos el interfaz EditorialDao en el paquete org.appfuse.dao, y le añadiremos el método getEditorial.

Una vez creada la interfaz vamos retocar un archivo de configuración para decirle que siempre que se quiera acceder a la interfaz EditorialManager, se debe ir a su implementación EditorialmanagerImpl. Para ello accdemos al applicationContext.xml (myapp/src/main/webapp/WEB-INF) y añadiremos:

Añadimos el Bean de editorialManager. (buscad por el id)

Aquí podeis ver el applicationContect.xml.

Una vez modificado el application-context, insertaremos el método getEditoriales a la interfaz.

public interface EditorialDao {
public List
getEditorial();
}


Pueto que es una interfaz, ahora debemos implementarla. Para ello nos crearemos una clase EditorialDaoImp y la guardaremos en el paquete org.appfuse.dao.impl. Y le diremos que extienda de HibernateDaoSupport para que se pueda conectar a la base de datos e implemente de la interfaz EditorialDao.

En el método getEditoriales, haremos una consulta a la base de datos a traves de la siguiente linea de código:

getHibernateTemplate().find("from Editorial")

Ésto nos devolvería una lista de Editoriales, qué es lo que deseamos, por lo tanto esto lo iremos devolviendo hasta llegar al UserControler.

Al final nos quedará:



public class EditorialDaoImpl extends HibernateDaoSupport implements
EditorialDao {
@Override
public
List getEditorial() {
return
getHibernateTemplate().find("from Editorial");
}

}

Al igual que antes modificamos el applicationContext, ahora debemos modificar el applicationContext-hibernate para decirle que siempre que se llame a la interfaz donde debe buscar su implementación. Y a parte para decirle que donde debe ir a buscar la tabla cuando haga la consulta y que estructura seguirá.






Con ello le decimos que siempre que se acceda a la interfaz editorialDao su clase de implementación es EditorialDaoHibernate

Añadiremos esta línea dentro del List:

org/appfuse/model/Editorial.hbm.xml


Aqí le decimos que existirá una tabla basado en la estructura encontrada en Editorial-hbm.xml.

Ahora necesitamos crear el xml Editorial-hbm.xml (paquete: org/appfuse/model). Cuyo cuerpo será:




Con la etiqueta 'table', creará una tabla con el nombre que le pongamos, en este caso 'app_editorial'. Nuestra tabla sólo tendrá dos parámetros, una id y un nombre, cuyo id será una clave.

Sólo faltaría decirle al UserController que siempre que se llame a la página Editoriales.html nos carge una lista de editoriales, y para ellos usaremos el model.



@RequestMapping("/editoriales.html")
public String executeEditorial(ModelMap
model){

model.addAttribute("listaEditoriales",userManager.getEditoriales());

return "editorialList";
}


Tan sólo faltaría modificar nuestro jsp y decirle que nos muestre la tabla que hemos denominado "listaEditoriales".

El jsp lo crearemos en myapp/src/main/webapp, y le pondremos el nombre de 'editorialList', que le hemos dicho en el UserController.




Aquí podeis ver el código.




martes, 5 de febrero de 2008

Instalar Maven

Esta guia está sacada de http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html.

Lo primero que debemos hacer es bajarnoslo. Para ello podemos hacerlo desde aqui.

Pasos a seguir para instalarlo en win 2000/xp.

· Descomprimir la carpeta en: C:\Program Files\Apache Software Foundation\ (está basado en una página inglesa, yo lo instalaría en C:\, teniendo en cuenta que siempre que debas hacer referencia al maven debes modificar la ruta, sino dejala por defecto). Se creará un subdirectorio llamado apache-maven-2.0.8

· Añadir una variable de entorno (para ello usaremos tecla de windows + pause, ir a la pestaña de opciones avanzadas pulsaremos 'Variables de entorno'). Añadiremos una variable de entorno con el nombre M2_HOME y cuyo valor de variable será C:\Program Files\Apache Software Foundation\apache-maven-2.0.8 en las variables del usuario (la zona de arriba).
Nota: Para las versiones inferiores a 2.0.9 aseguraos que no terminamos el valor con un \

· Añadir otra variable de entorno con el nombre M2 y cuyo valor será %M2_HOME%\bin.

· Opcional: Añadir otra variable más con el nombre MAVEN_OPTS que nos servirá para especificar las propiedades de la JVM, p.ej. el valor -Xms256m -Xmx512m. Ésta variable puede ser usada como opciones adicionales para Maven.

· En el mismo diálogo (varables del usuario), añadiremos/modificaremos la variable Path con el valor %M2%;%Path%, que nos permitirá darle permiso para usar la consola de comandos.

· En el mismo diálogo aseguraos que existe un JAVA_HOME en las variables del usuario o en las del sistema y asignadle la ruta donde teneis el JDK, por ejemplo C:\Program Files\Java\jdk1.5.0_02, y que está añadido el valor %JAVA_HOME%\bin al Path.

· Por último verificar que que está correctamente instaldo, para ello abrid la consola de comando (tecla de window + R y escribid cmd). Escribid mvn --version

lunes, 4 de febrero de 2008

Creación de un archivo JSP

Antes de empezar debemos tener en cuenta:

· Todos los archivos JSP los guardaremos en la carpera 'src/main/webapp'.
· El servicio lo guardaremos en el paquete org.appfuse.service de la ruta 'src/main/java'. Al igual guardaremos la implementación en el paquete 'org.appfuse.service.imp'.
· Y por ultimo guardaremos todos los controladores en el paquete 'org.appfuse.web', de la ruta 'src/main/web'.

Necesitaremos una clase controlador con el cual sabiendo la página a la que han hecho referencia podemos devolver una vista con lo necesario. Para ello accederemos al 'model' y le iremos añadiendo atributos al modelo, para que en él podamos obtener lod datos necesarios que deseamos mostrar. (éste modelo se llama MVC)

Ejemplo:

Crearemos una página en JSP la cual la llamaremos en nuestro navegador "editoriales.html".

Nuestro controlador posee una método tal que:

@RequestMapping("/editoriales.html")
public String executeEditorial(ModelMap model){
logger.info("Cargando editoriales...");
model.addAttribute("listaEditoriales",userManager.getEditoriales());
return "editorialList";
}

Podemos observar que, @RequestMapping lo usamos para saber el nombre de la página y que debemos hacer.

(el logger sirve para más información, cosa que no es necesaria a la hora de crear un JSP).

Sabiendo que actue cuando llamen en el navegador a 'editoriales.html', ahora necesitamos cargar el modelo con la información que queremos mostrar. Para ellos usaremos 'model.addAttribute(...)', en este caso añadiremos una lista de editoriales. Esta lista de editorial la obtendremos gracias a la clase userManager, una interfaz que la implementaremos para que disponga del método getEditoriales().

Una vez creado el controlador y cargador los datos al modelo sólo nos quedaría retocar la vista de la página JSP. Para ello entramos en el jsp de editorialesList. Éste debe coincider con el return del controlador.

Una vez dentro podemos escribir mediante código HTML y acceder al model

Nuestro jsp sólo dispondrá de una tabla.



Otras referencias:

Mensajes en jsp
Logger
Tablas en jsp