lunes, mayo 19, 2008

JSF + Hibernate + JPA + Netbeans + ZK (Configuracion)

Bueno ya despues de mucho... publicare la primera parte completa del minitutorial de como integrar todas las tecnologias antes mencionadas.... primero vamos a ver la configuracion.... y despues explicare el funcionamiento de cada uno...

Bueno primero crearemos las librerias de NetBeans nos vamos a Tools-> Libraries y seleccionamos New, escribimos Hibernate JPA, y seleccionamos Add JAR/Folder, ahora buscamos todos los JAR ok? dije JAR!!!! no folders... que les pedi en la parte pasada del tutorial... ahora bien... hacemos lo mismo para ZK y ZK JSF, solo queremos los JAR que estan dentro de la carpeta libs para ZK y ZK JSF.

Bueno.. creemos una base de datos sencilla con dos tablas... tiene MySQL cierto??, si no busquen como instalarlo para su propia distribucion de linux... por que tienen linux verdad??? jejeje bueno.. como sea... instalen MySQL... para este tutorial... no entrare en detalles de como lo instalamos... y asumire que son expertos en la materia... despues posteare algo sobre MySQL...

entramos a MySQL, y crearemos una pequeña base de datos de escuelas...

Para crear una base de datos
CREATE DATABASE escuela;

Para crear las tablas
CREATE TABLE instituto (id_inst int primary key auto_increment, nombre varchar(20), direccion varchar(20)) ENGINE=InnoDB;
CREATE TABLE profesor (id_prof int primary key auto_increment, nombre varchar(20),id_inst int) ENGINE=InnoDB;

Para crear la relacion
Todo es una sola linea..
ALTER TABLE profesor
ADD CONSTRAINT profesor_instituto
FOREIGN KEY (id_inst)
REFERENCES instituto (id_inst)
ON DELETE RESTRICT
ON UPDATE CASCADE;


Ahora nos vamos a File->New Proyect y seleccionamos Web | Web Application, le ponemos escuela al proyecto, seleccionamos tomcat como servidor y seleccionamos JavaServer Faces.




En source proyects creamos un nuevo paquete y le llamamos DataBase, hacemos clic derecho seleccionamos New y despues DataBase, despues seleccionamos New Other para elegir Persistence | Entity Classes from Database, en DataSource seleccionamos New DataSource, ahi seleccionamos DataBase Connection-> new database connection, nos aparecera un dialogo para conectarnos con MySQL seleccionamos MySQL connector, el driver nos vale...pero en DataBase URL escribimos jdbc:mysql://127.0.0.1/escuela, pongan 127.0.0.1 por que luego en unas distros no funciona el localhost por que traen una configuracion rara... y no me voy a poner a decir como quitarselas ahorita.. jeje







Debe aparecernos que la conexion fue existosa.. si no... algo escribiste mal.. o no tienes levantado mysql... /etc/init.d/mysql start lo levanta.. :D

Seleccionamos las dos clases que antes hemos creado... Instituto aparecera de manera rara por que fue incluida ya que hay una clave foranea hacia ella.

Ahora hay que crear una unidad persistente, seleccionamos CREATE PERSISTENCE UNIT, nos creare una unidad persistente solo falta seleccionar Hibernate como nuestro manejador,


De todos modos les dejo mi persistence.xml


<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xsi="http://www.w3.org/2001/XMLSchema-instance" schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

<persistence-unit name="tiempoairePU" type="RESOURCE_LOCAL">

<provider>org.hibernate.ejb.HibernatePersistence</provider>

<properties>

<property name="hibernate.connection.username" value="usuario">

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver">

<property name="hibernate.connection.password" value="password">

<property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1/escuela">

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect">

<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider">

<property name="hibernate.c3p0.acquire_increment" value="3">

<property name="hibernate.c3p0.idle_test_period" value="14400">

<property name="hibernate.c3p0.timeout" value="25200">

<property name="hibernate.c3p0.max_size" value="15">

<property name="hibernate.c3p0.min_size" value="3">

<property name="hibernate.c3p0.max_statements" value="0">

<property name="hibernate.c3p0.preferredTestQuery" value="select 1;">

</property>

</property>

</property>



Automaticamente tenemos nuestras clases mapeadas... si nos marca error tenemos que entrar a las propiedades del proyecto, clic derecho Properties, Libraries Add Library y seleccionamos HibernateJPA la libreria que antes creamos, junto con ZK y ZK JSF.

AUTONUMERICO HIBERNATE

Aqui hay un error con la generacion de NetBeans puesto que como usamos autonumerico... necesitamos agregar unas lineas para que nos respeten el autonumerico, si todo salio bien deberia estar en Instituto .java despues de la linea @Id debemos escribir @GeneratedValue, y debemos importar javax.persistence.GeneratedValue; en Instituo y Profesor, ahora no tenemos problemas...

Bien ahora configuramos NetBeans para usar ZK en Configuration Files nos vamos a Web.xml y escrimos estas lineas en el apartado donde veas los listener




<listener>

<description>Para limpiar la basura de las sesiones</description>

<display-name>ZK Session Cleaner</display-name>

<listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class></listener>



Y en donde veas las tags de servlet escribe estas.. (de preferencia antes de las de JSF)


<servlet>

<description>ZK cargador para pagimas ZUML</description>

<servlet-name>zkLoader</servlet-name>

<servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>

<init-param>

<param-name>update-uri</param-name>

<param-value>/zkau</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet>

<description>Engine para la actualizacion asincrona</description>

<servlet-name>auEngine</servlet-name>

<servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>zkLoader</servlet-name>

<url-pattern>*.zul</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>zkLoader</servlet-name>

<url-pattern>*.zhtml</url-pattern>

</servlet-mapping>


Ahora ya estamos listos para usar ZK, tenemos que entrar en nuestro archivo WelcomeJSF.jsp

Agregamos nuestra TAG


<%@taglib prefix="z" uri="http://www.zkoss.org/jsf/zul" %>


esto nos permite usar ZK en JSF... y va donde van todas las demas tags casi hasta el principio

<z:page>

<z:window title="Hola" border="normal">

Hola

</z:window>

</z:page>




Bueno ya esta funcionando despues veremos acerca del binding

4 comentarios:

J... dijo...

wow, justo lo que necesitaba, gracias xD... un nuevo lector del blog jajaja

J... dijo...

Una pregunta, estoy haciendo una aplicacion en Java con MySQL, no es orientado Web, logre configurar como dijiste el hibernate, sin embargo, estoy tratando de crear el EntityManager pero ma de un error de que no consigue "org/slf4j/LoggerFactory", alguna idea?, se que este no es el mejor medio para pregunta, disculpa es que tengo dias con esto

Anónimo dijo...

Hola,ya hice todos los pasos que comentas solo que cuando cargo el codifo de zk ya no funciona la pagina

Estado de HTTP 500 -

type Informe de excepción

Mensaje

DescripciónEl servidor encontró un error interno () que impide satisfacer la solicitud.

Excepción

org.apache.jasper.JasperException: java.lang.IllegalArgumentException: Not a Page:javax.faces.component.UIViewRoot@16a5acd

Causa principal

java.lang.IllegalArgumentException: Not a Page:javax.faces.component.UIViewRoot@16a5acd

nota Las causas de los seguimientos de pila completos de la excepción y su root se encuentran disponibles en los Sun Java System Application Server 9.1_02 registros.
Sun Java System Application Server 9.1_02

alguna solucion?

Anónimo dijo...

Hola, Tienes un video sobre este post?? o podrías poner algunos pantallazos para giarme.
Seria genial.
De antemano gracias.!