Android 应用程序使用 OSGi 与服务器通信

标签 android tomcat osgi apache-felix

我是 OSGi 的新手。我的要求是让 Android 应用程序与 OSGi 框架上的服务器通信。

我将 Apache Felix 视为容器。据我了解,Felix 上将安装一些 bundle ,它们可以从程序本身启动和停止。

我设法在 Android 端创建 bundle 并将其启动。 但是我无法在服务器端清楚地了解 OSGi。 Android 应用程序使用 Http 请求和响应与服务器通信。 如果我的服务器上只有 Apache Felix,我能处理 Http 请求吗? 我还需要 Tomcat 吗?

我看到了这个链接-

Trouble understanding the whole OSGi web eco system

他们在这里谈论 web 容器如何是 Tomcat/Jetty。这告诉我服务器上需要 Tomcat 和 Felix。我说得对吗? 我还读到了 Jetty 被嵌入到 Felix 中。但我无法连接点。

请引导我朝着正确的方向前进..

最佳答案

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 的最简单方法。

关于Android 应用程序使用 OSGi 与服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19415481/

相关文章:

android - 在 Gradle 脚本中引用用户的主目录

java - JDBC Pool——如何正确使用

java - 使用Spring Boot时如何运行所有测试类但只启动一次嵌入式Tomcat?

tomcat - Apache Tomcat 嵌入式 Spring 引导日志

java - 关于Spring DM、OSGi和web应用的问题

java - 将字符串数组解析为 ArrayList<Integer> 时丢失前导零

android - 长按安卓

Android等待启动BluetoothSco SCO_AUDIO_STATE_CONNECTED

maven - 如何在 OSGI 包中嵌入外部 jar 依赖项?

spring - 从 BundleContextAware 类访问应用程序上下文