0

OSGi の Felix 実装を Maven と一緒に使用します。Maven バンドル プラグインを使用して、依存関係 (つまり、Service-Component ヘッダー) を接続します。以下を使用してサーブレットを登録します

<Service-Component>
 com.mycompany.MyServlet;
 provide:=javax.servlet.http.HttpServlet;immediate:=true;
 http=org.osgi.service.http.HttpService
</Service-Component>

ただし、同じ HTTP サービスを使用して 2 番目のサーブレットを実行したいと考えています。どうすればこれを達成できますか?

4

2 に答える 2

2

maven-scr-plugin と一緒にfelic SCR アノテーションを使用することをお勧めします。

次に、サーブレットに注釈を付けるだけです。

@Component(immediate=true)
@Service(Servlet.class)
@Property(name="alias", value="/path1")
public class Servlet1 extends HttpServlet {
    ...
}

@Component(immediate=true)
@Service(Servlet.class)
@Property(name="alias", value="/path2")
public class Servlet2 extends HttpServlet {
    ...
}

また、Felix HTTP ホワイトボードバンドルがインストールされていることも前提としています。HTTP ホワイトボードは、タイプ javax.servlet.Servlet のすべてのサービスを検出し、それらを HTTP サービスに自動的に登録します。

于 2013-06-19T16:21:09.980 に答える
1

簡単な答え: 簡単です。Service-Component ヘッダーに句を追加します。

 <Service-Component>
  com.mycompany.MyServlet1;
    provide:=javax.servlet.http.HttpServlet;immediate:=true;
    http=org.osgi.service.http.HttpService,
  com.mycompany.MyServlet2;
    provide:=javax.servlet.http.HttpServlet;immediate:=true;
    http=org.osgi.service.http.HttpService
 </Service-Component>

より良い答え。Apache Felix には、ホワイト ボード バンドルがあります。このバンドルは、サービス レジストリ内のサーブレット サービス (HttpServlet ではありません! ただし、フィルター サービスは追跡します) を追跡し、それらを現在の Http サービス サービスに自動的に追加します。したがって、エイリアスの「エイリアス」プロパティを使用して Servlet.class に登録するだけです。これもすぐに行う必要がないため、サーブレットが使用されるまで怠惰になります。これは 42 の回答で提唱されていますが、ヘッダー アプローチでは次のようになります。

 <Service-Component>
  com.mycompany.MyServlet1;
    provide:=javax.servlet.servlet.Servlet; 
    properties="alias=/path"
 </Service-Component>

最良の答えは、OSGi DS アノテーションを使用してサーブレットを登録することです。

 @Component(provide=Servlet.class, properties='alias=/path')
 public void MyServlet extends HttpServlet {
    public void doGet(HttpServletRequest rq, HttpServletResponse rsp) {
        ...
    }
 }
于 2013-06-24T07:29:14.083 に答える