0

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 インスタンスに同じセンサー バンドルをインストールしないようにするにはどうすればよいですか?

4

1 に答える 1

0

サービス インターフェイスは別のバンドルに入れる必要があります。次に、コンシューマー側にコンシューマーとインターフェイス バンドルをインストールし、サーバー側にサービスとインターフェイス バンドルをインストールできます。

于 2016-01-11T22:15:03.583 に答える