2

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

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

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

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

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

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

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

4

5 回答 5

3

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

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

于 2012-10-23T06:44:09.787 回答
3

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

您必须深入研究它的代码库,但在其中搜索 Jax-RS 注释应该会将您指向正确的位置。

于 2012-10-23T06:57:43.020 回答
1

我也确实在为您正在尝试做的事情而苦苦挣扎。到目前为止,我似乎真的很接近,但可惜不是在那里,这就是我一直在做的事情:

  1. 与定义我的泽西资源的 Maven 进行战争
  2. 将其与 maven 捆绑插件捆绑在一起(请参阅将 OSGi 元数据添加到现有项目而不更改打包类型部分)。这允许我在 Tomcat 中运行 restlets 并进行测试。
  3. 在 Eclipse 中定义一个目标,其中包括来自我使用 p2-maven-plugin 插件创建的本地定义的 p2 站点的资源。通过这种方式,我可以将 WAR 项目中的任何依赖项收集到一个 p2 站点中,我可以将其部署到 Eclipse 定义的目标
  4. 我被困的地方是试图将泽西资源注册为服务,为此我尝试过:
  5. 使用JAX-RS OSGI 连接器,我最终放弃了,因为它使用 glassfish jersey,当 Jersey 甚至还没有定义版本 2 API 时,它似乎导出了 Jersey 的版本 2 API。当我想使用 Jersey 库的 1.17 版时,这会导致包解析问题。
  6. 使用 Whiteboard a la Apache Felix HTTP Service注册资源,我目前的方法似乎还不起作用。
  7. 最后,如果前面的方法不起作用,我会尝试Amdatu
  8. 我可能会尝试的另一条路线来自Jersey 项目 OSGI 章节
于 2013-05-18T00:07:35.907 回答
1

我尝试了这种组合并使它运行起来-

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/

于 2015-05-29T08:57:37.413 回答
1

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

于 2015-05-29T13:12:23.133 回答