osgi bundle start時のエラーについて

654 views
Skip to first unread message

andofuji3

unread,
May 20, 2009, 5:19:28 AM5/20/09
to Eclipse Plugin 開発勉強会
はじめまして、あんどうともうします。

OSGiの勉強をしてみようと思い、EquinoxのBundle作成をやりだしたのですが、最初から躓いてしまいました。
Eclipse Pluginの話題とは少しずれているかもしれませんが、皆さんの経験を教えて頂きたく、登校させて頂きます。

「よしたんのぶろぐ」さんの、2008年2月9日の記事『Equinoxを試す』を参考に、HelloWorldっぽいBundleを作成して、jar
ファイルの作成までは滞りなく進んだのですが、いざosgiコンソールからinstallしてstartすると、

org.osgi.framework.BundleException: The activator
hello.HelloWorldBundleActivator for bundle HelloTest is invalid
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator
(AbstractBundle.java:146)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start
(BundleContextImpl.java:980)
at
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
(BundleHost.java:346)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:265)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:257)
at
org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start
(FrameworkCommandProvider.java:257)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute
(FrameworkCommandInterpreter.java:150)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand
(FrameworkConsole.java:302)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.console
(FrameworkConsole.java:287)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.run
(FrameworkConsole.java:223)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException:
hello.HelloWorldBundleActivator
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal
(BundleLoader.java:483)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:399)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:387)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass
(DefaultClassLoader.java:87)
at java.lang.ClassLoader.loadClass(Unknown Source)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass
(BundleLoader.java:315)
at
org.eclipse.osgi.framework.internal.core.BundleHost.loadClass
(BundleHost.java:227)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator
(AbstractBundle.java:139)
... 14 more
Nested Exception:
java.lang.ClassNotFoundException: hello.HelloWorldBundleActivator
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal
(BundleLoader.java:483)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:399)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:387)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass
(DefaultClassLoader.java:87)
at java.lang.ClassLoader.loadClass(Unknown Source)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass
(BundleLoader.java:315)
at
org.eclipse.osgi.framework.internal.core.BundleHost.loadClass
(BundleHost.java:227)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator
(AbstractBundle.java:139)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start
(BundleContextImpl.java:980)
at
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
(BundleHost.java:346)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:265)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:257)
at
org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start
(FrameworkCommandProvider.java:257)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute
(FrameworkCommandInterpreter.java:150)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand
(FrameworkConsole.java:302)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.console
(FrameworkConsole.java:287)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.run
(FrameworkConsole.java:223)
at java.lang.Thread.run(Unknown Source)
Nested Exception:
java.lang.ClassNotFoundException: hello.HelloWorldBundleActivator
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal
(BundleLoader.java:483)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:399)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:387)
at
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass
(DefaultClassLoader.java:87)
at java.lang.ClassLoader.loadClass(Unknown Source)
at
org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass
(BundleLoader.java:315)
at
org.eclipse.osgi.framework.internal.core.BundleHost.loadClass
(BundleHost.java:227)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator
(AbstractBundle.java:139)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start
(BundleContextImpl.java:980)
at
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
(BundleHost.java:346)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:265)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:257)
at
org.eclipse.osgi.framework.internal.core.FrameworkCommandProvider._start
(FrameworkCommandProvider.java:257)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.eclipse.osgi.framework.internal.core.FrameworkCommandInterpreter.execute
(FrameworkCommandInterpreter.java:150)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.docommand
(FrameworkConsole.java:302)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.console
(FrameworkConsole.java:287)
at
org.eclipse.osgi.framework.internal.core.FrameworkConsole.run
(FrameworkConsole.java:223)
at java.lang.Thread.run(Unknown Source)

というメッセージが出てエラーとなってしまいます。

何が悪いのかまったく分からないのですが、同じような経験をして、原因を把握されている方が居ましたら、教えて頂けないでしょうか。
よろしくお願いします。

Hiroki Kondo

unread,
May 20, 2009, 5:50:48 AM5/20/09
to eclipse-p...@googlegroups.com
こんぴろです。あんどうさん、こんばんは。

OSGiの話題も歓迎です。Welcome!です。

さてエラーメッセージ中になんも情報がない、というエラーにぶつかったときも
一応メッセージでググると情報がひっかかりました。
すると同じような質問をされている方がいらっしゃいました。
http://dev.eclipse.org/newslists/news.eclipse.technology.equinox/msg04700.html
http://dev.eclipse.org/newslists/news.eclipse.technology.equinox/msg04701.html

どうやってJARを作成したのか、またJARの中にクラスがちゃんとはいっているか?
等のチェックポイントがあるようです。
他にもコンパイルしたJavaのバージョンと、実行しているJavaのバージョンがあってるのか、
とかも気になります。

ちなみにEquinoxはフォルダ形式のBundleも認識してくれます。
http://www.thinkit.co.jp/cert/article/0708/9/3/2.htm
でやってるデモはフォルダをURLに指定しています。

ちなみに「is invalid
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator」
で検索してみました。

あんどうさんがOSGiの勉強を始められたのは@ITの記事の影響でしょうか?
thinkitの記事は自分が書いたものですので、よろしければいじくってみてくだし。
いじょです。

2009/05/20 18:19 andofuji3 <ando...@gmail.com>:
--
Hiroki Kondo
kom...@gmail.com

andofuji3

unread,
May 20, 2009, 9:11:33 PM5/20/09
to Eclipse Plugin 開発勉強会
あんどうです。
こんぴろさん、回答ありがとうございます。

ちょっと早朝から色々試していたのですが、解決には至りませんでした。残念です。
目先を変えて、eclipseを使ってplugin開発しつつ、OSGi学ぼうかなと考え中です。

私が、OSGi学ぼうと思ったきっかけは、日経コミュニケーションの記事です。
最新号で、HGWを使用したホームネットワークの公開について解説されており、その核となる技術としてOSGiが紹介されていました。
この辺は、SORUN株式会社さんのHPを見るとイメージしやすいと思います。
 http://www.sorun.co.jp/ "OSGiとは" でサイト内検索すると良いかと。
家電と携帯が連動する日を妄想しながら勉強してます。

thikitの記事は既に拝見してます。ソースも頂きました。
ちょっと先になるかもしれませんが、内容を見て質問させて頂くかもしれませんので、その際はよろしくです。


On 5月20日, 午後6:50, Hiroki Kondo <komp...@gmail.com> wrote:
> こんぴろです。あんどうさん、こんばんは。
>
> OSGiの話題も歓迎です。Welcome!です。
>
> さてエラーメッセージ中になんも情報がない、というエラーにぶつかったときも
> 一応メッセージでググると情報がひっかかりました。
> すると同じような質問をされている方がいらっしゃいました。http://dev.eclipse.org/newslists/news.eclipse.technology.equinox/msg0...http://dev.eclipse.org/newslists/news.eclipse.technology.equinox/msg0...
>
> どうやってJARを作成したのか、またJARの中にクラスがちゃんとはいっているか?
> 等のチェックポイントがあるようです。
> 他にもコンパイルしたJavaのバージョンと、実行しているJavaのバージョンがあってるのか、
> とかも気になります。
>
> ちなみにEquinoxはフォルダ形式のBundleも認識してくれます。http://www.thinkit.co.jp/cert/article/0708/9/3/2.htm
> でやってるデモはフォルダをURLに指定しています。
>
> ちなみに「is invalid
> at
> org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator 」
> で検索してみました。
>
> あんどうさんがOSGiの勉強を始められたのは@ITの記事の影響でしょうか?
> thinkitの記事は自分が書いたものですので、よろしければいじくってみてくだし。
> いじょです。
>
> 2009/05/20 18:19 andofuji3 <andofu...@gmail.com>:
> komp...@gmail.com

Hiroki Kondo

unread,
May 21, 2009, 9:15:40 AM5/21/09
to eclipse-p...@googlegroups.com
こんぴろです。こんばんは。

> ちょっと早朝から色々試していたのですが、解決には至りませんでした。残念です。
せっかくなので、作成されたJarを送っていただければ調べてみますよ。

> 目先を変えて、eclipseを使ってplugin開発しつつ、OSGi学ぼうかなと考え中です。
EclipseはOSGi上で動いていますが、pluginに関してはOSGiに載せる前の仕様を
引きずっているイメージがあります。plugin.xmlに拡張ポイントを書くとか。

少し前に豆蔵さんでOSGiの無料のナイトセミナーがあったんですが、
「OSGiってなに?」という方ばかりで残念でした。
SORUNさんのページ拝読しました。いいですね。

海外ではBug LabsというOSGiコンテナを使ったデバイスも出てます。
http://buglabs.net/
BugBaseに拡張モジュールを刺して遊ぶ、というかんじです。

日本には輸出できない・・・?ようなので買えないのですが、
買えるのであればいろいろ遊べそうですね。

2009/05/21 10:11 andofuji3 <ando...@gmail.com>:

--
Hiroki Kondo
kom...@gmail.com

andofuji3

unread,
May 21, 2009, 8:56:22 PM5/21/09
to Eclipse Plugin 開発勉強会
あんどうです。

お言葉に甘えまして、作成したファイル一式をグループのファイルにUpしました。
helloworld.zipです。

> EclipseはOSGi上で動いていますが、pluginに関してはOSGiに載せる前の仕様を
> 引きずっているイメージがあります。plugin.xmlに拡張ポイントを書くとか。

なるほどです。
ちょっと質問ですが、New Plig-in Projectで、Target Platformをan OSGi framworkにして作成した場
合、Eclipse特有の記述は含まれないと思っているのですが、正しいでしょうか?

続けてで恐縮ですが、こんぴろさんがthinkitにUpされているProjectについても教えてください。
BundleContext::registerService()を何箇所かで使用されていますが、このメリットが良く分かりません。
Dependencyや、importとは、どう違うのか教えて頂きたく。
一応、http://www.osgi.org/javadoc/r4v41/overview-summary.htmlで、いろいろ呼んでいるので
すが、語彙力が足りないらしく、よく分かりませんでした。。。


On 5月21日, 午後10:15, Hiroki Kondo <komp...@gmail.com> wrote:
> こんぴろです。こんばんは。
>
> > ちょっと早朝から色々試していたのですが、解決には至りませんでした。残念です。
>
> せっかくなので、作成されたJarを送っていただければ調べてみますよ。
>
> > 目先を変えて、eclipseを使ってplugin開発しつつ、OSGi学ぼうかなと考え中です。
>
> EclipseはOSGi上で動いていますが、pluginに関してはOSGiに載せる前の仕様を
> 引きずっているイメージがあります。plugin.xmlに拡張ポイントを書くとか。
>
> 少し前に豆蔵さんでOSGiの無料のナイトセミナーがあったんですが、
> 「OSGiってなに?」という方ばかりで残念でした。
> SORUNさんのページ拝読しました。いいですね。
>
> 海外ではBug LabsというOSGiコンテナを使ったデバイスも出てます。http://buglabs.net/
> BugBaseに拡張モジュールを刺して遊ぶ、というかんじです。
>
> 日本には輸出できない・・・?ようなので買えないのですが、
> 買えるのであればいろいろ遊べそうですね。
>

> 2009/05/21 10:11 andofuji3 <andofu...@gmail.com>:


>
>
>
> > あんどうです。
> > こんぴろさん、回答ありがとうございます。
>
> > ちょっと早朝から色々試していたのですが、解決には至りませんでした。残念です。
> > 目先を変えて、eclipseを使ってplugin開発しつつ、OSGi学ぼうかなと考え中です。
>
> > 私が、OSGi学ぼうと思ったきっかけは、日経コミュニケーションの記事です。
> > 最新号で、HGWを使用したホームネットワークの公開について解説されており、その核となる技術としてOSGiが紹介されていました。
> > この辺は、SORUN株式会社さんのHPを見るとイメージしやすいと思います。
> >http://www.sorun.co.jp/ "OSGiとは" でサイト内検索すると良いかと。
> > 家電と携帯が連動する日を妄想しながら勉強してます。
>
> > thikitの記事は既に拝見してます。ソースも頂きました。
> > ちょっと先になるかもしれませんが、内容を見て質問させて頂くかもしれませんので、その際はよろしくです。
>
> > On 5月20日, 午後6:50, Hiroki Kondo <komp...@gmail.com> wrote:
> >> こんぴろです。あんどうさん、こんばんは。
>
> >> OSGiの話題も歓迎です。Welcome!です。
>
> >> さてエラーメッセージ中になんも情報がない、というエラーにぶつかったときも
> >> 一応メッセージでググると情報がひっかかりました。

> >> すると同じような質問をされている方がいらっしゃいました。http://dev.eclipse.org/newslists/news.eclipse.technology.equinox/msg0......

> ...
>
> もっと読む »

Hiroki Kondo

unread,
May 24, 2009, 1:34:17 AM5/24/09
to eclipse-p...@googlegroups.com
こんぴろです。

2009/05/22 9:56 andofuji3 <ando...@gmail.com>:
> あんどうです。
>
> お言葉に甘えまして、作成したファイル一式をグループのファイルにUpしました。
> helloworld.zipです。
中身見ました。
ファイルは問題なかったのですが、jarの構成に問題があったみたいです。
再構成して自分の環境で動くようにしたものをアップしました。
HelloTest_1.0.0.jar です。HelloTest.zipはEclipseのプロジェクトをzipで固めたものです。
解凍後、Eclipseからimportしてみてください。

>
>> EclipseはOSGi上で動いていますが、pluginに関してはOSGiに載せる前の仕様を
>> 引きずっているイメージがあります。plugin.xmlに拡張ポイントを書くとか。
>
> なるほどです。
> ちょっと質問ですが、New Plig-in Projectで、Target Platformをan OSGi framworkにして作成した場
> 合、Eclipse特有の記述は含まれないと思っているのですが、正しいでしょうか?

そうすねー。その場合は、plugin.xmlが作られない、というだけだと思います。
今EclipseはOSGiの参照実装(ある意味デファクトだから)として
OSGiアライアンスからも配布されていますが、
Eclipseで使われていた仕様が、OSGiの仕様として取り込まれたりもしてます。

> 続けてで恐縮ですが、こんぴろさんがthinkitにUpされているProjectについても教えてください。
> BundleContext::registerService()を何箇所かで使用されていますが、このメリットが良く分かりません。
> Dependencyや、importとは、どう違うのか教えて頂きたく。

Dependencyや、importはそのBundleが必要なクラスやバンドルを記述します。対してBundle
BundleContext::registerService()はBundle内のサービスをOSGiコンテナに対して登録しています。thinkitの例はServiceTrackerを用いて、Serviceの登録状況をトラッキングし、登録されている場合のみ利用するようにしています。こうすると、サービスのインスタンスを直接参照しない分、Bundle同士の結びつきが疎になります。一応そのあたりもthinkitの記事で解説しました。
ちょと近いうちに図とか描いて説明したいなぁ・・・。今日は勘弁してください。

> 一応、http://www.osgi.org/javadoc/r4v41/overview-summary.htmlで、いろいろ呼んでいるので
> すが、語彙力が足りないらしく、よく分かりませんでした。。。

JavaDocを読んでもよくわからないです。もっと抽象的な概念のお話です。

--
Hiroki Kondo
kom...@gmail.com

Reply all
Reply to author
Forward
0 new messages