使用Jersey(REST资源),OSGi(Apache Felix)和Maven(构建和部署)的示例?

时间:2012-10-22 19:16:15

标签: maven jersey osgi

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

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

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

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

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

我似乎无法找到一个工作的例子,即使是单独的步骤,特别是涉及Maven,这项工作更不用说这些步骤的组合了。我尝试过在网络上拼凑各种q& a,并取得了不同程度的成功但不是端到端的工作示例。

任何指针都会受到赞赏......

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

你必须深入研究codebase,但在那里搜索Jax-RS注释会指向正确的位置。

答案 2 :(得分:1)

我也正在努力完成你想要做的事情。到目前为止,我似乎非常接近,但唉不是那里,这就是我一直在做的事情:

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

答案 3 :(得分:1)

我尝试了这个组合并使其运行 -

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

2- OSGi实施 - > Apache Felix 4.4.0

3- OSGi Runtime - > 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搬到泽西岛,因为泽西岛是JAX-RS的轻型等待参考实施。现在我计划将Jersey与Apache Felix / Apache Karaf一起使用。您可以在Karaf中安装Jersey并将Jersey Rest Web Services部署为Bundle。您可以参考本教程 - https://vzurczak.wordpress.com/2014/09/30/web-applications-with-osgi-working-with-jersey/

答案 4 :(得分:1)

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