Sé que un contenedor de servlets, como Apache Tomcat, se ejecuta en una sola instancia de la JVM, lo que significa que todos sus servlets se ejecutarán en el mismo proceso.¿Los contenedores de servlet evitan que las aplicaciones web causen interferencia mutua y cómo lo hacen?
También sé que la arquitectura del contenedor servlet significa que cada aplicación web existe en su propio contexto, lo que sugiere que está aislada de otras aplicaciones web.
Como se representa aquí:
Aceptando que se aísla cada aplicación web, yo esperaría que usted podría crear 2 copias de una aplicación Web idéntica, cambiar los nombres y las rutas de contexto de cada uno (así como cualquier otra configuración relevante), y ejecutarlos en paralelo sin que uno afecte al otro. Las respuestas a this question parecen ser compatibles con esta vista.
Sin embargo, un colega no está de acuerdo con su experiencia al intentar justamente eso.
Tomaron una aplicación web e intentaron ejecutar 2 instancias separadas (con diferentes nombres, etc.) en el mismo contenedor de servlets y problemas experimentados con las 2 instancias en conflicto (no puedo elaborar más ya que no participé en ese trabajo).
En base a esto, argumentan que dado que las aplicaciones web se ejecutan en el mismo espacio de proceso, no se pueden aislar y cosas como los atributos de clase terminarían siendo compartidas inadvertidamente. This answer parecen sugerir lo mismo
Los dos puntos de vista no parecen ser compatibles, así que pregunto: Haz contenedores de servlets impiden que las aplicaciones Web desplegadas al mismo recipiente entren en conflicto entre sí?
Si sí, ¿Cómo lo hacen?
Si no, ¿Por qué ocurre la interferencia?
y finalmente, ¿En qué circunstancias podrían las aplicaciones web separadas entrar en conflicto y causar interferencia mutua?, ¿quizás escenarios que involucren recursos en el sistema de archivos, código nativo o conexiones de bases de datos?
+1 para ejemplos detallados para ilustrar su punto – chrisbunney