1

現在、EclipseStarterクラスの機能を使用していくつかのバンドルを実行しようとしています。プログラムをEclipseから直接実行すると、OSGiサービスバンドルがロードされ、他のバンドルをインストールして開始できます。

しかし、Javaプログラムを実行可能jarファイルにエクスポートしてコマンドラインから実行すると、環境はOSGiサービスバンドルの代わりに「SystemBundle[0]」と呼ばれるバンドルをロードします。新しいバンドルをインストールしようとするたびに、Nullpointer-Exceptionが発生します。

jarファイルからOSGi環境を使用できるようにするには、Frameworkプロパティ内に特別な構成を設定する必要がありますか?現在、次の2つの値のみを設定しています。

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

アップデート:

私の問題は、使用されているJavaクラスパスに関係している可能性があると思います。このようにFramework-Bundleをクラスパスに追加すると

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)

現在、Eclipseプロジェクト内の外部ライブラリとしてframework-jar-fileを使用しています。プロジェクトを実行可能ファイルにエクスポートすると、問題が発生すると思います...

BR、

マーカス

4

1 に答える 1

3

次のプロパティも追加します

osgi.noShutdown=true

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

最初のものはEquinoxに停止しないように指示します。これは、Eclipseアプリケーションを作成していない場合に必要です。他のものは、さまざまなファイルが行くべきパスです。コンソールを使用したい場合は、

osgi.console=

値は必要ありません。番号を入力すると、コンソールが表示されるTelnetポートになります。

これで、バンドルについては、常にシステムバンドルが表示されます。それがOSGiそのものです。バンドルを追加するには、それらをインストールする必要があります。コンソールを介して、または次を使用して構成を介してそれらをインストールできます。

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

EclipseStarterから取得できるSystemBundleインスタンスを使用して、プログラムでバンドルをインストールできます。

これらが機能しない場合は、スタックトレースまたはosgiログファイルをアップロードしてください(osgiログファイルは作業ディレクトリまたは「osgi.configuration.area」にある場合があります)。名前が純粋に数値であるファイルになります。

于 2009-06-03T09:07:38.383 に答える