1

現在、OSGi アプリケーションのサービスを ds として実装しようとしています。

残念ながら、サービスにアクセスして消費する方法がわかりません。

私のサービスは次のようになります。

public interface IService {
    public void foo(<T> bar);
}
public class ServiceImpl implements IService {
    public void foo( バー){
        ...
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="iservice">
   <implementation class="ServiceImpl"/>
   <service>
      <provide interface="IService"/>
   </service>
</scr:component>

それは私が今いる限りです。

しかし、どうすればサービスにアクセスできますか?

  1. 次の解決策を試しました: http://it-republik.de/jaxenter/artikel/OSGi-in-kleinen-Dosen-Services-auf-deklarative-Weise-2340.html

    しかし、Eclipseは次のインポートを見つけられません

    ComponentContexth**p://www.osgi.org/javadoc/r4v42/org/osgi/service/component/ComponentContext.html

  2. 私もこの解決策を見つけました: h**p://www.eclipsezone.com/eclipse/forums/t97690.rhtml

    しかし、すべてのメソッドをラップする必要があり、Eclipse 固有の API を使用する必要があることに少しがっかりしています。

    このソリューションにも同じ問題があります: https://stackoverflow.com/a/11034485/1737519の例では、Eclipse API ではなく Apache Felix API を使用しています。

私がしたいのは、次のようにサービスにアクセス/参照することだけです:

Iservice s = ???;
s.foo(<T> bar);

事前に助けてくれてありがとう!

PSリンクを隠して申し訳ありませんが、2つ以上含めることはできません!

4

2 に答える 2

2

サービスを利用する方法は次のとおりです。を呼び出す必要がある架空の Billing コンポーネントを作成しましたIService。XML を使用する代わりに、はるかに便利な bnd 注釈を使用しています。

@Component
public class Billing {

    private IService service;

    @Reference
    public void setService(IService service) {
        this.service = service;
    }

    public void billCustomer() {
         // Do some stuff related to billing, whatever.

         // Blah blah blah

         // Now call the service, even though it wasn't real Java because
         // the <T> type parameter was unbound, but who cares...
         service.foo(bar);

         // Yay.
    }

}

于 2012-10-11T23:37:04.310 に答える
0

org.apache.felix.shell.Command を使用します。サービスは osgi コンソール コマンドを提供します。org.apache.felix.shell.impl.Activator.ShellServiceImpl では、org.apache.felix.shell を実装するすべてのサービスを取得します。コマンド インターフェイス。そのため、ユーザーがコマンド名を入力すると、ShellServiceImpl が特別なサービスを実行します。サービスの顧客にインターフェースを知らせるだけです。インターフェースは、サービス プロバイダーとサービスの顧客の間の契約です。

願っています、それは便利です!

于 2012-10-11T13:09:19.420 に答える