0

私は、SunのHTTPServerを、Equinox上で実行されているOSGiバンドル内のはるかに優れたJettyサーバーに交換しようとしています。

私はこれを試しました:

System.setProperty("com.sun.net.httpserver.HttpServerProvider","org.mortbay.jetty.j2se6.JettyHttpServerProvider");

ただし、endpoint.publish(url)が呼び出され、サーバーが生成されると、org.mortbay.jetty.j2se6.JettyHttpServerProviderのClassNotFoundExceptionが発生します。

ただし、正しいjarがバンドルに含まれており、実際にActivatorでorg.mortbay.jetty.j2se6.JettyHttpServerProviderをインスタンス化できます。

これはある種のクラスパスの問題だと思います-生成されたサーバーは別のクラスパスにあるのでしょうか?JDKレベルでJARを追加しようとしましたが、違いはありません。

誰もがこれを機能させるために地球上でどのように光を当てることができますか?

PS恐ろしいSystem.setProperty呼び出しは、いつか世界から消えてしまうかもしれません。うまくいけば :)

4

3 に答える 3

0

Equinox には、Jetty 6.x に支えられた OSGi 標準 HttpService の実装があります。正しいバンドルを含めるだけで、Jetty を Equinox 内で簡単に実行できます。しかし、私は、a) Jetty が完全に隠されていること、HttpService インターフェイスしか見えないこと、b) HttpService インターフェイスがかなり単純であることを発見しました。サーブレット+マッピングといくつかの静的リソースのみを追加できます

于 2009-12-10T09:25:18.043 に答える
0

問題は、ファクトリが OSGi に対応しておらず、ファクトリをロードするクラスが Jetty 実装への参照を持たないことです。バンドルに含まれているかどうかではなく (1 つのバンドルにまとめられているようです)、ファクトリ メソッドがコア コードに含まれており、Jetty を解決できないことが原因です。

HttpServer をインスタンス化する呼び出しは、Java6 API の一部ではなく、むしろ Sun の内部クラスの 1 つです。そのため、この呼び出しは、Sun 以外の JVM で実行すると失敗します。クラスをまとめるために、このファクトリ メソッドを使用する以外に、Metro を使用して何かを行う方法を見つけたほうがよいでしょう。

于 2009-12-10T22:19:52.817 に答える
0

omerkudat に返信できないようですので、ここに返信しなければなりませんでした...

osgi jar を含めた場合、Metro は Jetty を使用していないようです。これが必要なようです:

http://docs.codehaus.org/display/JETTY/J2se6HttpServerSPI

手動でコンパイルし、システム プロパティを上記のように設定しましたが、失敗しました。

于 2009-12-10T16:17:58.510 に答える