0

私はOSGiの初心者です。私の要件は、Android アプリが OSGi フレームワーク上のサーバーと通信することです。

私はApache Felixをコンテナとして見ています。私が理解していることから、Felix にインストールされるバンドルがあり、それらはプログラム自体から開始および停止できます。

Android側でバンドルを作成して起動することができました。ただし、サーバー側で OSGi を明確に把握することはできません。Android アプリは、HTTP 要求と応答を使用してサーバーと通信します。サーバーに Apache Felix だけがある場合、HTTP リクエストを処理できますか? Tomcatも必要ですか?

このリンクを見ました -

OSGi Web エコシステム全体を理解するのに問題がある

ここでは、Web コンテナーが Tomcat/Jetty であることについて説明しています。これは、サーバーに Tomcat と Felix が必要であることを示しています。私はこれで正しいですか?また、Jetty が Felix に組み込まれているという記事も読みました。しかし、私は点をつなぐことができません。

私を正しい方向に導いてください..

4

1 に答える 1

0

OSGi の推奨モデルは、サーブレット サービスをサービス レジストリに登録するだけです。このサーブレットは、そのフレームワークにインストールされている Http サーバーによって取得される必要があります。このモデルは近い将来標準モデルになりますが、Apache Felix では既にサポートされています。これは、bnd(tools) でこれを作成する方法です。

bnd.bnd
  -runfw: org.apache.felix.framework;version='[4,5)'
  -runbundles: \
    org.apache.felix.configadmin;           version=1.6.0, \
    org.apache.felix.log;                   version=1.0.1, \
    org.apache.felix.scr;                   version=1.6.0, \
    org.apache.felix.http.jetty;            version=2.2.0, \
    org.apache.felix.http.whiteboard;       version=2.2.0

これが実行されている場合、次のように Declarative Services を使用してサーブレットを作成できます。

  @Component(provide=Servlet.class,properties="alias=/hello") // makes it available on /hello 
  public class MyAndroidServer extends HttpServlet {
    public void doGet(HttpServletRequest rq, HttpSerletResponse rsp) throws IOException {
      rsp.getWriter().println("Hello World");
    }
  }

bndtools から始めると、これを機能させるのは非常に簡単です。私の知る限り、これが OSGi 環境でサーブレットを使用する最も簡単な方法です。

于 2013-10-17T06:44:16.957 に答える