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



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

1)使用泽西岛应用程序和带有注释的资源构建一个重新资源(这不是问题)。

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

3)包装,安装并在OSGI容器中发动战争,该战争可能将#2纳入依赖项。

,我希望能够使用Maven来完成所有这些。

我似乎也找不到一个工作的示例,即使是单个步骤,尤其是涉及Maven的步骤,更不用说这些步骤的组合了。我尝试将整个网络上的各种Q& a拼凑在一起,成功的级别不同,但端到端的工作示例却不相同。

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

我没有泽西岛的示例,但是我有一个带有apache karaf的CXF教程(使用Felix)。它显示了如何创建休息服务并用Maven构建它。然后,使用Apache Karaf,您可以直接从Maven Repo部署捆绑包。将其移至球衣可能只是意味着交换LIB并使用另一个蓝图配置来初始化其余服务。

Apache Karaf还允许部署战争和WAB,但我尚未对其进行测试。

apache stanbol在大多数或全部(不确定是否包含战争包装)来实现其RESTFULES服务。

您必须挖掘其代码库,但是在其中搜索JAX-RS注释应将您指向正确的位置。

我也确实在努力做什么。到目前为止,我似乎真的很亲密,但是可惜,这是我一直在做的事情:

  1. 与Maven进行战争,定义了我的球衣资源的
  2. 将其与Maven Bundle插件捆绑在一起(请参阅一节将OSGI元数据添加到现有项目中,而无需更改包装类型)。这使我能够在tomcat中运行弹力和测试。
  3. 定义Eclipse中的目标,其中包括我本地定义的P2站点的资源,我使用P2-Maven-Plugin插件创建的目标。通过这种方式,我可以将战争项目的任何依赖项收集到P2站点中,我可以将其部署到Eclipse定义的目标
  4. 我被困在哪里试图注册泽西资源的服务,我尝试过:
  5. 使用JAX-RS OSGI连接器,我最终放弃了它,因为它使用Glassfish Flesey,当泽西岛尚未定义2版2 API时,它似乎会导出泽西岛的2版API。当我想使用泽西岛libs版本1.17时,这会导致包装分辨率问题。
  6. 使用白板a a a apache felix http服务注册资源,我当前的方法似乎尚不正常。
  7. ,最后,如果前面不起作用,我将尝试Amdatu
  8. 我可能会尝试的另一条路线是来自泽西岛项目OSGI章

我尝试了这种组合并将其启动 -

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

2- OSGI实现 -> Apache Felix 4.4.0

3- OSGI运行时 -> Apache Karaf 3.0.3

4-休息的软件体系结构规范 - 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),并以捆绑方式部署泽西岛休息Web服务。您可以参考本教程-https://vzurczak.wordpress.com/2014/09/30/web-applications-with-osgi-working-with-jersey/

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

最新更新