¿Cómo puedo hacer que un ServletContextListener detenga la aplicación Java EE?

Tengo un ServletContextListener que realiza algunas funciones de administración de bases de datos cuando se inicia mi aplicación Java EE. Esto se ejecuta en mi aplicación antes de que se inicien / carguen JPA y otras partes de la aplicación. Si el mantenimiento de la base de datos falla, estoy registrando los errores. Si el mantenimiento de la base de datos falla, la aplicación no funcionará correctamente y me gustaría detener la aplicación.

¿Cómo puedo detener la aplicación de forma correcta y correcta desde ServletContextListener.contextInitialized?

La solución dada por Viven a continuación está cerca pero no del todo. Cuando lanzo una RuntimeException Glassfish se deja en un estado inconsistente donde su consola de administración no es accesible pero todavía se está ejecutando algún proceso y mantiene abierto el puerto 3700 (IIOP?), Lo que impide un reinicio.

Respuestas a la pregunta(2)

Su respuesta a la pregunta