2009-06-03 17 views
1

現在、EclipseStarterクラスの機能を使用してバンドルを実行しようとしています。 Eclipseからプログラムを直接実行すると、OSGiサービスバンドルがロードされ、他のバンドルをインストールして起動することができます。EclipseStarterクラスからOSGi環境を使用できるようにOSGi環境を設定するにはどうすればよいですか?

Javaプログラムを実行可能なjarファイルにエクスポートしてコマンドラインから実行すると、環境によってOSGiサービスバンドルではなく「システムバンドル[0]」というバンドルが読み込まれます。新しいバンドルをインストールしようとするたびに、Nullpointer-Exceptionが発生します。

jarファイルからOSGi環境を使用できるようにするには、フレームワークプロパティ内に特別な設定をいくつか設定する必要がありますか?

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

アップデート:現在、私は次の2つの値を設定してい

は、私は私の問題は、使用されるJavaクラスパスとは何かを持っているかもしれないと思います。

osgi> ss 

Framework is launched. 

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

をしかし、私は唯一のjarファイルを実行する場合、私は次のエラー・ログを取得しています:私はこの

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

すべてのようにクラスパスにフレームワーク・バンドルを追加した場合はうまく機能している

[email protected]:~/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を使用しています。私はまた、次のプロパティ

osgi.noShutdown=true 

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

最初の1を追加しますBR、

マルクス

+1

OSGiフレームワークをアプリケーションに埋め込んでいますか?別のフレームワークインスタンス内で実行することを意図したバンドルですか?どのOSGiフレームワークを使用していますか? – Cogsy

+0

私は最新のEquinox OSGiフレームワークを使用しています:org.eclipse.osgi_3.4。3.R34x_v20081215-1030.jar – Markus

答えて

3

...私は、実行可能ファイルへの私のプロジェクトをエクスポートするとき代がうまくいかないと思いますEquinoxに停止しないよう指示する。これは、Eclipseアプリケーションを作成していない場合に必要です。他のファイルは、さまざまなファイルが移動するパスです。コンソールを使用したい場合は、ただ実行してください。

osgi.console= 

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

あなたのバンドルについては、いつでもシステムバンドルが表示されます。それはOSGi自体です。バンドルを追加するには、バンドルをインストールする必要があります。あなたは、コンソール経由でそれらをインストール、または設定を経由して使用することができます

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

あなたはEclipseStarterから入手できるシステムバンドルのインスタンスを、使用してプログラムのバンドルをインストールすることができます。

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

+1

こんにちは!これらのパラメータを追加した後、フレームワークはまったく開始していません。 jarファイルから今すぐ実行すると、java.lang.NullPointerExceptionが発生します。したがって、osgiログファイルはありません。 – Markus

関連する問題