在 Felix 中启动 CXF (JAX-RS) Web 资源和 运行 的最低要求是什么?
What are the minimum requirements to get a CXF (JAX-RS) Web Resource up and running in Felix?
我想在 OSGI(特别是 Apache Karaf 运行 Apache Felix)中获取 CXF, which implements JAX-RS、up 和 运行。
使用this project: cxf-osgi-activator as an example, I see that the engineer made a design decision to split up the jetty Karaf feature from the jax-rs Karaf feature. Is there a dependency between the two at runtime? Does the jax-rs feature use some trick (from the environment: OSGI HTTP Service, for example) to get itself listening for inbound connections, or is that still needed? Maybe my question can be answered with an explanation of line 250 of the RestDeployer.java file. Where is it pulling its Server from exactly? Does it always get one, or does it have a dependency on the jetty Karaf feature?
我看了一下测试,它们似乎使用 iPojo 或声明式服务(我很难区分它们!)来减少样板代码,但以理解为代价(因为它需要更多对这个主题的深入了解比我现在看起来的要多。)
官方 CXF 文档在这个问题上不太理想。
我的理解是归结为:
- 一个用 JAX-RS 注释注释的 Web 资源文件,用于将入站调用映射到本地函数
- CXF 运行时(一些注册服务管理从接收到序列化信息的调用到 return 的生命周期)
- 一个服务器(Java Servlet 或有效的为给定端口生成线程的抽象)
这一切在 OSGI 中如何一起发挥作用?我还应该提一下,我最熟悉 Gradle,而 Maven pom.xml 文件可能包含我不认识的东西。
我不喜欢 , because it is specific to Blueprint, which I do not want to use because of its reliance on XML. I am looking for a technical answer here that explains the relationship between CXF and OSGI (like the OSGI HTTP Service) 的已接受答案。
相关:
- Apache CXF/JAX-RS, Felix and Jetty
首先,简单回顾一下 OSGi :
- OSGi 是一个需要实现的规范
- Felix/Equinox 是在 karaf 中找到的两个实现(请参阅您的 etc/config.properties,使用 属性 karaf.framework 检查您使用的那个,您可以更改它!)
- Karaf 是一个管理工具,它将在您发出的每个命令后面使用 Felix/Equinox。通常,这些命令被代理到 OSGi 为 Felix/Equinox 实现定义的相应行为。
因此,无论您的上下文如何,您与 Blueprint 关联的解决方案仍然适用。但是,如果您不喜欢 Blueprint,您可以检查 Declarative Services where each "bean" you would have defined in a "spring/blueprint" world would become @Service/@Reference (more pure to OSGi original way of thinking) or use OSGI CDI Integration 如果您习惯了更经典的 @Named/@Inject 包内思维方式,这将更加直观。
但最终,它的原则完全相同:你想让服务器 运行 将自己注册到 CXF 总线(通常你不应该在你的包中声明,你可以使用默认值一)和您的服务在服务器中注册自己。
我想在 OSGI(特别是 Apache Karaf 运行 Apache Felix)中获取 CXF, which implements JAX-RS、up 和 运行。
使用this project: cxf-osgi-activator as an example, I see that the engineer made a design decision to split up the jetty Karaf feature from the jax-rs Karaf feature. Is there a dependency between the two at runtime? Does the jax-rs feature use some trick (from the environment: OSGI HTTP Service, for example) to get itself listening for inbound connections, or is that still needed? Maybe my question can be answered with an explanation of line 250 of the RestDeployer.java file. Where is it pulling its Server from exactly? Does it always get one, or does it have a dependency on the jetty Karaf feature?
我看了一下测试,它们似乎使用 iPojo 或声明式服务(我很难区分它们!)来减少样板代码,但以理解为代价(因为它需要更多对这个主题的深入了解比我现在看起来的要多。)
官方 CXF 文档在这个问题上不太理想。
我的理解是归结为:
- 一个用 JAX-RS 注释注释的 Web 资源文件,用于将入站调用映射到本地函数
- CXF 运行时(一些注册服务管理从接收到序列化信息的调用到 return 的生命周期)
- 一个服务器(Java Servlet 或有效的为给定端口生成线程的抽象)
这一切在 OSGI 中如何一起发挥作用?我还应该提一下,我最熟悉 Gradle,而 Maven pom.xml 文件可能包含我不认识的东西。
我不喜欢
相关:
- Apache CXF/JAX-RS, Felix and Jetty
首先,简单回顾一下 OSGi :
- OSGi 是一个需要实现的规范
- Felix/Equinox 是在 karaf 中找到的两个实现(请参阅您的 etc/config.properties,使用 属性 karaf.framework 检查您使用的那个,您可以更改它!)
- Karaf 是一个管理工具,它将在您发出的每个命令后面使用 Felix/Equinox。通常,这些命令被代理到 OSGi 为 Felix/Equinox 实现定义的相应行为。
因此,无论您的上下文如何,您与 Blueprint 关联的解决方案仍然适用。但是,如果您不喜欢 Blueprint,您可以检查 Declarative Services where each "bean" you would have defined in a "spring/blueprint" world would become @Service/@Reference (more pure to OSGi original way of thinking) or use OSGI CDI Integration 如果您习惯了更经典的 @Named/@Inject 包内思维方式,这将更加直观。
但最终,它的原则完全相同:你想让服务器 运行 将自己注册到 CXF 总线(通常你不应该在你的包中声明,你可以使用默认值一)和您的服务在服务器中注册自己。