Pourquoi les méthodes OSGI BundleActivator sont déclarées avec « throws Exception »?
Question
Les deux méthodes de start
et stop
de OSGI BundleActivator sont déclarées par throws Exception
. En même temps, dans son livre Effective Java, deuxième édition, article 62, Joshua Bloch dit
ne déclarer une méthode "throws Exception"
Alors est-ce une décision de mauvaise conception dans BundleActivator
ou telle généralité est justifiée dans ce cas, et pourquoi?
La solution
S'il vous plaît noter que vous pouvez déclarer votre start
et les méthodes de stop
sans aucune clause de throws
. (Vous pouvez également déclarer ces méthodes avec des sous-classes de java.lang.Exception
.)
D'autre part, un particulier, par exemple
void start(BundleContext context) throws BundleActivatorException
méthode ne changerait pas trop. Il serait tout simplement fait attraper leurs implémenteurs à des exceptions et réémettre enveloppé dans un BundleActivatorException
. Étant donné que chaque exception rend inutile d'activation bundle ce bloc try-catch
est vraiment inutile, il est donc plus facile de jeter java.lang.Exception
.
Autres conseils
Lancer une exception à partir d'une méthode start()
ou stop()
indique que quelque chose ne va pas, et le changement du cycle de vie ensemble ne doit pas passer. Puisque nous séparons les préoccupations de détection de la situation (par le faisceau), et la manipulation (par le cadre), jetant Exception
est la seule chose raisonnable à faire.
Je considère le anachronique de conseils de Josh Bloch. Il n'y a rien de mal avec de throws Exception
. Il vous donne la possibilité de jeter tout exception que vous aimez, et le cadre OSGi va la traiter.
Notez que vous ne devez jamais invoquer ces méthodes vous.