Play Framework vs Spring Framework

Buenas noches compañeros,

Les comento que en el trabajo, nuestro dia a dia es trabajar con Spring, practicamente todo el equipo de trabajo se siente bien con este framework.

El tema es que estan propopiendo un equipo externo empezar a trabajar con Play Framework, y ahi van mis preguntas: ¿Alguien tiene experiencia con Play Framework?, ¿ventajas y desventajas con respecto a Spring? ¿curva de aprendizaje? ¿Me conviene quedarme en Spring?.

Cualquier comentario es bienvenido.

Gracias de antemano.

Payara creando imagen productiva

La última parte de este pequeño ejemplo, es poner todo en conjunto y pues dejar la version que todo el mundo usará, para eso tendremos como dependencia a Docker. Asumo que ya lo tienes instalado. El proyecto web que creamos la vez anterior ya tiene un comando que nos permite crear los bundles finales tanto de css como de js. Desde la terminal y en la carpeta del proyecto Payara-client ejecutamos:

 

En la carpeta dist se crearan los archivos, se debe copiar todo el contenido incluido el html en la carpeta src/main/webapp del proyecto Payara-kotlin (importante: el proyecto Payara-kotlin usa localhost en la base de datos deberas actualizar la ip y puerto de la base en produccion). Ya que copiamos los archivos en la carpeta del proyecto Payara-kotlin desde la terminal ejecutamos:

 

Ahora bien necesitamos una carpeta nueva desde donde vamos a construir nuestra imagen docker. En la carpeta ponemos nuestro war que sale de ejecutar gradle war y agregamos dos archivos Dockerfile y .dockerignore el contenido de Dockerfile sera el siguiente:

 

Payara, Web content

Del post anterior pueden observar que tenemos 2 servicios que la idea es usarlos en al menos una pequeña aplicación web, esta estará creada con las siguientes dependencias:

  • Preact
  • Redux
  • Ramda
  • Less

Para ello tomaremos como base la plantilla que he creado para una aplicación React. . Las instrucciones de como usarla están en el README de ese repo.

Configurando el ambiente de desarrollo

La plantilla usa webpack como herramienta de construcción del sitio, pero solo nos enfocaremos a la parte puramente web, los servicios no estarán en Nodejs sino en nuestra aplicación que desarrollamos en Payara, pero no vamos a estar haciendo dos cambios en el código compilando y desplegando para ver que el cambio funciona, ya tenemos los servicios, entonces los dejamos corriendo en el server como si fuera un servidor de servicios cualquiera y crearemos la aplicación con webpack-dev-server.

Pero oh sorpresa, dos cosas importantes:

- La primera es que el servidor Payara hace un binding a la ip del servidor en el que inicias la aplicación

Payara, Kotlin y Mysql

Bueno comenzando la parte de los servicios vamos a tener básicamente dos endpoints uno para consultar preguntas y otro para insertar preguntas.

GET /services/questions/getAll
POST /services/questions/add

Por tanto creamos el archivo kotlin QuestionService en la carpeta question (primero crear la carpeta question), si no encontramos preguntas regresaremos 404, esto es a modo de ejemplo si quieres puedes regresar 200 y un array vacio es tu gusto y/o disenio, usaremos Gson como librería para parsear JSON a Kotlin y viceversa:

 

Payara Hello-World

Ya sabia que no iban a dejar morir así como así a JEE, ahora que ya es mas independiente de Oracle seguramente evolucionara mas rápido de lo que lo había hecho, uno de los primeros servidores que me llamo mucho la atención fue Glassfish, cuando fue lanzado era el mas avanzado en JEE en su momento, creo que lo sigue siendo ya que todas las especificaciones de JEE se crean primero ahi, aunque ya no tiene soporte por parte de una empresa como lo era entonces SUN, desde luego Oracle no iba a hacerlo competir con Websphere, tan caro que les salió comprarselo a BEA.

Pero bueno pasado es pasado y los servidores JEE parecería que solo seguirían vivos en los ambientes viejos y que pocas veces cambian como bancos o empresas de seguros (donde todavía se puede encontrar AS400 y muchas cajeros corriendo Windows XP). A quien le suena el requerimiento: queremos que la aplicación funcione con las tecnologías mas modernas pero en IE6 o IE7 ?

Middleware en Redux-mx

La parte que yo creo es mas interesante en la librería Redux es la creación de Middlewares y de ese modo extender Redux mas allá de lo que el equipo de Redux nos pueden ofrecer en la librería.

Esta funcionalidad se la agregue a mi pequeño clon, ahora se puede definir Middlewares que reciban el store (estado) y las acciones que se han lanzado, el ejemplo mas común es hacer un logger de las acciones. Este el ejemplo de este Middleware:

 

Como se puede ver tiene una firma muy parecida a el logger que viene en la documentación de Redux

 

Redux-mx

React es una herramienta que ha cambiado el desarrollo web y nos ayuda a recordar lo difícil que es controlar el estado de una aplicación, sobre todo si manejas hilos, llamadas asíncronas y muchos clientes simultáneos, a pesar de que una aplicación web no maneja hilos normalmente, tiene muchas interacciones entre el servidor, la acciones del usuario y en muchos casos timers que monitorean alguna actividad.

Debido a esta complejidad es que nació como arquitectura Flux y después Redux como librería que implementa la arquitectura Flux, Redux es tan bueno que casi casi se volvio la utileria por defecto para control de estado con React, su creador actualmente trabaja para Facebook mejorando React. Redux ha permitido que las aplicaciones sean predecibles y mas sencillas de desarrollar. No todas las aplicaciones lo necesitan pero a mi en lo personal me ha tocado el caso en el que lo necesitaba y no lo tenia (todavía no existía).

Odio las excepciones verificadas

De verdad que deberían haber eliminado por completo las excepciones verificadas para Java 8. Estorban. No es una coincidencia que casi todos los demás lenguajes de la JVM las eliminaron.

BEGIN RANT

Tengo una clase donde implemento un método abstracto más o menos así:

 

JAVA DEV DAY 2018

Hola, uno de los eventos mas grande de programacion esta de regreso en Guadalajara, tendra speakers internacionales y nacionales, el evento es todo el dia da link en el link para tener mas informacion

Capas en aplicacion Spring VS Java EE

He desarrollado en Java EE y Spring Boot.

como bien saben en gran variedad de empresas utilizas estas dos tecnologías,

Pero me surge una duda, que capas y tipos de clases pueden utilizarse en Ambas y cuales no?

Por ejemplo

En Java EE

En la capa de negocio he visto que utilizan el componente BO (Busines Object)

Mientras que en Spring Boot Service (@Service)

¿Es valido utilizar un MiClaseBO en Spring?
¿Es valido utilizar MiClaseService en Java EE?

Estas preguntas las hago por que últimamente he visto Service en Java EE y BO en Spring.

Me surge la duda de que tan valido sea utilizar estos componentes en las distintas tecnologías o es maña de los desarrolladores
de Java EE al pasarse a Spring seguir utilizando este tipo de componentes?

Por lo que entiendo ambos exponen Lógica de Negocio a la capa de Negocio.

ó se pueden usar ambos pero por ejemplo:

Controller invoca a Service
Service Invoca a DAO y BO
BO que tiene toda la logica de negocio.

¿Que tan buena practica puede ser esto?

Distribuir contenido