2011-11-28 12 views
15

Acabamos de descubrir que cada vez que reiniciamos JBoss, todos nuestros clientes de Java Web Start vuelven a descargar todos sus archivos jar, en lugar de reutilizarlos, incluso si nuestra aplicación no ha cambiado.¿Por qué Java Web Start vuelve a descargar jar de JBoss?

Por lo que he visto en la web, Java Web Start hace una HEAD HTTP para decidir si se descarga o no un jar. Así que ejecuté HTTP HEAD en todos los archivos jar de nuestra aplicación, y descubrí que después de reiniciar JBoss, el tiempo modificado de todos los archivos ha cambiado.

¿Por qué es esto y cómo puedo solucionarlo? Los frascos dentro de los archivos de mi aplicación no han cambiado en absoluto. Por lo que puedo decir, JBoss usa el tiempo de inicio o el tiempo de implementación como el tiempo modificado. Esto va a cortocircuitar por completo la capacidad de Java Web Start de utilizar los archivos guardados en caché de las ejecuciones anteriores, si entiendo correctamente.

Utilizamos JBoss 6, si eso es un problema. Previamente utilizamos JBoss 4. Quiero verificar si tenemos el problema bajo JBoss 4, pero ahora tenemos tantas dependencias en el JBoss más nuevo que va a tomar algún trabajo hacer que esa prueba suceda.

+0

¿Has probado configurar Tomcat fuera de JBoss y poner tu aplicación de webstart allí? ¿Lo que pasa? ¿Informa diferentes veces después de cerrar el tomcat? – chubbsondubs

Respuesta

3

Intente desplegar su aplicación como una aplicación web explotada en lugar de un archivo WAR.

Eso evitaría que JBoss tenga que descomprimir la aplicación y potencialmente estropear las fechas de modificación.

Tendrá que manejar las actualizaciones de su aplicación de una manera que preserve las fechas de modificación, por ejemplo, rsync, pero eso podría ser más fácil que la degradación o el parcheo de JBoss.

+0

Guau, no estoy seguro de lo que está haciendo JBoss con mi oreja y guerra explotadas, pero tardó tres minutos sin decir nada, y luego lanzó una excepción cuando se quedó sin espacio permgen! – skiphoppy

+0

Para algunas versiones de JBoss, el nombre del directorio explotado debe terminar con '.war' o' .ear' según corresponda. ¿Estás haciendo eso? – blahdiblah

+0

No, estaba cometiendo otro error estúpido que corregí esta mañana, ¡y resulta que esto funciona! ¡Gracias por una solución simple y concisa! :) – skiphoppy

2

Parece que VFSUtils no mantiene el archivo lastModifiedDate cuando monta el sistema de archivos en el directorio tmp al inicio del servidor. Puede aplicar un parche a los métodos de copia en esa clase para tratar de establecer la marca de tiempo del nuevo archivo en función de los valores del archivo físico.

Como respuesta al comentario de chubbard: el problema no ocurre con Tomcat (tomcat 7.0.21 para ser precisos).

0

Existe un problema (https://issues.jboss.org/browse/JBVFS-177) creado sobre VFSUtils.unzip() que no conserva las marcas de tiempo durante la implementación (sigue siendo aplicable a JBoss 6.1).

Como el problema está relacionado con el método de descompresión, la solución de blahdiblah puede funcionar.

Otra forma sería utilizar Java Web Start con una versión basada (Modificación de jnlp con versionEnabled y creación de una versión.xml).

Cuestiones relacionadas