2

これは、fusesourceフォーラムservicemmixフォーラムからクロスポストされています。

DOSGiをFUSEで動作させることができません。私はCXFのDOSGi1.1-SNAPSHOTとZookeeperディスカバリーをFUSE4.1.0.2に取得しようとしています。Zookeepr3.2.1も使用しています。

すべてがFelix2.0.0で完全に機能します。DOSGi Discovery ページの指示に従って、DiscoveryDemoバンドルをインストールします。DOSGiの場合、DSWに はcxf-dosgi-ri-singlebundle-distribution-1.1-SNAPSHOT.jarを使用し、 cxf-dosgi-ri-discovery-singlebundle-distribution-1.1-SNAPSHOT.jarを使用します。 動物園の発見のために。次に、1台のマシンでサンプルサービスimplを使用してサンプルバンドルを開始すると、zookeeperでノードが作成されていることがわかります。次に、別のマシンでサンプルクライアントを起動すると、サービスマシンに出力が表示されます。よく働く。一部のXSDが見つからないため、xmlエラーが無視されるという警告がありますが、何にも影響がないようです。ああ、私も最初にOSGi大要バンドルをインストールする必要があります。

ヒューズに引っ越したとき、そんな運はありません。OSGi大要バンドルにはヒューズが付属しているので、それをインストールする必要はありません。dosgi-riシングルバンドルとdosgi-ri-discoveryシングルバンドルをインストールできるはずですが、それは機能しません。dosgi-riシングルバンドルには、servicemixを使用したあらゆる種類のオーバーラップバンドルがあります。ポート8081についてエラーが発生しますか?または、osgi.http.serviceパラメーターが何であれ、すでに使用されています。どうやら、dosgi-riシングルバンドルにはpax Webサービスが付属しており、servicemixに付属しているservicemixhttpサービスバンドルと同じプロパティを読み取ります。それは私がcxf-dosgi-ri-multibundle-distribution-1.1-SNAPSHOT.zipに切り替えるとき です解凍して、必要なパーツを取り出します。dosgi-riマルチバンドルからdswバンドルを取り出し、インストールします。jdomに依存しているため、運がありません。次に、riマルチバンドルに含まれているjdomをインストールします。これは正常に機能します。次に、dswに戻ると、インストールされるので、どこかに到達していると思います。戻って、ri-discoveryシングルバンドルをインストールします。開始すると、paxロギングサービスのclasscastexceptionが表示され、osgiログサービスなどにキャストできないと表示されます。しかし、これは単なるロギングエラーであり、下部にはhttp://schemas.xmlsoap.org/soap/httpのトランスポートクラスが見つからないと表示されます。。さて、ロギングが台無しになり、いくつかのトランスポートクラスが欠落しています。まあ、明らかにこれは、フェリックスで機能したため、riマルチバンドルから十分にインストールされていないことに起因します。だから、そこに他に何が必要なのか。検査時にcxf-minimal-bundleにクラスがないため、最後のエラーが発生します。だから私はそれをインストールします。ディスカバリーバンドルを開始しようとしましたが、ある種のcorbabroker例外が発生しました。Wtf。このすべてでcorbaを使用しているのは誰ですか?次に、戻ってすべてを元に戻し、riとri-discoveryのシングルバンドルディストリビューションを使い続けようとしますが、servicemixhttpサービスをオフにするだけです。これによりservicemixがクラッシュし、cxf jbiコンポーネントの依存関係が満たされないため、再起動できません。奇数。とにかくそれらを使用しないので、それを無視して、サンプルを開始しようとします。できる' ポートがすでに使用されているために桟橋を開始できないと表示されているため、サンプルを開始します。すでにservicemixhttpサービスをシャットダウンしているので、意味がありません。それから私は突堤を再開します。動作しますか?多分。サービスが登録され、Firefoxを使用してWSDLを参照できますが、zookeeperに登録されていません。ri-discoveryバンドルをシャットダウンして再起動しようとしましたが、nullpointerexceptionが発生します。どうやら、前述のエラーの1つが原因で、ri-discoveryが実際に起動することはありませんでした。それから私はri-discoveryシングルバンドルを分解して内部を引き抜こうとし始めました。中にはいくつかのライブラリがありますが、それがなくてもすべてが明らかに必要であるため、これは機能しませんでした。すでにservicemixhttpサービスをシャットダウンしているので意味があります。それから私は突堤を再開します。動作しますか?多分。サービスが登録され、Firefoxを使用してWSDLを参照できますが、zookeeperに登録されていません。ri-discoveryバンドルをシャットダウンして再起動しようとしましたが、nullpointerexceptionが発生します。どうやら、前述のエラーの1つが原因で、ri-discoveryが実際に起動することはありませんでした。それから私はri-discoveryシングルバンドルを分解して内部を引き抜こうとし始めました。中にはいくつかのライブラリがありますが、それがなくてもすべてが明らかに必要であるため、これは機能しませんでした。すでにservicemixhttpサービスをシャットダウンしているので意味があります。それから私は突堤を再開します。動作しますか?多分。サービスが登録され、Firefoxを使用してWSDLを参照できますが、zookeeperに登録されていません。ri-discoveryバンドルをシャットダウンして再起動しようとしましたが、nullpointerexceptionが発生します。どうやら、前述のエラーの1つが原因で、ri-discoveryが実際に起動することはありませんでした。それから私はri-discoveryシングルバンドルを分解して内部を引き抜こうとし始めました。中にはいくつかのライブラリがありますが、それがなくてもすべてが明らかに必要であるため、これは機能しませんでした。どうやら、前述のエラーの1つが原因で、ri-discoveryが実際に起動することはありませんでした。それから私はri-discoveryシングルバンドルを分解して内部を引き抜こうとし始めました。中にはいくつかのライブラリがありますが、それがなくてもすべてが明らかに必要であるため、これは機能しませんでした。どうやら、前述のエラーの1つが原因で、ri-discoveryが実際に起動することはありませんでした。それから私はri-discoveryシングルバンドルを分解して内部を引き抜こうとし始めました。中にはいくつかのライブラリがありますが、それがなくてもすべてが明らかに必要であるため、これは機能しませんでした。

話の終わり。それを動作させることができません。他の誰かがそれを機能させることができますか?SMX4でディスカバリーサンプルを実行したいだけです。バンドルの競合の問題だと確信しています。これはOSGiが修正することになっているものではありませんか?これは、依存しているjarを教えて、クラスパスを設定するよりも悪いです。少なくともその時、私は最終的に物事を実行するでしょう。

次のステップは、ri-multibundle、dswとjdom、およびri-discoverysinglebundleで再試行することだと思います。次に、いくつかのcxf-fuseバンドルまたはいくつかのcxf-rtバンドルを試して、soapトランスポートの問題を回避します。

メモの編集:DOSGiバンドルをアクティブ状態で表示するだけでは不十分です。あなたがそれらを通してサービスを公開しようとするまで、それらは実際には多くをしません。実行中のDOSGiDiscoverySampleのように、複数のマシンがzookeeperインスタンスにサービスを登録し、他のマシンがそれらのサービスを消費していることを確認する必要があります。

元のcxfバンドルの一部を削除してjettyサービスを再起動し、サンプルサービスを開始することで、前述の最小限のcxfバンドルを使用して、cxfに分散サービスサンプルをSOAPWebサービスとして公開させることができました...またはcxf最小バンドルをインストールし、サービスを開始し、すぐにcxf最小バンドルをアンインストールしてから、jettyを再起動します...それが注文だったと思います。これらはどちらもクリーンなスタートアップからは機能せず、DOSGiを機能させるための手順としてサービスを再起動する必要があるのは悪いことです。インストールしてからアンインストールすると何が起こるのかさえわかりません。アーティファクトが残ってはいけません。

4

1 に答える 1

1

最初のポイントは、CXF DOSGi メガバンドルを見ることです。これは、基本的に Equinox と Felix によって提供される最小限の環境である、裸の OSGi ランタイムでのクイック アンド ダーティ ハッキングのためだけのものだと思います。FUSE や Servicemix などのよりリッチな環境は、バンドルとプラットフォームのサービスが衝突する可能性が高いため、想定されていません。

Servicemix 4.0 を正常に起動することができ (これは Windows 上にあります)、ホットデプロイしました:

  • com.springsource.org.jdom-1.0.0.jar
  • cxf-bundle-minimal-2.2.1.jar
  • cxf-dosgi-ri-discovery-local-1.0.jar
  • cxf.dosgi-ri-dws.cxf-1.0.jar

Servicemix コンソールを使用して、すべてのバンドルを一覧表示し、上記のすべてがActive(予想どおり) 状態にあることを確認しました。サービスをリストすると、2 つの CXF DOSGi バンドルがサービスをエクスポートしていたので、正しく機能しているように見えました。ログにエラーは報告されていません。

OSGi についてどのくらい知っていますか? Servicemix は非常に大きく、OSGi、Servicemix、および CXF/DOSGi を一緒に学習するのは簡単ではありません (私の意見では)。

付属のコンソールは OSGi には適していません。Web インターフェイス用の Apache Felix コンソール バンドルをインストールすることをお勧めします。

于 2009-09-29T10:46:50.313 に答える