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 的首选模型是在服务注册表中注册一个 Servlet 服务。该 servlet 应该由安装在该框架上的 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

如果它正在运行,您可以使用这样的声明式服务编写一个 servlet:

  @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 环境中使用 servlet 的最简单方法。

于 2013-10-17T06:44:16.957 回答