在Felix中启动并运行CXFJAX-RSWeb资源的最低要求是什么?

问题描述

我想安装CXF,which implements JAX-RS并在Osgi中运行(特别是运行Apache Felix的Apache Karaf)。

this project: cxf-osgi-activator为例,我看到工程师做出了一个设计决策,将jetty Karaf featurejax-rs Karaf feature中分离出来。两者在运行时是否存在依赖关系? jax-rs feature是否使用某种技巧(例如,来自环境:Osgi HTTP Service)来使自己侦听入站连接,还是仍然需要?也许可以用line 250文件RestDeployer.java的解释来回答我的问题。它到底从哪里拉Server?它总是得到一个,还是依赖于jetty Karaf feature

我看了一下测试,这些测试似乎使用了iPojo或声明性服务(我很难说出区别!)来减少样板代码,但以理解为代价(因为它需要更多的信息,比我目前所掌握的知识要深。)

有关此主题的官方CXF文档不尽人意。

我的理解是,归结为:

这在Osgi中如何一起发挥作用?我还应该提到最熟悉Gradle,并且Maven pom.xml文件可能包含我不认识的内容

我不喜欢接受的CXF web services with OSGI and Karaf答案,因为它特定于Blueprint,由于它依赖于XML,所以我不想使用它。我在这里寻求技术上的解答,以解释CXF和Osgi(例如OSGI HTTP Service)之间的关系。

相关:

解决方法

首先,简要回顾一下OSGi:

  1. OSGi是需要实现的规范
  2. Felix / Equinox是karaf中的两个实现(请参阅etc / config.properties,使用karaf.framework属性检查您使用的一个,可以对其进行更改!)
  3. Karaf是一个管理工具,它将在您执行的每个命令后使用Felix / Equinox。通常,这些命令会被OSGi定义为Felix / Equinox实现的相应行为。

因此,与您的蓝图链接的解决方案仍然是正确的,无论您的上下文如何。但是,如果您不喜欢Blueprint,则可以检查Declarative Services,将在“ spring / blueprint”世界中定义的每个“ bean”变成@ Service / @ Reference(对于OSGi原始方式更纯净)的思维方式)或使用OSGI CDI Integration,如果您习惯了捆绑包中更经典的@ Named / @ Inject思维方式,将会更加直观。

但是最后,这是完全相同的原则:您希望有一个服务器运行将其自身注册到CXF总线(通常您不应该在捆绑软件中声明它,可以使用默认值),然后进行服务注册本身在服务器中。