質問

これはからのクロスポストです ヒューズソースフォーラム そしてその サービスミックスフォーラム.

FUSE で DOSGi を動作させることができません。Zookeeper Discovery を使用して CXF の DOSGi 1.1-SNAPSHOT を FUSE 4.1.0.2 に取得しようとしています。Zookeepr 3.2.1 も使用しています。

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

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

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

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

メモを編集します:DOSGi バンドルをアクティブ状態で表示するだけでは不十分です。これらを介してサービスを公開しようとするまでは、実際にはほとんど何もしません。実行中の DOSGi Discovery サンプルと同様に、Zookeeper インスタンスにサービスを登録している複数のマシンと、それらのサービスを使用している他のマシンを確認する必要があります。

元の cxf バンドルの一部を削除し、jetty サービスを再起動し、サンプル サービスを開始することによって、前述の最小限の cxf バンドルを使用することで、cxf に分散サービス サンプルを SOAP Web サービスとして公開させることができました。または、cxf minimum バンドルをインストールしてからサービスを開始し、すぐに cxf minimum バンドルをアンインストールして、jetty を再起動します。そういう順番だったと思います。どちらもクリーンな起動からは機能せず、DOSGi を動作させる手順としてサービスを再起動しなければならないのは、まったく問題ありません。なぜインストールしてからアンインストールしても何も起こらないのかさえわかりません。アーティファクトは何も残らないはずです。

役に立ちましたか?

解決

最初のポイントは、CXF DOSGi メガバンドルを見ると、これは裸の OSGi ランタイム、基本的に Equinox と Felix が提供する最小限の環境での簡単なハッキングのみを目的としていると思います。これは、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 機能には適していないため、Apache Felix コンソール バンドルをインストールすることをお勧めします。 ウェブインターフェース.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top