1.
Creación de Proyecto Web
Abrir eclipse luego crear un nuevo Dynamic Web
Project utilizando New->Other->Dynamic
Web Project. El nombre del proyecto será IntegracionJSFSpringHibernate.
Utilizar el link http://amalaver.blogspot.com/2011/11/mapeo-de-entity-clases-desde-la-base-de.html
para poder generar el mapeo de clases utilizando hibernate.
Driver: com.mysql.jdbc.Driver
Connect URL:
jdbc:mysql://localhost:3306/Peru
User: root
Password: mysql
En la carpeta lib que se encuentra en la carpeta
WEB-INF se debe pegar las librerías de Hibernate que se encuentran en la carpeta 01 HibernateLibs que se le dio
al comienzo.
2.
Integración Hibernate con Spring
Primero
crearemos el archivo dbConfig.xml en el cual se encontrará los parámetros de
conexión para la base de datos. Hacemos click derecho en la carpeta WEB-INF y
seleccionamos New->Other->XML File y le pondremos de nombre dbConfig.xml.
Este archivo contendrá la siguiente información:
<?xml version="1.0"
encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql"
value="false" />
<property name="databasePlatform"
value="org.hibernate.dialect.MySQLDialect" />
</bean>
</property>
<property name="dataSource"
ref="dataSource" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/Peru"
/>
<property name="username"
value="root" />
<property name="password"
value="mysql" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource"
ref="dataSource" />
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"
/>
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean id="jdbcTemplateCibertec"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
|
Este archivo
contiene información de la conexión a la base datos, configuración hibernate
donde se coloca el dialecto y el uso de anotaciones.
Hasta el momento
hemos configurado solamente base de datos, ahora tenemos que configurar la
integración Spring con Hibernate para lo cual crearemos el archivo applicationContext.xml.
Para crear este archivo seleccionaremos la carpeta WEB-INF y hacemos click
derecho New->Other->XML File, el
nombre el archivo será applicationContext y contendrá la siguiente información:
<?xml version="1.0"
encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<import resource="dbConfig.xml"
/>
<context:annotation-config />
<!-- Instructs the container to look for
beans with @Transactional and decorate them -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<context:component-scan base-package="cibertec.edu.pe"
/>
<bean id="logger"
class="org.springframework.beans.factory.config.CommonsLogFactoryBean">
<property name="logName"
value="log" />
</bean>
</beans>
|
Copiar las
librerías de Spring que se encuentran en la carpeta 02 SpringLibs, dentro de la carpeta lib.
Luego
seleccionar la carpeta META-INF y hacer click derecho New->Other->XML
File y dar el nombre persistence.xml. Este archivo contendrá información de la
persistencia de datos que utiliza Hibernate para trabajar. A continuación se
muestra el código que debe contener este archivo:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="default"
transaction-type="RESOURCE_LOCAL">
</persistence-unit>
</persistence>
|
La carpeta
META-INF con el archivo persistence.xml debe crearse también en la carpeta src
del proyecto. Con esta configuración terminamos de integrar Hibernate con
Spring, ahora nos tocará integrar con JSF.
3.
Integración con JSF
Primero para integrar JSF, debemos crear los
componentes necesarios para que JSF pueda trabajar, estos componentes son los
siguientes:
- Web.xml
- Faces-config.xml
- Agregar librerías de faces
- Página web de prueba
- Crear log4j, properties
- Agregar librerías log4j
Web.xml
Primero crearemos el archivo web.xml, para lo cual
seleccionaremos la carpeta WEB-INF, hacemos click derecho New->Other->Web Descriptor.
<?xml version="1.0"
encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
<context-param>
<param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>facelets.RECREATE_VALUE_EXPRESSION_ON_BUILD_BEFORE_RESTORE</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>facelets.REFRESH_PERIOD</param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>log4j-messages_es-location</param-name>
<param-value>WEB-INF/messages_es.properties</param-value>
</context-param>
<context-param>
<param-name>log4j-properties-location</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
<param-value>com.sun.facelets.FaceletViewHandler</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING</param-name>
<param-value>enable</param-value>
</context-param>
<context-param>
<param-name>facelets.SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>createTempFiles</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>maxRequestSize</param-name>
<param-value>1000000</param-value>
</init-param>
</filter>
<filter>
<filter-name>Login Filter</filter-name>
<filter-class>cibertec.edu.pe.filter.LoginFilter</filter-class>
</filter>
<filter>
<filter-name>JPA Filter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Login Filter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>JPA Filter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value />
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
|
Faces-Config
Después crearemos el archive faces-config.xml,
seleccionamos la carpeta WEB-INF, click derecho New->Other->Faces Config. Le quitamos el check de registrer
in web.xml. Después de crear el archivo, tenemos que adicionar algunas líneas y
de la siguiente manera quedaría nuestro archivo:
<?xml version="1.0"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
</faces-config>
|
El tag <el-resolver> dentro del archivo de
configuración faces-config es necesario para poder trabajar con spring.
Agregar
librerías de faces
En la carpeta 03
FacesLibs, encontraremos las librerías utilizadas para faces, las cuales
serán copiadas al proyecto.
Página
web de prueba
Creamos la página index.html que será la página de
inicio la cual nos enviará a la primera página jsf. Seleccionamos la carpeta
webContent, click derecho New->Other->html File. Cuando nos genere la
página, nuestra página debe contener el siguiente código html:
<html>
<head>
<meta content="text/html;
charset=UTF-8" http-equiv="content-type"
/>
<meta http-equiv="refresh" content="0;
url=paginas/inicio.jsf" />
</head>
<body>
</body>
</html>
|
Después de crear la página html, creamos una
carpeta llamada paginas dentro de la
carpeta webContent. Dentro de la carpeta paginas crearemos la página inicio.xhtml que contendrá la primera
página de nuestra aplicación integrada. Seleccionamos la carpeta paginas, click
derecho New->Other->Xhtml Page. Esta
página contendrá el siguiente código:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:form>
<h:outputText value="hola"/>
</h:form>
</html>
|
Crea
log4j, properties
Para crear el log4j.properties, seleccionamos la
carpeta WEB-INF, click derecho New->Other->Properties
File. El archivo contendrá las siguientes líneas:
log4j.appender.DAILY=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DAILY.File=D:/abc.log
log4j.appender.DAILY.DatePattern='.'yyyy-MM-dd
log4j.appender.DAILY.layout=org.apache.log4j.PatternLayout
log4j.appender.DAILY.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] (%F:%M:%L)%n%m%n%n
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] (%F:%M:%L)%n%m%n%n
# Root logger option
log4j.rootLogger=ERROR, DAILY, stdout
log4j.logger.org.springframework=ERROR, DAILY
log4j.logger.org.hibernate=ERROR, DAILY
log4j.logger.org.hibernate.SQL=DEBUG, DAILY
|
Luego haremos los mismos pasos para crear el archivo
messages.properties y messages_es.properties.
El archivo messages.properties contendrá la siguiente
información:
mensaje.datosEnviados=Datos enviados Satisfactoriamente
mensaje.enviar=No hay registros para enviar
|
El archivo messages_es.properties contendrá la
siguiente información:
up=\u2191
down=\u2193
left=\u2039
right=\u203A
log4j.file.name =loging.log
log4j.file.path =D\:\\abc.log
|
Agregar
librerías log4j
El último paso es agregar al proyecto las librerías
log4j que se encuentran en la carpeta 04
Log4j.
4.
Crear el Login Filter
Creamos una clase en el paquete
cibertec.edu.pe.filter llamado LoginFilter. Este clase contendrá las siguientes
líneas de código:
package cibertec.edu.pe.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
public class LoginFilter implements Filter {
private String loginPage = "paginas/inicio.jsf";
private String timeoutPage = "";
public void init(FilterConfig
filterConfig) throws ServletException {
}
public void doFilter(ServletRequest
request, ServletResponse response, FilterChain filterChain) throws IOException,
ServletException {
if ((request instanceof HttpServletRequest)
&& (response instanceof HttpServletResponse)) {
HttpServletRequest
httpServletRequest = (HttpServletRequest) request;
HttpServletResponse
httpServletResponse = (HttpServletResponse) response;
String
requestPath = httpServletRequest.getRequestURI();
boolean loginVal =
requestPath.endsWith("inicio.jsf");
if(!loginVal){
if
(isSessionControlRequiredForThisResource(httpServletRequest)) {
if
(isSessionInvalid(httpServletRequest)) {
String
timeoutUrl = httpServletRequest.getContextPath() + "/" + getTimeoutPage();
System.out.println("Session is invalid!
redirecting to timeoutpage : " + timeoutUrl);
httpServletResponse.sendRedirect(timeoutUrl);
return;
}
}
}
}
filterChain.doFilter(request,
response);
}
private boolean
isSessionControlRequiredForThisResource(HttpServletRequest
httpServletRequest) {
String requestPath = httpServletRequest.getRequestURI();
boolean controlRequired =
!StringUtils.contains(requestPath, getTimeoutPage());
return controlRequired;
}
private boolean
isSessionInvalid(HttpServletRequest httpServletRequest) {
boolean sessionInValid =
(httpServletRequest.getRequestedSessionId() != null) &&
!httpServletRequest.isRequestedSessionIdValid();
return sessionInValid;
}
public void destroy() {
}
public String getTimeoutPage()
{
return timeoutPage;
}
public void setTimeoutPage(String
timeoutPage) {
this.timeoutPage = timeoutPage;
}
public String getLoginPage() {
return loginPage;
}
public void setLoginPage(String
loginPage) {
this.loginPage = loginPage;
}
}
|
Si deseas las librerias, puedes donar y me escribes un correo a almalaver@gmail.com.
No hay comentarios:
Publicar un comentario