Estoy construyendo un sistema de actualización en el que necesito poder reemplazar un contenedor referenciado de un contenedor de aplicación en ejecución en tiempo de ejecución. Sin embargo, me estoy encontrando con problemas de bloqueo de archivos en Windows cuando intento realizar funciones de utilidad de archivos en el contenedor como 'setLastModified'.Intercambio de un contenedor en ejecución en el tiempo de ejecución
Después de algunas google me encontré con este fragmento ...
Lo que encontré en mi investigación es que el estándar de cargador de clases aplicación nunca se cierra un archivo jar una vez que se ha abierto. También solo carga recursos del archivo jar según sea necesario. Por lo tanto, en cualquier momento particular, , puede haber clases en el archivo jar que no se hayan cargado en la memoria. Obviamente, si elimina el archivo jar de debajo del ClassLoader, y intenta encontrar un recurso en el archivo que falta , obtendrá una IOException como mínimo.
¿Alguien tiene alguna referencia a información sobre cómo hacerlo o sobre cómo solucionar este problema?
Gracias.
¿Necesita reinventar la rueda? OSGi ya tiene una implementación en caliente. Eche un vistazo y vea si puede usar eso en su lugar. – SteveD
OSGi suena abrumador para la mayoría de los requisitos, eche un vistazo a esta respuesta http://stackoverflow.com/a/2463978/320594 –
Después de volver a leer, parece que desea mantener su aplicación en ejecución, pero con los nuevos tarros ... entonces OSGi realmente parece una buena solución :), por ejemplo, Eclipse lo permite (los complementos se vuelven a cargar durante la ejecución) y usa OSGi para eso (mientras yo sepa). –