Pregunta

Actualmente estamos en el proceso de migrar nuestra aplicación de nuestro entorno de producción a un nuevo centro de datos.

  • Entorno de producción actual: Java 1.4, Java EE 3, WAS 5.1, JSF 2.1
  • Nuevo entorno de centro de datos: Java 1.5, Java EE 5, WAS 6.1, JSF 2.1
Nuestra aplicación se basa en JSF 2.1 y contiene el siguiente código en una de las llamadas AJAX:
request.getSession().getServletContext().getRequestDispatcher(
                    "/results.faces").include(request, response);
Y aquí es donde nos encontramos con problemas.

Caso 1: estructura EAR según las especificaciones estándar
. ORE - > GUERRA - > WEB-INF - > lib - > * .jar (todos los archivos específicos de la aplicación están bajo WEB-INF / lib). Esto no funciona y nos preocupamos por obtener excepciones para la clase que no encuentra el cargador de clases. Además, la llamada AJAX anterior falla (no se genera la salida)

Caso 2: EAR contiene todos los archivos JAR de la aplicación en la raíz (MANIFEST.MF tiene la ruta de clase especificada manualmente).
Este enfoque funciona perfectamente y todos los archivos JAR se cargan sin ningún problema. Por otra parte, la llamada AJAX también pasa bien.

Cualquier idea de por qué esto podría estar sucediendo.

- & nbsp; Ashish

¿Fue útil?

Solución

Sí, es porque los servidores de aplicaciones Java EE tienen una jerarquía de cargadores de clases que se parece a esto: primero se llama al cargador de clases bootstrap; El siguiente es el cargador de clases de nivel EAR, luego el cargador de clases de nivel WAR. Los cargadores de clases de nivel superior no buscarán a continuación las clases que necesitan. Si no encuentran lo que necesitan, se lanzará una excepción ClassNotFoundException.

Por lo tanto, los JAR en WEB-INF / lib no estaban visibles para el cargador de clases de nivel EAR. Cuando mueves esos JARs arriba resuelves el problema. También hace que todos los JAR sean visibles para todos los WAR en su EAR.

Una cosa que podría querer verificar es la especificación de su web.xml y otros archivos. Las especificaciones de servlet y JSP se modificaron en algún momento, por lo que los JAR como JSTL y demás pasaron de la versión 1.0 a la 1.1. Es posible que desee revisar cuidadosamente su web.xml y todos los JAR para asegurarse de que coincidan con las especificaciones admitidas por su servidor de aplicaciones Java EE.

Desafortunadamente, actualizar el servidor de aplicaciones no es tan fácil como enviar un EAR o WAR.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top