¿Por qué los métodos de BundleActivator OSGI se declaran con "excepción de lanzamiento"?
Pregunta
Ambas cosas start
y stop
Métodos de OSGI Bundleactivador son declarados con throws Exception
. Al mismo tiempo, en su libro Efective Java, segunda edición, ítem 62, dice Joshua Bloch
Nunca declare un método "Excepción de lanza"
Entonces, ¿es una mala decisión de diseño en BundleActivator
¿O tal generalidad está justificada en este caso y por qué?
Solución
Tenga en cuenta que puede declarar su start
y stop
Métodos sin ninguno throws
cláusula. (O puede declarar estos métodos con cualquier java.lang.Exception
subclases)
Por otro lado, un específico, por ejemplo
void start(BundleContext context) throws BundleActivatorException
El método no cambiaría demasiado. Acabaría de que los implementadores atraparan sus excepciones y retrocedieran dentro de un BundleActivatorException
. Dado que cada excepción hace que la activación del paquete sea inútil esto try-catch
el bloque es realmente innecesario, por lo que es más fácil de lanzar java.lang.Exception
.
Otros consejos
Lanzar una excepción de un start()
o stop()
El método indica que algo está muy mal, y el cambio del ciclo de vida del paquete no debería pasar. Dado que separamos las preocupaciones de detectar la situación (por el paquete) y manejarla (por el marco), lanzando Exception
es lo único razonable que hacer.
Considero el consejo de Josh Bloch anacrónico. No hay nada de malo en throws Exception
. Le brinda la opción de lanzar cualquier excepción que desee, y el marco OSGI lo manejará.
Tenga en cuenta que nunca necesita invocar estos métodos usted mismo.