Estoy desarrollando una aplicación web Java. La aplicación se conecta a un índice Lucene. Creo una instancia singleton de IndexSearcher. Esta instancia abre algunos archivos. Cuando vuelvo a desplegar la aplicación web, los archivos abiertos por la instancia anterior de IndexSearcher continúan abiertos y la aplicación redistribuida crea otra instancia. Después de algunas reubicaciones, el sistema comienza a arrojar una excepción de "demasiados archivos abiertos". Me gustaría cerrar la instancia anterior antes de volver a desplegarla, para que los archivos antiguos estén cerrados, pero no puedo encontrar la manera de hacerlo. ¿Existe una directiva en web.xml que se invoque al deshacer implementación, similar a load-on-startup? Estoy ejecutando la aplicación web en un servidor jboss.Método de llamada en undeploy desde una aplicación web Java
8
A
Respuesta
17
Implemente un ServletContextListener
.
@WebListener
public class LuceneConfig implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Do your job here during webapp startup.
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// Do your job here during webapp shutdown.
}
}
Si no estás en Servlet 3.0 todavía (que ya se encuentra a cabo durante 2 años sin embargo), entonces usted necesita para eliminar la anotación @WebListener
y registrar manualmente en web.xml
de la siguiente manera:
<listener>
<listener-class>com.example.LuceneConfig</listener-class>
</listener>
2
Si implementa javax.servlet.ServletContextListener
y registra esa clase en web.xml
como <listener>
, se llamará al método contextDestroyed()
antes de que se descargue el contexto.
Cuestiones relacionadas
- 1. XML desde una llamada de servicio web
- 2. Tomcat undeploy no elimina artefactos de aplicaciones web
- 3. Método de llamada de Android desde otra aplicación
- 4. Soporte de hardware desde una aplicación web
- 5. Ejecutar el método principal de Java desde una aplicación de escritorio Java en una JVM diferente
- 6. Ejecutar una aplicación web java en IIS
- 7. WPF Método de llamada desde un DataTrigger
- 8. código Lisp llamada desde Java
- 9. php requiere una llamada de clase desde el método interior
- 10. Buscar nombre de sitio web desde una aplicación web
- 11. Ver anotaciones Java en una llamada al método
- 12. ¿Qué significa WEB-INF en una aplicación web Java EE?
- 13. contestar la llamada entrante desde mi aplicación
- 14. Autenticación del servicio web ASP.NET desde una aplicación para iPhone
- 15. Imprimir en una impresora cliente desde una aplicación web
- 16. Iniciar una aplicación de escritorio desde un sitio web
- 17. Método de llamada desde diferente archivo de Python
- 18. Método de instancia de llamada desde un constructor en C#
- 19. Cómo acceder al método Java en una aplicación C++
- 20. Aplicación web Java i18n
- 21. cómo cargar una imagen desde la web en java
- 22. Llamar al método web de una página desde javascript en una página diferente
- 23. ¿Es posible llamar al método dentro de una aplicación Java desde una JVM diferente?
- 24. ¿Cómo obtengo una notificación de escritorio desde una aplicación web?
- 25. Ejecutar una aplicación Java en una página web
- 26. ¿Puedo hacer una llamada desde HTML en Android?
- 27. Prueba de una llamada al método asíncrono
- 28. llamada de método Ajax
- 29. C# Threading Issue en una aplicación web
- 30. Controlar un dispositivo USB desde una aplicación web
Funciona aquí sin registrarlo. Usando Mojarra 2.3.3 en Payara 4.1 (173 compilación). – Roland
Seguro que funcionará bien. Payara 4.x está basado en Servlet 3.1. Entonces el '@ WebListener' funcionará bien. Como se respondió, no funcionará cuando todavía no tengas Servlet 3.0. La versión/imp/JSF es irrelevante ya que no juega un papel aquí. Solo la versión de Servlet es relevante. – BalusC
Gracias por dejarlo en claro. – Roland