0

リモート OSGi サービスを既存の RCP アプリケーション (Mars ベース) で動作させようとしています。ただし、機能していないようです。アプリケーションの 2 つのインスタンスが、他のインスタンスで公開されているサービスを認識しません。

最新の ECF SDK をターゲット プラットフォームに追加し、次のバンドルを製品ランタイムに追加しました。

  • org.eclipse.ecf.discovery
  • org.eclipse.ecf.provider
  • org.eclipse.ecf.provider.remoteservice
  • org.eclipse.ecf.sharedobject
  • org.eclipse.equinox.concurrent
  • org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy
  • org.eclipse.osgi.services.remoteserviceadmin
  • org.eclipse.ecf.remoteservice.asyncproxy
  • org.eclipse.ecf.remoteservice
  • org.eclipse.ecf.osgi.services.distribution
  • org.eclipse.ecf.provider.jmdns
  • ch.ethz.iks.r_osgi.remote
  • org.eclipse.ecf.provider.r_osgi
  • org.eclipse.ecf.console
  • org.eclipse.ecf.provider.dnssd
  • org.xbill.dns
  • org.eclipse.ecf.provider.discovery

バンドル アクティベーターの 1 つで、サービスを start method() に登録するために次のようにしています。

ServiceTracker _containerManagerServiceTracker = new ServiceTracker(_context, IContainerManager.class.getName(), null);
_containerManagerServiceTracker.open();

IContainerManager containerManager = (IContainerManager) _containerManagerServiceTracker.getService();

IContainer container = containerManager.getContainerFactory().createContainer("ecf.r_osgi.peer");


IMyService myService = new MyService();
Properties props = new Properties();
props.put(IDistributionConstants.SERVICE_EXPORTED_INTERFACES, IDistributionConstants.SERVICE_EXPORTED_INTERFACES_WILDCARD);
props.put(IDistributionConstants.SERVICE_EXPORTED_CONFIGS, "ecf.r_osgi.peer");
// register remote service
context.registerService(IMyService.class, myService, props);

2 番目のインスタンスが報告したように、何かが機能していることはわかっています。

"WARNING: Port 9278 already in use. This instance of R-OSGi is running on port 9279"

また、zeroconf ブラウザに「_ECFOSGIRSVC」と表示されるレコードが 1 つあります。

多数のチュートリアルは、このサービスが他のインスタンスで魔法のように利用できるようになることを示しているようです。ただし、何も表示されません (アプリケーション コンソールで「サービス」を実行すると、ローカル サービスのみが一覧表示されます)。いくつかの質問;

  • 必要なのは本当にこれだけですか?
  • これをデバッグするにはどうすればよいですか?
    • サービスが本当に輸出されているかどうかはどうすればわかりますか?
    • 他のインスタンスが本当にそれを探しているかどうかを知るにはどうすればよいですか?
  • a) コンテナーのエンドポイントを報告し、「手動で」他のインスタンスに接続することは可能ですか?

「HelloService」のチュートリアルがたくさんあり、内容がまったく同じではないため、最初は非常に混乱します。

4

1 に答える 1

0

Riena Communicationを試すと 、リモート サービスの公開とバインドがより簡単になります。通信プロトコルとしてヘシアンを使用します。バイナリベースのプロトコル (xml ではない) であるため、soap などと比較して非常に高速です。

これが役立つことを願っています。

于 2016-05-03T09:45:28.587 に答える