Necesito guardar algunos datos preferiblemente cuando se detiene la aplicación java web, o cuando se detiene tomcat. ¿Cómo se puede hacer esto? Editar: cualquier inconveniente si utilizo el gancho de cierre jvm?shutdown hook para la aplicación web java
Respuesta
utilizar una clase que implementa ServletContextListener en su web.xml:
<web-app>
<!-- Usual stuff here -->
<listener>
<listener-class>com.mycompany.MyClass</listener-class>
</listener>
</web-app>
¿Por qué quiere hacerlo específicamente durante el apagado? ¿Y realmente necesita para guardarlo (como en "¿es absolutamente crítico?") O ¿podría como para (como en "estaría bien pero viviré sin él")?
La distinción es importante - no importa qué método se intenta (oyente servlet/contexto como sugieren otras respuestas o JVM shutdown hook) hay hay garantías que en realidad será invocado.
Los eventos de destrucción del detector de escuchas/servlets/contextos solo se desencadenarían durante el apagado normal (correcto) del contenedor O durante la recarga de la aplicación. El gancho de cierre de JVM también se activaría durante la interrupción del proceso; sin embargo, matar un proceso (o cortar el poder) obviamente no desencadenaría ninguno.
Está en la categoría "Sería bueno pero viviré sin él". Necesito guardar un montón de estados de servidores que mi aplicación está tratando de conectar a un archivo (no db) cuando la aplicación se apaga y luego volver a cargar esta información cuando la aplicación se inicia de nuevo. Si mi aplicación intenta conectarse a un servidor y está inactiva, la marca como inactiva para que no tenga que volver a intentarlo. Dado que las consultas suceden con frecuencia, solo marco estos estados en la memoria, no en el archivo. Por lo tanto, cuando la aplicación se cierre, sería bueno recordar qué servidores están caídos. – user121196
Me estoy inclinando hacia ServletContextListener o JVM hook – user121196
No utilice un enlace JVM: eso es más para Tomcat mismo o para aplicaciones de escritorio. Definitivamente debería preferir un ServletContextListener sobre un enlace JVM. –
Sugiero usar ehcache para almacenar en caché esta información. Si usa el almacén persistente de ehcache, cuando inicie Tomcat nuevamente, los datos en caché seguirán estando disponibles.
En efecto, esto delega el problema a ehcache, que está optimizado para este tipo de problemas.
Como complemento a la respuesta de leonm:
Si utiliza primavera, se puede utilizar "la gestión del ciclo de vida" de la primavera para lograr un efecto similar. Por ejemplo, puede anotar un método en un bean con @PreDestroy
para que se invoque automáticamente al apagar el contenedor. De esta forma, no necesita poner nada en el web.xml
.
- 1. ¿Cuál es la forma correcta de agregar un Shutdown Hook para una aplicación Eclipse RCP?
- 2. Cómo obtener shutdown hook para ejecutar en un proceso iniciado desde Eclipse
- 3. Shutdown ExecutorService correctamente en webapp?
- 4. Aplicación web Java i18n
- 5. Aplicación web Java para 5000 ~ usuarios
- 6. mejores prácticas de la aplicación web java
- 7. ¿Cómo implementar la aplicación web openId java?
- 8. ¿Cuáles son los pasos para depurar la aplicación web Java?
- 9. ¿cuál es el mejor alojamiento para la aplicación web java?
- 10. ¿Qué es la aplicación web Java EE?
- 11. Convertir Java Swing a la aplicación web
- 12. Ada Shut Hook
- 13. Subversion Hook
- 14. Gráficos interactivos para la aplicación web
- 15. Tutorial para Django CMS App Hook
- 16. Logging Cambios de la entidad en la aplicación web Java
- 17. Instalador para la aplicación Java
- 18. Hook processes
- 19. ¿Cómo configurar un icono para una aplicación web en Java?
- 20. ¿Cómo crear un archivo JNLP para una aplicación web java?
- 21. Desarrollo de proyectos de aplicación web Java para dos clientes
- 22. Uso de Maven para crear una aplicación Java Web Start
- 23. ¿Cómo crear un paquete Debian para mi aplicación web Java?
- 24. Cómo establecer un parámetro para una aplicación web Java
- 25. ¿Cómo puedo proteger mi aplicación web java?
- 26. Arquitectura para la nueva aplicación web ASP.NET
- 27. Usando Python para desarrollar la aplicación web
- 28. Interfaz web para la aplicación Windows Forms
- 29. ¿Qué significa WEB-INF en una aplicación web Java EE?
- 30. Ejecutar una aplicación web java en IIS
** Incluso más fácil ahora ... ** La anotación ['@ WebListener'] (http://docs.oracle.com/javaee/7/api/javax/servlet/annotation/WebListener.html) se agregó a [Servlet 3.0 espec] (https://jcp.org/en/jsr/detail?id=315) ahora le ofrece este comportamiento sin la molestia de editar el archivo web.xml. Ver esta iluminadora [respuesta de BalusC] (http://stackoverflow.com/a/9186070/642706). –