1

我想将 OSGi 包公开为 SOAP Web 服务,或者换句话说,发布由 OSGi 包提供的 Web 服务端点。

架构模型/想法是有一个主机 Web 应用程序,它是部署在 JBoss(5.1.0 GA)上的普通 war 文件,提供 SOAP Web 服务接口(JAX-WS)。
该宿主应用程序启动嵌入的 OSGi 框架(通过 ServletContextListener - 目前是 Equinox)并加载许多用作插件的 OSGi 包。
插件包依赖于主机应用程序,因为请求处理的一部分通过内部定义的接口委托给它们。
同时,插件包还应该能够贡献自己的公共 SOAP Web 服务接口(端点实现和相应的 WSDL 文件将被发布并由应用程序服务器提供)。

我们采用的第一种方法是主机 Web 应用程序部署一个调度程序/代理 servlet,它将处理委托给 OSGi 包提供的相关端点。
OSGi/Equinox (BridgeServlet/HTTPServiceServlet) 中有一个 servlet 桥接解决方案,它可以使用 HTTP 服务规范以编程方式注册 servlet(例如,在插件包的 BundleActivators 中)。
问题是我有基于 SOAP 的 Web 服务端点,并且需要能够将它们包装在 javax.servlet.Servlet 实现中。
这通常是 Java EE 5 服务器的 WS 堆栈实现的内部,它遵循基于 servlet 的 Web 服务方法(端点在 web.xml 中定义为 servlet),并在内部用于为 Web 服务端点安装本机端点 servlet。
我没有找到这样一个可以向 HTTP 服务注册的公共端点 servlet 实现(可能类似于 com.sun.jersey.spi.container.servlet.ServletContainer 可用于为 JAX-RS 发布基于 REST 的服务OSGi 中的应用程序)
我有点惊讶于我没有发现太多关于向 OSGi HTTP 服务注册基于 SOAP 的 WS 端点的信息,或者我可能没有看到明显的情况。

我发现了类似的东西,JAX-WS-Commons/Spring(用于配置 JAX-WS 的弹簧支持,http://jax-ws-commons.java.net/spring/),它在内部使用 JAX- 的类 WSServletDelegate WS RI (metro) 处理端点的 Web 请求。但我不确定,它似乎已被弃用,我需要将 Metro WS 堆栈 jar 提供给 JBoss(或在 war 文件中),以使其在 JBoss 5.1.0 GA 上运行。

另一种方法似乎是分布式 OSGI,它允许发布 OSGi 服务以进行远程访问。
但是,我找不到关于如何在 JBoss 上将这些服务作为 Web 服务提供的明确信息。

其他实现方面有:

  • 我们绑定到 JBoss 5.1.0 GA 并且对 JBoss 配置的更改应该尽可能少(为了对我们客户的设置有最小的限制)
  • 所有 Web 服务都是以契约优先开发的,这意味着提供容器将使用原始 WSDL。
  • 插件组件在依赖关系或技术方面应尽可能简单(以便对插件开发人员的技能要求最低)
  • 我们使用 Spring 3 和 Gemini 蓝图。

最后,有一些模棱两可和不清楚的方面,不幸的是我找不到具有类似要求的项目的报告。

所以,我很想听听专家的一些建议或意见。
也许有一些我看不到的选项,或者也许有人以前实现过类似的项目并且喜欢分享经验。
非常感谢。

4

1 回答 1

0

我不是专家,但我见过的另一种方法是将带有应用程序的整个应用服务器放入 OSGi 容器中。它是 Sling 启动板http://sling.apache.org/documentation/the-sling-engine/architecture.html#launchpad中的一个选项

高温高压

于 2013-08-20T15:00:47.963 回答