Ejecutar webapps en procesos separados

Me gustaría ejecutar un contenedor web donde cada aplicación web se ejecuta en su propio proceso (JVM). Las solicitudes entrantes son enviadas por una aplicación web proxy que se ejecuta en el puerto 80 a aplicaciones web individuales, cada una (aplicación web) se ejecuta en su propio puerto en su propia JVM.

Esto resolverá tres problemas:

  • Las aplicaciones web que usan JNI (donde el código JNI cambia entre reinicios) no se pueden reiniciar. No hay forma de garantizar que la aplicación web anterior se haya recolectado como basura antes de cargar la nueva aplicación web, por lo que cuando el código invoca System.loadLibrary (), la JVM arroja:java.lang.UnsatisfiedLinkError: Native Library x already loaded in another classloader.
  • Las bibliotecas pierden memoria cada vez que se recarga una aplicación web, lo que finalmente obliga a reiniciar el servidor completo. Tomcat ha avanzado en la solución de este problema, pero nunca se solucionará por completo.
  • Reinicios más rápidos. El mecanismo que propongo permitiría reiniciar aplicaciones web casi instantáneas. Ya no tenemos que esperar a que la aplicación web anterior termine de descargar, que es la parte más lenta.

He publicado un RFE aquí y aquí . Me gustaría saber lo que piensas.

¿Algún contenedor web existente hace esto hoy?

Respuesta 1

Estoy cerrando esta pregunta porque parece que me he topado con un callejón sin salida: http://tomcat.10.n6.nabble.com/One-process-per-webapp-td2084881.html

Como solución alternativa, estoy lanzando manualmente una instancia de Jetty separada por aplicación web.

Respuesta: 2

¿No puede simplemente implementar una aplicación por contenedor y luego usar entradas DNS y servidores proxy inversos para hacer exactamente lo mismo? Creo que Weblogic tiene algo como esto en forma de dominios administrados.

Respuesta: 3

No, AFAIK, ninguno de ellos lo hace, probablemente porque los contenedores web de Java enfatizan seguir la API de servlet, que se divide en un hilo por solicitud http. Lo que quieres sería una bifurcación en el nivel JVM, y eso simplemente no es un idioma estándar de Java.

Respuesta: 4

He creado un archivo usando java, con el siguiente código String Filecontent = "hei"; creando archivo PrintWriter writer = new PrintWriter ("D: // balanworkspace // Coretest // Corejavatest // src // intvquestest // ...

Hoy leo mucho sobre Docker, incluso intenté ejecutarlo en mi computadora portátil con Vagrant. Pero aún no estoy claro por qué y especialmente cómo presentarlo a mi equipo. Es solo que no veo el uso ...

Estoy tratando de implementar una ordenación rápida en Java. Sin embargo, estoy experimentando un comportamiento extraño. Mi algoritmo funciona para 70 elementos o menos, pero todo lo anterior hace que toda la aplicación de Java se congele. es esto es ...

Tengo una herramienta de análisis de código que marca el LinkedHashSet <String> widgetsToCreate = new LinkedHashSet <String> (); línea en el método a continuación, cualquier idea sobre una forma de arreglar la lógica que ...