Publicado el Dejar un comentario

Microservicios

Las grandes empresas que dan servicios en la nube como Netflix, Amazon y muchas más están usando y/o migrando a Microservicios.

¿Que son los Microservicios? Los Microservicios son un patrón de Arquitectura de Sofware, es decir, una forma de cómo “construir” nuestras aplicaciones de software.

Por lo general nuestra aplicación web, desarrollada en java, la “empaquetamos” en un sólo paquete (válgame la redundancia), al que llamamos archivo .war y  que más adelante lo instalamos o desplegamos en nuestro servidor de aplicaciones. En ese único paquete van todas nuestras entidades, servicios, conexiones a base de datos, etc.; todos los objetos que conforman las diferentes capas que conforman nuestra aplicación web. Utilizamos lo que se llama una Arquitectura Monolítica.

Con la llegada de la computación en “la Nube” la Arquitectura Monolítica de las aplicaciones web empezó a ser ineficiente. A la hora de asignar más recursos computacionales y escalar este tipo de aplicaciones resultaba costoso. En ocasiones es necesario, por ejemplo, escalar sólo un proceso de nuestra aplicación y no toda la aplicación en su conjunto.

Con los Microservicios se divide la aplicación en piezas funcionales y desacopladas, donde cada una de esas piezas es una aplicación y se despliega o se instala independientemente de la otra. De esta forma se puede escalar y asignar recursos sólo una de estas aplicaciones que lleva a cabo una función específica dentro del sistema y no todas en su conjunto.

Para una explicación más detallada de lo que son los microservicios y para qué sirven, te recomiendo este sitio.

¡Saludos!

 

Publicado el Dejar un comentario

java.lang.IllegalStateException: getOutputStream() has already been called for this response. Glassfish 4.1.1.

Desde hace un tiempo, utilizo Glassfish como servidor de aplicaciones en mis desarrollos web con Java. Sin embargo en el proyecto que actualmente trabajo, al descargar la última versión y querer añadir un nuevo pool de conexiones, la consola de administración gráfica de Glassfish 4.1.1 me arroja el siguiente error:

java.lang.IllegalStateException: getOutputStream() has already been called for this response.

Buscando la causa me encuentro que es un bug en esta nueva versión de Glassfish que aún no ha sido resuelto. Hay que recordar que Oracle dejó de dar soporte sobre este producto y por lo tanto, las correcciones de errores son más lentas que antes. En el misma dirección donde se reporta este bug se indica algunas soluciones.

Dentro de las soluciones, me enteré que existe una empresa que ha empezado otro desarrollo en base al código de Glassfish y realiza funciones de mantenimiento más prontas: Payara Server. Lo he descargado y funciona perfectamente hasta el momento. De ahora en adelante utilizaré este servidor de aplicaciones en futuros desarrollos.

¡Felices fiestas!

(Por favor visita a los patrocinadores).

 

Publicado el Dejar un comentario

Aplicación con Hibernate 5 no puede ser instalada en Glassfish 4.1.1.

No es posible hacer el deploy de una aplicación que contiene las librerías de Hibernate 5.0.3 a Glassfish 4.1.1. En ell archivo log manda el siguiente error grave:

Grave:   java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
	at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149)
	at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:764)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:495)
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
	at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135)
	at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:199)
	at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:107)
	at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:223)
	at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
	at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:230)
	at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:925)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:434)
	at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
	at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:360)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:360)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
	at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
	at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
	at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
	at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
	at java.lang.Thread.run(Thread.java:745)
Grave:   Exception while preparing the app
Grave:   Exception during lifecycle processing

El problema es la incompatibilidad de versiones de la librería jboss-logging.jar que usan dichas versiones de Hibernate y Glassfish. Reemplazando la librería jboss-logging.jar que se encuentra en glassfish/modules  con la librería versión 3.3.0 (jboss-logging-3.3.0.Final.jar) se soluciona el problema.

¡No olvides dar click en los anuncios!

¡Saludos!