Как настроить среду OSGi, чтобы ее можно было использовать из класса EclipseStarter? - PullRequest
1 голос
/ 03 июня 2009

В настоящее время я пытаюсь выполнить некоторые пакеты, используя возможности класса EclipseStarter. Если я запускаю свою программу прямо из Eclipse, пакет услуг OSGi загружается, и я могу установить и запустить другие пакеты.

Но если я экспортирую свою java-программу в исполняемый jar-файл и запускаю ее из командной строки, среда загружает пакет под названием System Bundle [0] вместо пакета службы OSGi. Каждая попытка установить новый пакет вызывает исключение Nullpointer-Exception.

Нужно ли устанавливать какие-то особые настройки в свойствах Framework, чтобы можно было использовать среду OSGi из файла jar? В настоящее время я устанавливаю только следующие два значения:

frameworkProperties.put("osgi.clean", "true");
frameworkProperties.put("osgi.console", "true");

Обновление:

Я думаю, что моя проблема может быть связана с используемым java classpath. Если я добавлю Framework-Bundle в classpath, как это

java -classpath /home/markus/org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar:test.jar 
Starter.Starter

все работает хорошо:

osgi> ss

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.3.R34x_v20081215-1030

Но если я запускаю только jar-файл, я получаю следующий журнал ошибок:

markus@markus-laptop:~/configuration$ cat 1244201504478.log
!SESSION 2009-06-05 13:31:44.895 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.6.0_13
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=de_DE
Command-line arguments:  -clean -console

!ENTRY org.eclipse.osgi 4 0 2009-06-05 13:31:44.897
!MESSAGE An unexpected runtime error has occurred.
!STACK 0
java.lang.NullPointerException
        at org.eclipse.osgi.internal.baseadaptor.BaseStorage.readStateData(BaseStorage.java:743)
        at org.eclipse.osgi.internal.baseadaptor.BaseStorage.getStateManager(BaseStorage.java:698)
        at org.eclipse.osgi.baseadaptor.BaseAdaptor.getState(BaseAdaptor.java:390)
        at org.eclipse.core.runtime.adaptor.EclipseStarter$1.bundleChanged(EclipseStarter.java:307)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:1234)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:211)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:141)
        at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEventPrivileged(Framework.java:1518)
        at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1469)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:281)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.launch(StartLevelManager.java:247)
        at org.eclipse.osgi.framework.internal.core.SystemBundle.resume(SystemBundle.java:201)
        at org.eclipse.osgi.framework.internal.core.Framework.launch(Framework.java:644)
        at org.eclipse.osgi.framework.internal.core.OSGi.launch(OSGi.java:51)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:313)
        at CanEmulator.OSGiFramework.run(OSGiFramework.java:119)
        at java.lang.Thread.run(Thread.java:619)

!ENTRY System Bundle 4 0 2009-06-05 13:31:44.898
!MESSAGE
!STACK 0
java.lang.NullPointerException
        at org.eclipse.osgi.internal.baseadaptor.BaseStorage.readStateData(BaseStorage.java:743)
        at org.eclipse.osgi.internal.baseadaptor.BaseStorage.getStateManager(BaseStorage.java:698)
        at org.eclipse.osgi.baseadaptor.BaseAdaptor.getState(BaseAdaptor.java:390)
        at org.eclipse.core.runtime.adaptor.EclipseStarter$1.bundleChanged(EclipseStarter.java:307)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:1234)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:211)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:141)
        at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEventPrivileged(Framework.java:1518)
        at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1469)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:281)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.launch(StartLevelManager.java:247)
        at org.eclipse.osgi.framework.internal.core.SystemBundle.resume(SystemBundle.java:201)
        at org.eclipse.osgi.framework.internal.core.Framework.launch(Framework.java:644)
        at org.eclipse.osgi.framework.internal.core.OSGi.launch(OSGi.java:51)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:313)
        at CanEmulator.OSGiFramework.run(OSGiFramework.java:119)
        at java.lang.Thread.run(Thread.java:619)

В настоящее время я использую framework-jar-файл в качестве внешней библиотеки в моем проекте Eclipse. Я думаю, что что-то идет не так, когда я экспортирую свой проект в исполняемый файл ...

BR

Markus

1 Ответ

3 голосов
/ 03 июня 2009

Я бы также добавил следующие свойства

osgi.noShutdown=true

osgi.configuration.area= (path)
osgi.baseConfiguration.area= (path)
osgi.sharedConfiguration.area= (path)
osgi.instance.area= (path)
osgi.user.area= (path)

Первый говорит Равноденствие не останавливаться. Это необходимо, если вы не создаете приложение Eclipse. Другие - пути, куда должны идти различные файлы. Если вы хотите использовать консоль, просто наберите

osgi.console=

Нет необходимости в значении. Если вы введете число, это будет порт telnet, где вы сможете увидеть консоль.

Теперь, что касается ваших пакетов, вы ВСЕГДА увидите Системный Пакет. Это сама OSGi. Чтобы добавить дополнительные пакеты, вам необходимо установить их. Вы можете установить их через Консоль или через конфигурацию, используя:

osgi.bundles= (comman delim list of bundle paths)

Вы можете устанавливать пакеты программно с помощью экземпляра System Bundle, который вы можете получить из EclipseStarter.

Если это не работает, вы можете загрузить трассировку стека или файл журнала osgi (вы можете найти файл журнала osgi в рабочем каталоге или в «osgi.configuration.area»). Это будет файл, имя которого чисто числовое.

...