Любой способ сделать связку требуется с Knoplerfish? - PullRequest
0 голосов
/ 12 июля 2011

Есть ли способ прервать запуск Knoplerfish, если конкретный пакет не инициализируется? По умолчанию FrameworkErrorEvent выводится на консоль, и платформа продолжает загружаться.

init.xargs

-initlevel 80
-istart my-required-bundle.jar

консольный вывод

[stdout] Installed and started: file:jars/my-required-bundle.jar (id#34)
[stdout] ## DEBUG: errors - FrameworkErrorEvent bundle #34
[stdout] ## DEBUG: errors - FrameworkErrorEvent throwable:
[stderr] org.osgi.framework.BundleException: BundleActivator start failed

1 Ответ

0 голосов
/ 13 июля 2011

Нет стандартного способа OSGi, чтобы сделать это, так как нет стандартного способа сообщить платформе, какие пакеты устанавливать (вплоть до модуля запуска). Также нет стандартного способа получать уведомления об этом событии, поэтому вы можете действовать по нему. Если Knopflerfish не предоставляет определенного системного свойства или чего-то подобного для этого, я вижу два пути, по которым вы могли бы пойти.

  • Создайте свой собственный лаунчер. Создайте org.knopflerfish.framework.Main, настройте его (в этом файле содержится некоторая информация) и установите пакеты, получив BundleContext из инфраструктуры. Затем вы можете поймать BundleException s, которые исходят от метода start() пакета, и прервать запуск, когда он имеет тип RESOLVE_ERROR.
  • Создайте пакет, который ожидает определенное количество времени, а затем проверяет платформу, чтобы увидеть, все ли пакеты запущены (вы можете получить список всех установленных на данный момент пакетов из BundleContext). Если один из них не находится в состоянии INSTALLED, вы можете остановить каркас, остановив системный пакет (т. Е. Пакет 0).
...