Я предполагаю, что ваш пакет вошел в бесконечный цикл в своем методе BundleActivator.start
и, следовательно, завязал обратный вызов OSGi. Очевидно, это не то, что вы должны делать! У вас нет другого выбора, кроме как выключить JVM, возможно, принудительно.
Теперь проблема состоит в том, чтобы предотвратить повторный автоматический запуск пакета при следующем запуске OSGi. Самый простой способ обеспечить это — удалить каталог «storage», в котором OSGi запоминает список пакетов, запущенных в последний раз. К сожалению, расположение каталога хранилища зависит от свойства конфигурации, и вы не указали, как вы настроили OSGi. По умолчанию для Equinox используется configuration/org.eclipse.osgi
, поэтому попробуйте удалить его. Вы также можете попробовать запустить с -clean
.
Что касается того, как остановить пакет OSGi во время выполнения метода: вы, конечно, можете остановить пакет, и это приведет к выполнению его stop
метода. Вы можете делать в этом методе все, что хотите: в общем, вы должны стремиться очистить все, что вы создали в методе start
. Однако, если у вас есть неуправляемый поток, вы ничего не можете сделать, поскольку Java не предлагает способа убить поток, он предлагает только совместный метод interrupt
.
OSGi не может изменить фундаментальные правила Java, поэтому неуправляемые потоки представляют собой такую же большую проблему в OSGi, как и в любом другом приложении Java.
person
Neil Bartlett
schedule
23.07.2013