2009-09-26 43 views
2

这是从fusesource forumservicemmix forum交叉发布的。Servicemix 4,DOSGi和Zookeeper

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

菲利克斯2.0.0的一切都完美运作。我只需按照DOSGi Discovery页面上的说明进行操作,然后再安装Discovery Demo软件包。对于DOSGi,我只是使用DSW的cxf-dosgi-ri-singlebundle-distribution-1.1-SNAPSHOT.jarcxf-dosgi-ri-discovery-singlebundle-distribution-1.1-SNAPSHOT.jar来进行zookeepr发现。然后,当我在一台机器上启动样本服务impl的样本包时,我看到zookeeper中创建了节点。然后我在另一台机器上启动示例客户端,并在服务器上看到输出。很棒。我确实有一个关于xml错误被忽略的警告,因为一些XSD没有找到,但它似乎没有影响任何东西。哦,我还必须先安装OSGi汇编包。

当我搬到Fuse时,我没有这样的运气。 OSGi汇编包含保险丝,因此无需安装。我应该能够安装dosgi-ri singlebundle和dosgi-ri-discovery单个bundle,但这不起作用。 dosgi-ri singlebundle与servicemix有各种重叠的bundle。我收到有关端口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多包中的jdom,工作正常。然后回到dsw,然后安装,所以我认为我在某个地方。有时间回去安装ri-discovery单捆。当我开始时,我得到一个pax日志服务classcastexception,说它不能转换成osgi logservice或其他东西。但那只是一个记录错误,在底部它说它找不到http://schemas.xmlsoap.org/soap/http的运输类。好吧,记录被搞砸了,我错过了一些交通班。那么,显然这是因为它没有安装足够的ri多包,因为它工作在felix上。那么还有什么是必要的。检查后的cxf-minimal-bundle包含导致最后一个错误的缺失类。所以我安装它。尝试启动发现捆绑包,但最终会出现某种corbabroker异常。跆拳道。所有这些谁使用corba?然后我回去并撤消所有这些,并尝试坚持ri和ri-discovery的单一发行版,但只需关闭servicemix http服务即可。这崩溃了servicemix,我无法重新启动它,因为cxf jbi组件最终导致不满足的依赖关系。奇。我会忽略这一点,因为我不使用这些,并尝试开始我的样本。无法启动样本,因为它说由于端口已被使用,码头无法启动。没有意义,因为我已经关闭了servicemix http服务。然后我重新启动码头。作品?也许。我的服务已注册,我可以使用Firefox浏览到wsdl,但没有在zookeeper中注册。尝试关闭ri-discovery包并重新启动它,但是我得到一个nullpointerexception。实际上,由于上​​述错误之一,ri-discovery从未真正开始。然后我开始尝试拆分ri-discovery单一捆绑并将内部结构拉出。这不起作用,因为它显然是必要的,尽管在我们内部的一些库存可能没有。

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

我认为我的下一步将是再次尝试使用ri-multibundle,即dsw和jdom,再加上ri-discovery单捆。然后我会尝试一些cxf-fuse束或一些cxf-rt束以解决肥皂传输问题。

编辑说明:我需要的不仅仅是将DOSGi包显示为活动状态。直到你尝试通过他们公开服务时,他们实际上并没有太多的工作。我确实需要看到多台机器使用zookeeper实例和其他使用这些服务的机器注册服务 - 就像正在运行的DOSGi Discovery Sample一样。

我已经能够通过使用最小cxf捆绑包来揭示分布式服务示例作为soap web服务,通​​过删除部分原始cxf捆绑包并重新启动jetty服务,然后启动示例服务...或者通过安装cxf最小bunding,然后启动我的服务,然后立即卸载cxf minimal bundle,然后重新启动jetty ...我认为这是订单。这些都不会从一个干净的启动工作,并且不得不重新启动服务作为一个程序来让DOSGi工作是不好的。我甚至不知道为什么安装然后卸载会做任何事情 - 它不应该留下任何文物。

回答

1

第一点,看着CXF DOSGi超级捆绑包我认为这只适用于裸OSGi运行时的快速n-dirty黑客入侵,基本上是Equinox和Felix提供的最小环境。它不会用于FUSE或Servicemix等更丰富的环境,因为您可能会碰到捆绑软件和平台的服务,就像您看到的一样。

我能得到的ServiceMix 4.0干净启动(这是在Windows上),然后我热部署:

  • com.springsource.org.jdom-1.0.0.jar
  • CXF -bundle-最小-2.2.1.jar
  • CXF-dosgi里发现本地-1.0.jar
  • cxf.dosgiりdws.cxf-1.0.jar

使用我列出的Servicemix控制台所有捆绑,并看到以上所有都在Active状态(如预期)。我列出了服务和2个CXF DOSGi软件包正在导出服务,所以看起来工作正常。日志中没有报告错误。

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

提供的控制台对于OSGi的东西并不是很好,我建议安装Apache Felix控制台包以获得web interface

+0

没有真正启动一个标记为发现的服务,就像我在原始文章中提到的样本发现服务,没有任何内容会通过CXF公开,所以即使它活跃,也没有实际使用cxf-bundle-minimal。 – 2009-09-29 11:26:15

+0

此外,即使您可以启动标记为发现的服务,并将它暴露为带有您提及的cxf软件包的soap webservice,但是没有分布式发现,您将不会与zookeeper进行通信。您列出的配置无法包含cxf-dosgi-ri-discovery-singlebundle-distribution-1.1-SNAPSHOT.jar,其中包含cxf-dosgi-ri-discovery-distributed-1.1-SNAPSHOT.jar和cxf-dosgi-ri- discovery-distributed-zookeeper-wrapper-1.1-SNAPSHOT.jar,以及它自己明显重要的服务聚合。 – 2009-09-29 11:27:03

+0

为了回答你的问题,我非常喜欢OSGi容器本身,通过felix和equinox以及OSGi规范。不过,这些捆绑冲突正在杀死我。 – 2009-09-29 11:37:01