Как я могу получить уведомление, когда пакет генерирует исключение во время выполнения ОСГИ? (равноденствие гелиос)
Если пакет вызывает исключение в OSGI, трассировка стека печатается на консоли OSGI. Я хочу получать уведомления, если пакет создает исключение. Я думал, что использование службы регистрации osgi может помочь в этом. Однако я не мог заставить его работать под Гелиосом.
Вопрос в том, как я могу получить уведомление, если пакет вызывает исключение в osgi Helios.
Или, если osgi logging работает, как я могу заставить osgi logging работать в Helios? Насколько я гуглил, по-видимому, в настоящее время не реализована служба входа в систему osgi, интегрированная в helios. Я загрузил equinox skd 3.6 с сайта eclipse, который содержит комплект org.eclipse.equinox.log, однако я мог добавить его в качестве зависимости от моих плагинов или установить во время выполнения osgi.
Любая помощь очень ценится.
2 ответа
Пакет может вызвать исключение только при его вызове. Это почти всегда, когда какой-то другой пакет вызывал один из ваших опубликованных сервисов, или потому что пакет получил обратный вызов от платформы, такой как BundleActivator.start()
,
В первом случае у OSGi нет абсолютно никакой возможности узнать, что произошло исключение! Сервисные вызовы - это прямые вызовы методов между двумя объектами, которые не передаются и не передаются через инфраструктуру OSGi. Поэтому, если вы хотите узнать об исключении, вы должны перехватить его в вызывающем коде.
Во втором случае обратные вызовы происходят из-за того, что какой-то пакет заставил их произойти. Например, пакет будет запущен, потому что какой-то другой пакет называется Bundle.start()
, В этом случае исключение выдается из BundleActivator.start()
метод будет обернут в BundleException
это может быть поймано вызывающим кодом.
Так что на самом деле все зависит от вашего кода, если только у вас нет сторонних пакетов, которые вызывают ваши службы или запускают / останавливают ваши пакеты (например, веб-консоль или оболочка типа GoGo). В этом случае дело до стороннего кода. В большинстве случаев они должны отправлять сообщения в LogService, поэтому вы должны установить пакет журналов в вашу среду.
Вы сказали, что не можете установить пакет журналов, но не сказали, почему он вышел из строя, что это за сообщение об ошибке и т. Д.! Такого рода информация важна, если вам нужна помощь в решении проблемы.
Вы можете попробовать Pax Logging и пользовательское приложение Log4J - Pax Logging предоставляет реализации OSGi LogService и т. Д., А также обертки для распространенных каркасов журналирования.
Вы хотите сделать это исключительно для регистрации / уведомления об исключениях, или есть какая-то другая причина? UncaughtExceptionHandler может быть тем, что вы хотите, если это случай управления собственным или упакованным кодом.