这是从
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工作是很糟糕的。我甚至不知道为什么安装然后卸载可以做任何事情——它不应该留下任何工件。