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)]
依存エラーがあるようです。これは、コンシューマー インスタンスにセンサー バンドル (Installed 状態) をインストールすることで解決されます。両方の Karaf インスタンスに同じセンサー バンドルをインストールしないようにするにはどうすればよいですか?