Desarrollo
La solución la vamos a realizar de la siguiente manera vamos a crear un proyecto tipo modular con maven,la persistencia de datos con hibernate 5,spring 4.7 y front end primefaces 7.0 comenzemos:Abrimos nuestro IDE eclipse y seleccionamos en File->New->Maven Project
Seleccionamos en Create a simple project y presionamos Next
LLenamos los siguientes campos y presionamos Finish:
- Group Id: mx.com.tutosoftware.cleanservice
- Artifact Id: cleanservice
- Packaging: pom
- Name: Clean Service
En el archivo pom.xml escribimos lo siguiente
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> <verbose>true</verbose> <fork>true</fork> <executable>${JAVA_HOME}/bin/javac</executable> <compilerVersion>1.8</compilerVersion> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.2</version> <configuration> <jvm>${JAVA_HOME}/bin/java</jvm> <forkMode>once</forkMode> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.3.1</version> <inherited>true</inherited> <executions> <execution> <id>enforce</id> <configuration> <rules> <DependencyConvergence /> <requireJavaVersion> <version>1.8</version> </requireJavaVersion> </rules> </configuration> <goals> <goal>enforce</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <versionRange>[1.0.0,)</versionRange> <goals> <goal>enforce</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> </build>
Una vez realizado esta parte en nuestro editor eclipse selecionamos File->New->Other
Destendemos la pestaña que dice Maven y seleccionamos Maven Module y presionamos Next
En la siguiente pantalla seleccionamos Create a simple project (skip archetype selection) , luego en Module name: lo nombramos como cleanservice-web y en Parent project: seleccionamos cleanservice y presionamos Next
Llenamos los siguientes datos:
- Group id:mx.com.tutosoftware.cleanservice
- Version:0.0.1-SNAPSHOT
- Packaging:seleccionar war
- name:CleanService Web
Ahora creamos el modulo core donde tendremos nuestra persistencia de datos y servicios, volvemos a selecionar
File->New->Other
Destendemos la pestaña que dice Maven y seleccionamos Maven Module y presionamos Next
En la siguiente pantalla seleccionamos Create a simple project (skip archetype selection) , luego en Module name: lo nombramos como cleanservice-core y en Parent project: seleccionamos cleanservice y presionamos Next
Llenamos los siguientes datos:
- Group id:mx.com.tutosoftware.cleanservice
- Version:0.0.1-SNAPSHOT
- Packaging:seleccionar jar
- name:CleanService Core
Marca un error en el módulo marcado con que sería cleanservice-webporque no tiene el archivo web.xml , pero lo solucionaremos de la siguiente manera, hacemos clic derecho en el proyecto y selecionamos Properties
Selecionamos Project Facets en el recuadro seleccionamos Dynamic Web Module 3.1 y Java Server Faces 2.2 y presionamos Apply posterriormente OK
Creamos una carpeta en src/main/webapp llamada WEB-INF.Creamos el archivo web.xml y escribimos lo siguiente:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>cleanservice</display-name> <absolute-ordering /> <!-- load spring configuration --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-config.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <context-param> <param-name>primefaces.THEME</param-name> <param-value>start</param-value> </context-param> <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>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>
Ahora nos vamos al modulo padre llamado cleanserviceHaciendo clic derecho y seleccionamos Run As->Maven clean
y en consola aparece lo siguiente:
De nuevo sobre cleanserviceHacemos clic derecho y seleccionamos Run As->Maven install
y en consola aparece lo siguiente:
Ahora lo que vamos hacer es instalar los jars nos vamos a cleanservice dejando el archivo pom.xml de la siguiente forma:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mx.com.tutosoftware.cleanservice</groupId> <artifactId>cleanservice</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>CleanService</name> <repositories> <repository> <id>prime-repo</id> <name>PrimeFaces Maven Repository</name> <url>http://repository.primefaces.org/</url> <layout>default</layout> </repository> </repositories> <properties> <csc.version>0.0.1-SNAPSHOT</csc.version> <primefacestheme.version>1.0.10</primefacestheme.version> <primefaces.version>7.0</primefaces.version> <spring.version>4.3.7.RELEASE</spring.version> <jsf2.version>2.2.10</jsf2.version> <hibernate.version>5.2.9.Final</hibernate.version> <jstl.version>1.2</jstl.version> <jsp-api.version>2.1</jsp-api.version> <servlet-api.version>3.1.0</servlet-api.version> <mysql.version>8.0.11</mysql.version> <itext.version>2.1.7</itext.version> <poi.version>3.17</poi.version> <elri.version>1.0</elri.version> <javaeewebapi.version>7.0</javaeewebapi.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>mx.com.tutosoftware.cleanservice</groupId> <artifactId>cleanservice-core</artifactId> <version>${csc.version}</version> </dependency> <!-- Spring and Transactions --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring ORM support --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-api</artifactId> <version>${jsf2.version}</version> </dependency> <dependency> <groupId>com.sun.faces</groupId> <artifactId>jsf-impl</artifactId> <version>${jsf2.version}</version> </dependency> <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet-api.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>com.sun.el</groupId> <artifactId>el-ri</artifactId> <version>${elri.version}</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>${javaeewebapi.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>${primefaces.version}</version> </dependency> <dependency> <groupId>org.primefaces.themes</groupId> <artifactId>all-themes</artifactId> <version>${primefacestheme.version}</version> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>${itext.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${poi.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <target>1.8</target> <verbose>true</verbose> <fork>true</fork> <executable>${JAVA_HOME}/bin/javac</executable> <compilerVersion>1.8</compilerVersion> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.2</version> <configuration> <jvm>${JAVA_HOME}/bin/java</jvm> <forkMode>once</forkMode> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.3.1</version> <inherited>true</inherited> <executions> <execution> <id>enforce</id> <configuration> <rules> <DependencyConvergence /> <requireJavaVersion> <version>1.8</version> </requireJavaVersion> </rules> </configuration> <goals> <goal>enforce</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> <pluginExecution> <pluginExecutionFilter> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <versionRange>[1.0.0,)</versionRange> <goals> <goal>enforce</goal> </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> </plugins> </pluginManagement> </build> <modules> <module>cleanservice-web</module> <module>cleanservice-core</module> </modules> </project>
cleanservice-core
Lo que sigue es integrar las capas de dao y servicio nos vamos al modulo cleanservice-core y en el archivo pom.xml escribimos lo siguiente:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>mx.com.tutosoftware.cleanservice</groupId> <artifactId>cleanservice</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>cleanservice-core</artifactId> <name>CleanService Core</name> <dependencies> <!-- Spring 4 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <!-- Hibernate dependencies --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> </dependency> <!-- mysql dependencie --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project>
Seguimos en cleanservice-core y en src/main/java creamos el paquete mx.com.tutosoftware.cleanservice.util
En ese paquete creamos la clase HibernateUtil
package mx.com.tutosoftware.cleanservice.util; import java.io.Serializable; import java.util.List; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class HibernateUtil { @Autowired private SessionFactory sessionFactory; public <T> Serializable create(final T entity) { return sessionFactory.getCurrentSession().save(entity); } public <T> T update(final T entity) { sessionFactory.getCurrentSession().update(entity); return entity; } public <T> void delete(final T entity) { sessionFactory.getCurrentSession().delete(entity); } public <T> void delete(Serializable id, Class<T> entityClass) { T entity = fetchById(id, entityClass); delete(entity); } @SuppressWarnings("unchecked") public <T> List<T> fetchAll(Class<T> entityClass) { return sessionFactory.getCurrentSession().createQuery(" FROM "+entityClass.getName()).list(); } @SuppressWarnings("unchecked") public <T> List<T> fetchAll(String hql) { return sessionFactory.getCurrentSession().createQuery(hql).list(); } public <T> T fetchById(Serializable id, Class<T> entityClass) { return (T)sessionFactory.getCurrentSession().get(entityClass, id); } @SuppressWarnings("unchecked") public <T> T fetchByUniqueResult(String hql) { return (T)sessionFactory.getCurrentSession().createQuery(hql).uniqueResult(); } }
Ahora creamos el paquete llamado mx.com.tutosoftware.cleanservice.entity y en creamos la clase HomeClean
package mx.com.tutosoftware.cleanservice.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="homeclean") public class HomeClean implements Serializable { /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private long idHomeClean; @Column(name="departamento") private Double departamento; @Column(name="casa") private Double casa; @Column(name="residencia") private Double residencia; @Column(name="zonahabitacional") private Double zonaHabitacional; @Column(name="zonaprivadadepa") private Double zonaPrivadaDepa; @Column(name="edificio") private Double edificio; @Column(name="piso") private Double piso; @Column(name="dospisos") private Double dosPisos; @Column(name="maspisos") private Double masPisos; @Column(name="privadaaccesopeatonal") private Double privadaAccesoPeatonal; @Column(name="privadaaccesovehicular") private Double privadaAccesoVehicular; @Column(name="accesoabierto") private Double accesoAbierto; @Column(name="habitacion") private Double habitacion; @Column(name="habitacion2") private Double habitacion2; @Column(name="habitacion3") private Double habitacion3; @Column(name="habitacionmas3") private Double habitacionMas3; @Column(name="bano1") private Double bano1; @Column(name="bano2") private Double bano2; @Column(name="bano3") private Double bano3; @Column(name="banomas3") private Double banoMas3; @Column(name="barrerpisos") private Double barrerPisos; @Column(name="lavarvidriosint") private Double lavarVidriosInt; @Column(name="lavartrastes") private Double lavarTrastes; @Column(name="sacudir") private Double sacudir; @Column(name="lavarpisos") private Double lavarPisos; @Column(name="trapearPisos") private Double trapearPisos; @Column(name="cambiarsabanas") private Double cambiarSabanas; @Column(name="tirarbasura") private Double tirarBasura; public Double getTirarBasura() { return tirarBasura; } public void setTirarBasura(Double tirarBasura) { this.tirarBasura = tirarBasura; } public long getIdHomeClean() { return idHomeClean; } public void setIdHomeClean(long idHomeClean) { this.idHomeClean = idHomeClean; } public Double getDepartamento() { return departamento; } public void setDepartamento(Double departamento) { this.departamento = departamento; } public Double getCasa() { return casa; } public void setCasa(Double casa) { this.casa = casa; } public Double getResidencia() { return residencia; } public void setResidencia(Double residencia) { this.residencia = residencia; } public Double getZonaHabitacional() { return zonaHabitacional; } public void setZonaHabitacional(Double zonaHabitacional) { this.zonaHabitacional = zonaHabitacional; } public Double getZonaPrivadaDepa() { return zonaPrivadaDepa; } public void setZonaPrivadaDepa(Double zonaPrivadaDepa) { this.zonaPrivadaDepa = zonaPrivadaDepa; } public Double getEdificio() { return edificio; } public void setEdificio(Double edificio) { this.edificio = edificio; } public Double getPiso() { return piso; } public void setPiso(Double piso) { this.piso = piso; } public Double getDosPisos() { return dosPisos; } public void setDosPisos(Double dosPisos) { this.dosPisos = dosPisos; } public Double getMasPisos() { return masPisos; } public void setMasPisos(Double masPisos) { this.masPisos = masPisos; } public Double getPrivadaAccesoPeatonal() { return privadaAccesoPeatonal; } public void setPrivadaAccesoPeatonal(Double privadaAccesoPeatonal) { this.privadaAccesoPeatonal = privadaAccesoPeatonal; } public Double getPrivadaAccesoVehicular() { return privadaAccesoVehicular; } public void setPrivadaAccesoVehicular(Double privadaAccesoVehicular) { this.privadaAccesoVehicular = privadaAccesoVehicular; } public Double getAccesoAbierto() { return accesoAbierto; } public void setAccesoAbierto(Double accesoAbierto) { this.accesoAbierto = accesoAbierto; } public Double getHabitacion() { return habitacion; } public void setHabitacion(Double habitacion) { this.habitacion = habitacion; } public Double getHabitacion2() { return habitacion2; } public void setHabitacion2(Double habitacion2) { this.habitacion2 = habitacion2; } public Double getHabitacion3() { return habitacion3; } public void setHabitacion3(Double habitacion3) { this.habitacion3 = habitacion3; } public Double getHabitacionMas3() { return habitacionMas3; } public void setHabitacionMas3(Double habitacionMas3) { this.habitacionMas3 = habitacionMas3; } public Double getBano1() { return bano1; } public void setBano1(Double bano1) { this.bano1 = bano1; } public Double getBano2() { return bano2; } public void setBano2(Double bano2) { this.bano2 = bano2; } public Double getBano3() { return bano3; } public void setBano3(Double bano3) { this.bano3 = bano3; } public Double getBanoMas3() { return banoMas3; } public void setBanoMas3(Double banoMas3) { this.banoMas3 = banoMas3; } public Double getBarrerPisos() { return barrerPisos; } public void setBarrerPisos(Double barrerPisos) { this.barrerPisos = barrerPisos; } public Double getLavarVidriosInt() { return lavarVidriosInt; } public void setLavarVidriosInt(Double lavarVidriosInt) { this.lavarVidriosInt = lavarVidriosInt; } public Double getLavarTrastes() { return lavarTrastes; } public void setLavarTrastes(Double lavarTrastes) { this.lavarTrastes = lavarTrastes; } public Double getSacudir() { return sacudir; } public void setSacudir(Double sacudir) { this.sacudir = sacudir; } public Double getLavarPisos() { return lavarPisos; } public void setLavarPisos(Double lavarPisos) { this.lavarPisos = lavarPisos; } public Double getTrapearPisos() { return trapearPisos; } public void setTrapearPisos(Double trapearPisos) { this.trapearPisos = trapearPisos; } public Double getCambiarSabanas() { return cambiarSabanas; } public void setCambiarSabanas(Double cambiarSabanas) { this.cambiarSabanas = cambiarSabanas; } }