2

这是从fusesource 论坛servicemmix 论坛交叉发布的。

我无法让 DOSGi 在 FUSE 中工作。我正在尝试通过 Zookeeper 发现将 CXF 的 DOSGi 1.1-SNAPSHOT 放到 FUSE 4.1.0.2 上。我也在使用 Zookeepr 3.2.1。

一切都在 Felix 2.0.0 上完美运行。我只是按照DOSGi Discovery 页面上的说明安装Discovery Demo包。对于 DOSGi,我只使用cxf-dosgi-ri-singlebundle-distribution-1.1-SNAPSHOT.jar用于 DSW 和 cxf-dosgi-ri-discovery-singlebundle-distribution-1.1-SNAPSHOT.jar 用于 zookeeper 发现。然后,当我在一台机器上使用示例服务 impl 启动示例包时,我会在 zookeeper 中看到节点创建。然后我在另一台机器上启动示例客户端,并在服务机器上看到输出。效果很好。我确实有一个关于 xml 错误被忽略的警告,因为找不到一些 XSD,但它似乎没有任何影响。哦,我还必须先安装 OSGi 纲要包。

当我搬到 Fuse 时,我没有这样的运气。OSGi 纲要包附带了 fuse,因此无需安装它。我应该只能安装 dosgi-ri 单包和 dosgi-ri-discovery 单包,但这不起作用。dosgi-ri singlebundle 有各种与 servicemix 重叠的包。我收到有关端口 8081 的错误?或者无论 osgi.http.service 参数是什么,都已经在使用中。显然,dosgi-ri singlebundle 带有 pax webservice,它读取与 servicemix 附带的 servicemix http 服务包相同的属性。那是当我切换到 cxf-dosgi-ri-multibundle-distribution-1.1-SNAPSHOT.zip并解压缩以获取我想要的部分。我从 dosgi-ri multibundle 中取出 dsw 包并安装它。由于 jdom 依赖性,没有运气。然后我安装了 ri multibundle 中的 jdom,它工作正常。然后回到dsw,安装,所以我想我到了某个地方。是时候回去安装 ri-discovery 单包了。当我开始时,我得到一个 pax 日志服务 classcastexception 说它不能转换为 osgi logservice 或其他东西。但这只是一个日志记录错误,在底部它说它找不到http://schemas.xmlsoap.org/soap/http的传输类. 好的,所以日志记录被搞砸了,我错过了一些运输类。好吧,很明显,这是由于 ri multibundle 没有安装足够的东西,因为它在 felix 上工作。所以里面还有什么是必要的。检查时的 cxf-minimal-bundle 缺少导致最后一个错误的类。所以我安装它。尝试启动发现包,但我最终遇到了某种 corbabroker 异常。重量级 谁在这一切中使用了 corba?然后我返回并撤消所有这些并尝试坚持使用 ri 和 ri-discovery 的单包发行版,但只需关闭 servicemix http 服务。这会使 servicemix 崩溃,我无法重新启动它,因为 cxf jbi 组件最终会产生不满意的依赖关系。奇怪的。我会忽略这一点,因为无论如何我都不使用它们,并尝试开始我的示例。能' t 启动示例,因为它说码头无法启动,因为端口已在使用中。没有意义,因为我已经关闭了 servicemix http 服务。然后我重新启动码头。作品?也许。我的服务已注册,我可以使用 firefox 浏览到 wsdl,但在 zookeeper 中没有注册。尝试关闭 ri-discovery 包并重新启动它,但我得到一个空指针异常。显然,由于上述错误之一,ri-discovery 从未真正启动。然后我开始尝试拆开 ri-discovery 单包并取出内部部件。这不起作用,因为它显然是必要的,即使里面有一些我们可以不用的库。没有意义,因为我已经关闭了 servicemix http 服务。然后我重新启动码头。作品?也许。我的服务已注册,我可以使用 firefox 浏览到 wsdl,但在 zookeeper 中没有注册。尝试关闭 ri-discovery 包并重新启动它,但我得到一个空指针异常。显然,由于上述错误之一,ri-discovery 从未真正启动。然后我开始尝试拆开 ri-discovery 单包并取出内部部件。这不起作用,因为它显然是必要的,即使里面有一些我们可以不用的库。没有意义,因为我已经关闭了 servicemix http 服务。然后我重新启动码头。作品?也许。我的服务已注册,我可以使用 firefox 浏览到 wsdl,但在 zookeeper 中没有注册。尝试关闭 ri-discovery 包并重新启动它,但我得到一个空指针异常。显然,由于上述错误之一,ri-discovery 从未真正启动。然后我开始尝试拆开 ri-discovery 单包并取出内部部件。这不起作用,因为它显然是必要的,即使里面有一些我们可以不用的库。显然,由于上述错误之一,ri-discovery 从未真正启动。然后我开始尝试拆开 ri-discovery 单包并取出内部部件。这不起作用,因为它显然是必要的,即使里面有一些我们可以不用的库。显然,由于上述错误之一,ri-discovery 从未真正启动。然后我开始尝试拆开 ri-discovery 单包并取出内部部件。这不起作用,因为它显然是必要的,即使里面有一些我们可以不用的库。

故事的结局。无法让它工作。其他人可以让它工作吗?我只想在 SMX4 中运行发现示例。我很确定这只是一个捆绑冲突问题。这不是 OSGi 应该解决的问题吗???这比告诉我你依赖什么 jar 并让我设置我的类路径更糟糕。至少那时我最终会让事情运行起来。

我认为,我接下来的步骤将是再次尝试使用 ri-multibundle、dsw 和 jdom,以及 ri-discovery singlebundle。然后我会尝试一些 cxf-fuse 包或一些 cxf-rt 包来解决肥皂传输问题。

编辑说明:我需要的不仅仅是显示处于活动状态的 DOSGi 包。在您尝试通过它们公开服务之前,它们实际上并没有做太多事情。我确实需要看到多台机器向 zookeeper 实例注册服务以及其他使用这些服务的机器——就像正在运行的 DOSGi Discovery Sample 一样。

通过使用提到的最小 cxf 捆绑包,我已经能够让 cxf 将分布式服务示例公开为肥皂网络服务,方法是删除部分原始 cxf 捆绑包并重新启动码头服务,然后启动示例服务......或通过安装 cxf 最小捆绑包,然后启动我的服务,然后立即卸载 cxf 最小捆绑包,然后重新启动码头......我认为这是顺序。这些都不会从干净的启动中工作,并且必须重新启动服务作为使 DOSGi 工作的过程是很糟糕的。我什至不知道为什么安装然后卸载会做任何事情——它不应该留下任何工件。

4

1 回答 1

1

首先,看看 CXF DOSGi 巨型捆绑包,我认为这仅适用于裸 OSGi 运行时中的快速-n-dirty 黑客攻击,基本上是 Equinox 和 Felix 提供的最小环境。它不适用于 FUSE 或 Servicemix 等更丰富的环境,因为您可能会在捆绑包和平台的服务上发生冲突,正如您所看到的那样。

我能够让 Servicemix 4.0 干净地启动(这是在 Windows 上),然后我进行了热部署:

  • com.springsource.org.jdom-1.0.0.jar
  • cxf-bundle-minimal-2.2.1.jar
  • cxf-dosgi-ri-discovery-local-1.0.jar
  • cxf.dosgi-ri-dws.cxf-1.0.jar

使用 Servicemix 控制台,我列出了所有捆绑包,并看到上述所有捆绑包都处于Active状态(如预期的那样)。我列出了这些服务,并且 2 个 CXF DOSGi 捆绑包正在导出服务,因此看起来工作正常。日志中没有报告错误。

您对 OSGi 的熟悉程度如何?Servicemix 看起来很大,一起学习 OSGi、Servicemix 和 CXF/DOSGi 并不容易(在我看来)。

提供的控制台不适用于 OSGi 的东西,我建议为Web 界面安装 Apache Felix 控制台包。

于 2009-09-29T10:46:50.313 回答