2013-02-15 2 views
0

У меня есть файл jar с именем lightlight.jar. Я могу запустить его в строке cmd: java -jar floodlight.jar. Теперь я хочу преобразовать его в пакет для развертывания с контейнером FUSE ESB. Вот что я сделал до сих пор:Запуск пакета osgi из основного класса вместо реализации BundleActivator

  1. новообращенный:

    java -jar bnd.jar wrap floodlight.jar 
    

    результат в расслоении имени floodlight.bar. изменить имя floodlight.jar

  2. развернуть

    FuseESB:[email protected]> osgi:install -s file:/home/usr/Dir/to/floodlight.jar 
    

Я надеюсь, что пакет может сделать то же самое, что я сделал в CMD строке: Java -jar floodlight.jar, когда он начал получать , Однако он активен, ничего не делая. Он просто ведет себя как библиотека.

Мне интересно, как запустить пул основного класса после его запуска. Кто-нибудь может мне помочь?

+0

Почему вы не хотите писать «Bundle-Activator»? Если речь идет о дублировании кода, вы можете просто вызвать 'main()' из метода 'start()' активатора. –

+0

Потому что есть некоторые приложения Java, такие как прожектор, oracle noslqlDB, готовый к запуску. Я просто хочу развернуть эти приложения в контейнере OSGi без каких-либо изменений. –

ответ

1

Точкой входа для приложений OSGi являются BundleActivator's. Вы не можете вызвать основной метод, как в стандартных приложениях Java. Тем не менее, вы можете делать все, что вы делаете в основном методе в методе start (BundleContext) вашего пакета.

Итак, реализуйте интерфейс BundleActivator и добавьте его в манифест.

+0

Совместим ли контент с основным классом с BundleActivator.start()? Затем добавьте активатор в манифест? –

+0

Возможно, вам придется немного изменить, в зависимости от вашей программы. Но в целом, да, start() является основным (OSGi)()! Но имейте в виду, что преобразование «стандартной» программы в модульное приложение osgi может вызвать некоторые проблемы из-за расширенной загрузки OSGi – Mirco

Смежные вопросы