0

埋め込み可能なFelixがあります。APIバンドルとImplがあります。APIはインターフェイスをエクスポートしますC。Implはそのインターフェイスをインポートし、implをアクティベーターに登録します。今、私はC implotsideOSGiを入手したい

  FrameworkFactory ff = new FrameworkFactory();
  ...
  BundleContext bc = fwk.getBundleContext();
  ...
  final ServiceReference[] serviceReferences = bc.getServiceReferences(C.class.getName(), "(objectclass=" + C.class.getName() + ")");
  for(ServiceReference serviceReference : serviceReferences){
     final Object service = bc.getService(serviceReference);
     ...
  }

今、私はそれと対話したいと思います。振り返ってできる

     System.out.println(service.getClass().getMethod("some").invoke(service)); //using 

しかし、私はそれをキャストすることはできません

     System.out.println(service instanceof C); //prints false

私はそれが異なるClassLoadersから来ていると思います。しかし、どうすればそれを解決できますか?外部からOSGiコンテキストとどのように相互作用できますか?それとも、すべてをOSGiコンテナーに入れることができますか?

4

1 に答える 1

5

OSGiを埋め込む場合、サービスのAPI(つまり、インターフェース "C")は、外部アプリケーションに表示され、システムバンドルのエクスポートを介してOSGiにエクスポートされる必要があります。外部アプリケーションは、OSGiフレームワーク内に含まれているバンドルからパッケージをインポートできません。

于 2013-03-07T11:44:16.010 に答える