Pregunta

di con este comportamiento desagradable en JBoss 4.2 en el control de calidad, y quiero cortar de raíz antes de entrar en la producción y encontrar algún otro caso esquina.

A JSP calles un método que tenía la siguiente firma:

 public void methodName(String arg)

Esto fue cambiado a:

 public void methodName(String arg, Object... args)

A JSP preexistente llama a este método a través de:

 methodName("param");

El despliegue del código modificado, JBoss no vuelva a compilar la página JSP y esto provocó un accidente en el control de calidad. Adición de un comentario tonto al JSP solucionado el problema (JBoss reconoce que la JSP cambia y vuelve a compilar él).

¿Hay un ajuste en JBoss para forzar la recompilación de JSP en el reinicio?

EDIT: Para aclarar algunos puntos en la respuesta, la configuración es que las JSP son parte de una guerra que es parte de una oreja. El oído tiene todas las clases en el mismo, en un frasco.

En cuanto al deseo de pre-compilar, si el sistema no cree que el JSP necesita compilación, se pre-compilar recompilación la fuerza? No parece tan. El error aquí no es un error de compliation, es un error de invocación de método debido a la "transformados" (a nivel de código de bytes, no realmente a nivel de código) método de firma.

Adición: Tenga en cuenta que hemos experimentado en la producción recientemente que incluso con la bandera de la respuesta aceptada establece las JSP no vuelva a compilar, a pesar de que la JSP hizo cambiar, de hecho. Bug grave por allí, pero a pesar de JBoss fue cerrado normalmente. En este punto es llegar a ser una versión antigua de JBoss, pero si usted todavía está utilizando, borrar el contenido de los directorios de trabajo y tmp es la única manera de estar seguro.

No voy a cambiar la respuesta aceptada simplemente porque realmente llega al punto de lo que la pregunta estaba buscando. JBoss insectos son una especie de un tema aparte.

¿Fue útil?

Solución

Si las páginas JSP son parte de una guerra que es parte de una oreja que está siendo desplegado como un frasco, entonces no estoy claro por qué las JSP no se vuelven a compilar. No las JSP en el archivo de la guerra han nuevas marcas de tiempo que sus archivos de clase compilados-JBoss desde el último despliegue? Si no es así, no se puede tocar el JSP como parte de la construcción de la WAR / EAR antes de implementar. [Me refiero al uso del comando Unix "toque", no tocar manualmente cada archivo JSP.]

Por otra parte, el ajuste en DeleteWorkDirOnContextDestroy $ JBOSS / server / default / deploy / jboss-web.deployer / META-INF / jboss-service.xml puede ser lo que buscas. Es falso por defecto, pero que con true puede ser lo que necesita. Creo que esto debería eliminar archivos de clase de los JSP en redeploy para que puedan obtener recreados en el primer acceso de cada JSP.

https://jira.jboss.org/jira/browse/JBAS-3358 para obtener más información.

Otros consejos

No sé de un ajuste, pero eliminando el archivo de clase Java generado en el directorio de trabajo de la instancia de JBoss que se ponga el JSP que volver a compilar la próxima vez que se llama.

Se desvivían modificar los scripts de inicio de JBoss para eliminar explícitamente el "tmp" y / o directorios de "trabajo", donde se almacenan las páginas JSP compilados. JBoss tendría entonces más remedio que volver a compilar todos ellos.

No es sutil, pero sería hacer el trabajo.

Una opción para usted sería para precompilar todos sus JSP en tiempo de compilación. Esto sería rápidamente Marca los errores de compilación.

También puede hacer esto en la producción - la aceleración de primer acceso, pero tengo la sensación de que desea esto más de una etapa de control de calidad que cualquier otra cosa. Si es así, usted podría agregar el paso de compilación previa a la fase de pruebas de su en su herramienta de construcción de elección - y por lo tanto a su entorno de CI. Esto proporcionaría seguridad de que JSP de que no compilan no lo hará de prueba.

Vea este para obtener más información sobre la ejecución de una tarea de compilación previa:

configuración Jboss Jasper

Espero que esto ayude.

Algunos contenedores JSP (como por sección 8.4.2 de la especificación JSP 1.2) apoyar la capacidad de precompilar un página JSP.

Para precompilar una página JSP, acceder a la página con una cadena de consulta de? Jsp_precompile

http://hostname.com/mywebapp/mypage.jsp?jsp_precompile

No se ejecutará a la página JSP. Si el recipiente es compatible con la compilación previa, la página JSP se compila si es necesario.

http://www.rgagnon.com/javadetails/java-0414 .html

Pablojim está en el camino correcto. Sólo se necesita un poco más de información para obtener una visión completa de lo que está pasando. Así es como yo lo entiendo.

En prod, que ha cambiado de una JSP que requiere otras JSP que volver a compilar. A fin de que volver a compilar una de 2 cosas debe suceder

  1. La versión compilada de la JSP necesita ser eliminado.
  2. El JSP en sí tiene que ser modificado (o incluso si es "tocado" - fecha de modificación se actualiza)

Si usted todavía tiene que verificar que todas las JSP de trabajo, todos ellos tienen que ser precompiled utilizando una tarea de hormiga . esto también le permite desplegar el archivo de la guerra con las JSP precompilados en el archivo de la guerra. Esto debería resolver su problema.

Si los archivos no se despliegan en un archivo de la guerra, pero en un formato expandido, que debiera considerar seriamente la posibilidad de empaquetar la aplicación web en un archivo de la guerra para la implementación. Esto hace que sea un buen paquete para desplegar entre los ambientes.

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