代码之家  ›  专栏  ›  技术社区  ›  John Ellinwood

ServiceMix 4、Dosgi和ZooKeeper

  •  2
  • John Ellinwood  · 技术社区  · 16 年前

    这是从 fusesource forum 以及 servicemmix forum

    我不能让DOSGi在保险丝里工作。我想把cxf的dosgi 1.1快照和zookeeper发现放到fuse 4.1.0.2上。我也在用zookepr3.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 为了Zookepr的发现。然后,当我在一台机器上用示例服务impl启动示例包时,我在zookeeper中看到了节点的创建。然后我在另一台机器上启动示例客户机,并在服务机器上看到输出。效果很好。我确实收到了一个警告,因为找不到某些xsd,所以忽略了一个xml错误,但它似乎没有任何影响。哦,我还得先安装osgi概要包。

    当我移动到引信,我没有这样的运气。osgi概要包附带fuse,因此不需要安装它。我应该可以安装dosgi ri single bundle和dosgi ri discovery singlebundle,但这不起作用。dosgi ri singlebundle有各种与servicemix重叠的bundle。关于端口8081有错误吗?或者不管osgi.http.service参数是什么,都已经在使用了。显然,dosgi ri singlebundle附带了pax webservice,它读取的属性与servicemix附带的servicemix http服务bundle相同。当我切换到 cxf-dosgi-ri-multibundle-distribution-1.1-SNAPSHOT.zip 然后把它解开拿我想要的零件。我从dosgi ri multibundle中取出dsw包并安装它。由于jdom的依赖性,运气不好。然后我安装ri multibundle中的jdom,它工作得很好。然后回到DSW,安装好了,所以我想我有了进展。是时候回去安装ri discovery singlebundle了。当我启动时,我得到了一个PAX日志服务CLSASSCASTExchange,称它不能被转换成OSGi日志服务或其他东西。但这只是一个日志错误,在底部它说找不到传输类。 http://schemas.xmlsoap.org/soap/http . 好吧,日志记录搞砸了,我错过了一些传输类。很明显,这是因为没有安装足够的ri multibundle,因为它在felix上工作。所以里面还有什么是必要的。检查时,cxf minimal bundle缺少导致最后一个错误的类。所以我安装了它。尝试启动发现包,但我最终遇到了某种corbabroker异常。世界跆拳道联盟。谁在这一切中使用corba?然后我返回并撤销所有这些操作,尝试使用ri和ri discovery的单包发行版,但只需关闭servicemix http服务。这会导致ServiceMix崩溃,我无法重新启动它,因为CXF JBI组件最终会产生不满意的依赖关系。奇怪的。我会忽略这一点,因为我不使用这些反正,并试图开始我的样品。无法启动示例,因为它说Jetty无法启动,因为端口已在使用中。没有意义,因为我已经关闭了servicemix http服务。然后我重新启动码头。作品?也许吧。我的服务注册了,我可以使用firefox浏览wsdl,但是在zookeeper中没有注册。尝试关闭ri发现包并重新启动它,但是我得到了一个nullpointerexception。幸运的是,由于上述错误之一,ri发现实际上从未启动。然后我开始尝试拆开ri-discovery单包并取出内部。这不起作用,因为这一切显然是必要的,即使我们可以没有一些lib。

    故事结束了。不能让它工作。有人能让它工作吗?我只想在SMX4中运行发现示例。我敢肯定这只是一个捆绑冲突的问题。这不是osgi应该解决的问题吗????这比告诉我你所依赖的jar并让我设置我的类路径更糟糕。至少我最终会让它运转起来。

    我想,我接下来的步骤是再次尝试使用ri multibundle,只使用dsw和jdom,外加ri discovery singlebundle。然后,我将尝试使用一些cxf保险丝束或一些cxf rt束来解决soap传输问题。

    编辑说明:我需要的不仅仅是显示处于活动状态的dosgi包。在您尝试通过它们公开服务之前,它们实际上不会做很多事情。我确实需要看到多台机器在ZooKeeper实例中注册服务,而其他机器使用这些服务——就像正在运行的Dosgi发现示例一样。

    我已经能够让cxf将分布式服务示例公开为soap web服务,方法是使用最小的cxf包,即删除原始cxf包的一部分并重新启动jetty服务,然后启动示例服务……或者安装cxf minimal buundle,然后启动我的服务,然后立即卸载cxf minimal bundle,然后重新启动jetty…我想这就是命令。这两种方法都不能在干净的启动时工作,而且必须重新启动服务作为一个过程来让dosgi工作是很糟糕的。我甚至不知道为什么安装然后卸载可以做任何事情——它不应该留下任何工件。

    1 回复  |  直到 7 年前
        1
  •  1
  •   SteveD    16 年前

    第一点,看看cxf dosgi的巨型包,我认为这只是为了在一个简单的osgi运行时进行快速的n-dirty黑客攻击,基本上是equinox和felix提供的最小环境。它不会用于fuse或servicemix等更丰富的环境,因为您可能会在bundle和平台的服务上发生冲突,正如您所看到的那样。

    我能够得到Service EMIX 4开始干净(这是在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 interface