Почему методы OSGI BundleActivator объявляются с "исключением бросков"?
Как start, так и stop методы OSGI  BundleActivator объявляются с помощью throws Exception. В то же время в своей книге Effective Java, второе издание, пункт 62, Джошуа блох говорит 
Так является ли это плохим проектным решением вНикогда не объявляйте метод "выбрасывает исключение"
BundleActivator или такая общность оправдана в данном случае и почему?3 ответа:
Обратите внимание, что вы можете объявить свои методы
startиstopбез какого-либо предложенияthrows. (Или вы можете объявить эти методы с любыми подклассамиjava.lang.Exception.)С другой стороны, конкретный, например
void start(BundleContext context) throws BundleActivatorExceptionМетод не слишком изменится. Это просто заставило бы разработчиков перехватывать свои исключения и перестраивать их, завернутые в
BundleActivatorException. Поскольку каждое исключение делает активацию пакета бессмысленной, этот блокtry-catchдействительно не нужен, поэтому его проще броситьjava.lang.Exception.
Выбрасывание исключения из метода
start()илиstop()указывает на то, что что-то серьезно не так, и изменение жизненного цикла пакета не должно проходить. Поскольку мы разделяем проблемы обнаружения ситуации (по связке) и обработки ее (по структуре), бросаниеExceptionявляется единственным разумным действием.