Karaf的分布式OSGI - 消费者服务无法启动

时间:2016-01-11 21:29:45

标签: osgi apache-zookeeper apache-karaf karaf dosgi

我刚开始使用Zookeeper在Karaff中使用DOSGi。我有一个Karaf实例和另一个消费者提供的服务。 服务方面运作良好。一旦发布,我可以在安装Zookeeper服务器的Karaf控制台中使用log:display命令查看它,我也可以通过浏览器访问wsdl。 问题出在消费者方面。它应该在服务启动时写一条消息(下面的参考代码),但它永远不会发生。 消费者代码:

package org.osgi.proyecto.dev.internal.consumer;


import org.osgi.proyecto.dev.consumer.IConsumer;   
import org.osgi.proyecto.dev.sensor.ISensor;

public class Consumer implements IConsumer {

public void sensorActivo(ISensor sensor){       
    System.out.println("El sensor esta activo");
}   
}

还有component.xml:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"     immediate="true" enabled="true" name="OSGI_Bundle-Consumer">
<implementation class="org.osgi.proyecto.dev.internal.consumer.Consumer"/>
<reference bind="sensorActivo" cardinality="1..1"   interface="org.osgi.proyecto.dev.sensor.ISensor" name="ISensor"  policy="dynamic"/>>
</scr:component>

清单:

  Manifest-Version: 1.0
  Bundle-ManifestVersion: 2
  Bundle-Name: OSGI_Bundle-Consumer
  Bundle-SymbolicName: OSGI_Bundle-Consumer2
  Bundle-Version: 1.0.0.qualifier
  Bundle-RequiredExecutionEnvironment: JavaSE-1.8
  Service-Component: OSGI-INF/component.xml
  Import-Package: org.osgi.framework;version="1.8.0",
   org.osgi.proyecto.dev.sensor

我尝试强制使用消费者捆绑包(启动捆绑包),它给了我这个错误:

  

启动包137时出错:无法解析OSGI_Bundle-Consumer [137](R 137.1):缺少要求[OSGI_Bundle-Consumer [137](R 137.1)] osgi.wiring.package; (osgi.wiring.package = org.osgi.proyecto.dev.sensor)未解决的要求:[[OSGI_Bundle-Consumer [137](R 137.1)] osgi.wiring.package; (osgi.wiring.package = org.osgi.proyecto.dev.sensor)]

似乎存在依赖性错误。解决了在消费者实例中安装传感器束(已安装状态)的问题。 如何避免在两个Karaf实例中安装相同的传感器束?

1 个答案:

答案 0 :(得分:0)

您应该将服务接口放在一个单独的包中。然后,您可以在客户端安装使用者和接口包,在服务器端安装服务和接口包。