Tengo un módulo de complemento que va a una aplicación web. Si el módulo no se carga correctamente, no tiene sentido que la aplicación web continúe y la aplicación web probablemente no se cargue en absoluto, preferimos que este módulo se inicialice correctamente siempre. Si lanzo una excepción de tiempo de ejecución, entraría en los registros, y simplemente me ignorarán, ya que la aplicación continuará de todos modos, y los usuarios finales nunca sabrán ... Sé que los errores deben arrojarse solo bajo condiciones excepcionales, y generalmente tienen que ver con situaciones de las que el sistema no puede recuperarse, pero ¿qué harías en tal situación?¿Está bien lanzar un java.lang.Error?
Respuesta
El soloError
que he utilizado regularmente en el código comercial es ExceptionInInitializerError
. No tiene otra opción en los bloques de inicializador static
.
Pero incluso si lo lanza dentro de una aplicación web, la aplicación weba continuaría escuchando solicitudes HTTP. Su mejor opción es hacer la carga o inicialización del módulo dentro de un Filter
escuchando en un url-pattern
de /*
y dejar que el Filter
bloquee las solicitudes HTTP en consecuencia. P.ej.
private boolean allModulesAreLoaded;
@Override
public void init(FilterConfig config) {
try {
// Load modules.
allModulesAreLoaded = true;
} catch (Exception e) {
// Handle.
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (allModulesAreLoaded) {
chain.doFilter(request, response);
} else {
throw new ServletException("Not all modules are loaded.");
}
}
Esto produciría un error HTTP 500 con el mensaje dado.
No estoy seguro de cómo exactamente, pero OSGi obtuvo una administración de la dependencia de los paquetes (= similar a los complementos). Un paquete no se carga hasta que otro paquete esté listo. Tal vez puedas usar este mismo mecanismo (o simplemente usar OSGi mismo;)) para esperar un plugin/aplicación hasta que otro plugin esté listo. O apaga la aplicación durante el inicio si no puede encontrar/cargar su complemento correctamente.
Parece que el martillo de todos los clavos, sin embargo, siendo aficionado a OSGi, tiendo a aprobar. Además, cualquier tipo de mecanismo de administración de dependencias debería funcionar (IoC, lo que sea). – Riduidel
registrar el error, y luego usar System.exit a poco salir de la aplicación
No proporciona ninguna indicación (más allá del código de retorno) de por qué falló la aplicación. –
@HotLicks Agregué una sugerencia para registrar primero el error y luego salir. – Demi
- 1. ¿Está bien lanzar manualmente un std :: bad_alloc?
- 2. ¿Está bien lanzar un puntero que sea nulo?
- 3. ¿Está bien lanzar una excepción NotImplemented en métodos virtuales?
- 4. ¿Está bien lanzar un contenedor STL con tipo Base al tipo Derivado?
- 5. ¿Está bien derivar de System.ArgumentException?
- 6. ¿Está bien usar try catch inside finalmente?
- 7. ¿Está bien para los constructores lanzar excepciones de tiempo de ejecución?
- 8. memcacheD Esto está bien?
- 9. ¿Está bien liberar 'vacío *'?
- 10. ¿Está bien usar __doPostBack()?
- 11. ¿Cuándo está bien usar un IORef?
- 12. Formulario dentro de un formulario, ¿está bien?
- 13. ¿Está bien para static_cast un puntero void *
- 14. ¿Está bien dejar un canal abierto?
- 15. Está llamando a setTimeout con un retraso negativo ¿está bien?
- 16. ¿Este código está bien definido?
- 17. ¿Este código está bien definido?
- 18. ¿Está bien aún usar tablas?
- 19. ¿Está bien omitir "devolver ninguno"?
- 20. ¿Está bien con archivos binarios?
- 21. ¿Está bien pasar NULL a un parámetro de bloque?
- 22. ¿Está bien ejecutar código cuando importa un módulo?
- 23. ¿Está bien consultar un MongoDB varias veces por solicitud?
- 24. ¿Está bien tener un archivo .htaccess muy largo?
- 25. ¿Está bien tener código en la raíz de un proyecto?
- 26. ¿Está bien pasar un identificador de ventana nula a ShellExecute?
- 27. ¿Está bien utilizar una NSLocalizedString como clave en un diccionario?
- 28. ¿Está bien pasar parámetros a un método de Fábrica?
- 29. ¿Cuándo está bien usar un archivo XML para guardar información?
- 30. ¿Está bien que un método de fábrica devuelva nulo?
no debe ser un error, pero algunos subclase apropiada, ya sea existente o uno que defina. Pero lanzar una subclase de Error es apropiado en su situación. –