【问题标题】:Example using Jersey (REST resource), OSGi (Apache Felix), and Maven (build and deploy)?使用 Jersey(REST 资源)、OSGi(Apache Felix)和 Maven(构建和部署)的示例?
【发布时间】:2012-10-22 19:16:15
【问题描述】:

我似乎真的在这里挣扎。我想做的(按此顺序)是:

1) 使用 Jersey 应用程序和带注释的资源构建 RESTful 资源(这不是问题)。

2) 将该捆绑包打包、安装并启动到 Felix OSGi 容器中,作为 HTTP 服务,包括依赖项。

3) 在 OSGi 容器中打包、安装和启动一个 WAR,它可以将 #2 作为依赖项。

我希望能够使用 Maven 完成所有这些工作。

我似乎找不到一个可行的例子,即使是单个步骤,尤其是涉及 Maven,更不用说这些步骤的组合了。我尝试将来自网络的各种问答拼凑在一起,取得了不同程度的成功,但还不是一个端到端的工作示例。

任何指针将不胜感激......

【问题讨论】:

    标签: maven jersey osgi


    【解决方案1】:

    我没有 Jersey 的示例,但我有一个 tutorial for CXF with Apache Karaf(使用 Felix)。它展示了如何创建一个 Rest 服务并使用 maven 构建它。然后,您可以使用 Apache Karaf 直接从 maven 存储库部署包。将其移至 Jersey 可能只是意味着交换 lib 并使用另一个蓝图配置来初始化其余服务。

    Apache Karaf 还允许部署 war 和 wab,但我还没有测试过它们。

    【讨论】:

      【解决方案2】:

      Apache Stanbol 完成了大部分或所有这些工作(不确定是否包含开箱即用的战争包装)来实现其 RESTful 服务。

      您必须深入了解它的 codebase,但在那里搜索 Jax-RS 注释应该会指向正确的位置。

      【讨论】:

      • 这很有帮助,但我希望有更直接的东西。我遇到的问题似乎是我将各种来源的所有内容拼凑在一起。这周我会看看我能用 Stanbol 做什么。
      【解决方案3】:

      我也确实在为您正在尝试做的事情而苦苦挣扎。到目前为止,我似乎真的很接近,但遗憾的是还没有,这就是我一直在做的事情:

      1. 与定义我的 Jersey 资源的 Maven 进行战争
      2. 将其与 maven bundle 插件捆绑在一起(参见 Adding OSGi metadata to existing projects without changing the packaging type 部分)。这让我可以在 Tomcat 中运行 restlets 并进行测试。
      3. 在 Eclipse 中定义一个目标,其中包括来自我使用 p2-maven-plugin 插件创建的本地定义的 p2 站点的资源。通过这种方式,我可以将 WAR 项目中的任何依赖项收集到一个 p2 站点中,我可以将其部署到 Eclipse 定义的目标中
      4. 我卡住的地方是尝试将 Jersey 资源注册为服务,我已经尝试过:
      5. 使用JAX-RS OSGI connector,我最终放弃了,因为它使用 glassfish jersey,当 Jersey 甚至还没有定义版本 2 API 时,它似乎导出了 Jersey 的版本 2 API。当我想使用 Jersey 库的 1.17 版时,这会导致包解析问题。
      6. 使用白板注册资源,例如 Apache Felix HTTP Service,我目前的方法似乎还行不通。
      7. 最后,如果前面的方法不起作用,我会尝试Amdatu
      8. 我可能会尝试的另一条路线来自Jersey project OSGI chapter

      【讨论】:

        【解决方案4】:

        我尝试了这种组合并成功运行 -

        1- 模块化规范-->OSGi 规范

        2- OSGi 实现-->Apache Felix 4.4.0

        3- OSGi 运行时-->Apache Karaf 3.0.3

        4- REST 的软件架构规范 – JAX-RS

        5- JAX-RX 实现-->Apache CXF – 2.7.5

        你可以参考这个不错的教程 - http://java.dzone.com/articles/building-cxf-rest-service-osgi

        现在,我还计划从 CXF 迁移到 Jersey,因为 Jersey 是 JAX-RS 的轻等待参考实现。现在我打算将 Jersey 与 Apache Felix/Apache Karaf 一起使用。您可以在 Karaf 中安装 Jersey 并将您的 Jersey Rest Web 服务部署为 Bundle。你可以参考这个教程-https://vzurczak.wordpress.com/2014/09/30/web-applications-with-osgi-working-with-jersey/

        【讨论】:

        • 这看起来很有希望。
        【解决方案5】:

        这是 github 上的一个很好的例子:https://github.com/ddragosd/jax-rs-on-karaf

        【讨论】:

        • 这看起来也很有希望。
        猜你喜欢
        • 2012-11-30
        • 2013-12-25
        • 2012-03-08
        • 2019-04-15
        • 1970-01-01
        • 2012-10-10
        • 2018-05-14
        • 2017-09-06
        • 2015-10-15
        相关资源
        最近更新 更多