Wrex: Arquetipo java con Primefaces 6, Spring, Spring data + goodies

DarkKonum

Wrex es mi intento de generar un proyecto base de java (un arquetipo vamos) que permita tener el entorno listo y funcionando en minutos, no en horas. Partiendo con una base de datos MySQL vacía se puede tener una aplicación corriendo en apenas unos minutos.

Stack
Spring 5
Primefaces 6.2 + PF Extensions
Spring Data + Hibernate 5
Spring Security
Junit
H2
MySQL 8
Liquibase
Dozer Mapper

Que incluye

  • Proyecto Backend con las entidades, repositorios e implementación de la api. Incluye JUnit configurados con una base de datos en memoria H2 como también Junit de integración contra la BBDD Mysql.
  • Proyecto API, con interfaces y DTOs
  • Proyecto Frontend, con la vista y la capa de seguridad.
  • Jetty ready. Tambien despliega sin problemas en Tomcat 8.5

Lo bueno

  • Sistema de registro, login, y envio de correo de reseteo de password
  • Registro y login con Facebook
  • ClusterMarker para Gmaps con PF.
  • Reescalado de imágenes con Scalr.
  • Subida de ficheros con PF.
  • Liquibase para versionar cambios en la BBDD.
  • Uso de Maven SQL para limpiar la bbdd local.
  • Encriptación básica de la contraseña.
  • Envío asíncrono de correos
  • Ejemplos de cron con Spring.
  • Uso de Prettyfaces para URLS permanentes y reescritura de URL
  • Iconos Fontawsome
  • EhCache para hibernate como cache segundo nivel
  • Multiidioma
  • Algunas cosas más

Lo Feo
No tiene ningún tipo de diseño o layout. Solo una disposición básica de cabecera, cuerpo y pie con ui:composition.

Lo Malo
Los Pom están algo desordenados. No está pensado para aplicaciones "serias". Falta de documentación y algunos ejemplos (con lightbox y gmap), se debe indagar un poco en los proyectos.

Si quereis echarle un vistazo se puede clonar de Github https://github.com/konum/wrex. En la wiki están los pasos necesarios para levantarlo.

Voy a estar trabajando en esto con algunas ideas nuevas (lo he retomado hoy después de dos años), por lo que se aceptan ideas y críticas.

Lecherito

Quita dozer anda, que es una basura como una casa

1 respuesta
DarkKonum

#2 ¿Que propones para evitar tener que hacer mapeos de entidades a DTOs? ¿Por que esa afirmación?

1 respuesta
Lecherito

#3 Porque todas esas librerias hacen uso de reflection en runtime para descubrir todas las propiedades de una clase y como tengas un objeto medianamente complejo la performance se te va a la mierda.

Porque encima si lo quieres configurar de una manera sencilla ya te tienes que ir a XML y tienes las cosas en dos sitios distintos, manda huevos que el XML se siga usando en pleno 2018.

Y lo peor de todo es que si quieres usarlo con su api, es mucho mas complicado que copiar el objeto a mano.

Para todo lo demas, Kotlin.

DarkKonum

Soy consciente de lo que comentas, pero no por eso es una basura. Para situaciones sencillas y alcance acotado facilita mucho la vida y evita tareas tediosas.

Lecherito

Ah, los buenos hacks temporales. Podrias haber empezado por ahi.

1 1 respuesta
DarkKonum

#6 Por tu comentario me he puesto a mirar y he reemplazado Dozer con Mapstruct (http://mapstruct.org/), que genera implementaciones de mapeo a partir de una interfaz en tiempo de compilación. Mapeando 10.000 objetos sencillos Mapstruct tarda 7 ms y Dozer 370, y lo único que se necesita es generar una interfaz por mapeo.

@Mapper
public interface UserMapper {
	UserMapper INSTANCE = Mappers.getMapper( UserMapper.class );
    
UserDTO userToUserDTO(User user); User userDtoToUser(UserDTO user); List<UserDTO> listToDTOList(List<User> source); }
Ranthas

¿Cuál es el punto de usar Spring 5 y JSF a la vez?

Supongo que aligerar la parte de diseño de frontend ya que luego te apoyas en Primefaces, pero vamos....es un overkill enorme pudiendo usar Thymeleaf y Bootstrap.

1 respuesta
DarkKonum

#8 Spring para inyeccion de dependencias, además de usar otros compenentes de Spring (Spring data, security, otros en el futuro). En cuanto a Primefaces, si no ando muy desactualizado, la más completa librería de componentes para JSF, lo que te permite prototipar y montar funcionalidades muy rápido y sin muchos quebraderos de cabeza.

Macum

Muy completo, está muy bien.
Pero yo utilizaría Spring Boot y orientado a microservicios con React o Angular. :grinning:

1 respuesta
DarkKonum

#10 entre los próximos pasos está spring boot y generar un proyecto adicional que exponga los servicios rest.

Creo que el frontend de jsf lo dejaré tal y como está, inyectando los servicios de Java directamente. Al fin y al cabo la idea original de wrex es poseer desarrollar algo rápido. La versión anterior no tenía ni dtos xD

Con los servicios rest expuestos es posible que me tire a agragegar otra alternativa a la vista, y JS es la que más me tienta. No tengo ninguna idea de desarrollo concreta, pero me entretiene configurar entornos y arquitecturas.

Usuarios habituales

  • DarkKonum
  • Macum
  • Ranthas
  • Lecherito