1

ヘッダーに記載されているように、OSGI 環境でリモート サービスを使用したいと考えています。そこで、これをEclipse ECFで処理することにしました。私の意見では、OSGI リモート サービスを扱うための非常に優れたプロジェクトです。そのため、ディスカバリー プロバイダーには Zoodiscovery を使用します。サービスは、一般的なサービス プロパティに登録されます。さらに、Zoodiscovery は集中モードで使用され、中央の IP はネットワーク ブロードキャストで公開されます。私はすべてを働かせました。しかし、一定期間が経過すると、サービス コンシューマはリモート サービスを失います。

リモート サービスが検出されると、次のメッセージが表示されます。

[log;+0000 2016.04.22 15:26:03:564;DEBUG;org.eclipse.ecf.provider.zookeeper;Service Discovered: ServiceInfo[uri=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;id=ServiceID[type=ServiceTypeID[typeName=_ecfosgirsvc._default.default._iana];location=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;full=_ecfosgirsvc._default.default._iana@ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=];priority=0;weight=0;props=ServiceProperties[{objectClass=de.custom.service.api.IManagerService, endpoint.id=e9dc7ac1-708d-43a6-b2fa-539beff6c732, remote.intents.supported=passByValue exactlyOnce ordered, ecf.endpoint.id=ecftcp://192.168.178.21:2121/server, ecf.rsvc.id=3, endpoint.service.id=174, service.imported.configs=ecf.generic.server, ecf.endpoint.ts=1461329304080, ecf.generic.server.hostname=192.168.178.21, ecf.endpoint.id.ns=org.eclipse.ecf.core.identity.StringID, remote.configs.supported=ecf.generic.server, endpoint.package.version.de.custom.api=1.0.0, endpoint.framework.uuid=70eaf65a-8608-0016-13af-dcea8562a726}]]]

リモート サービスが検出されない場合、次のメッセージが表示されます。

[log;+0000 2016.04.22 15:28:53:125;DEBUG;org.eclipse.ecf.provider.zookeeper;Service Undiscovered: ServiceInfo[uri=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;id=ServiceID[type=ServiceTypeID[typeName=_ecfosgirsvc._default.default._iana];location=ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=;full=_ecfosgirsvc._default.default._iana@ecfosgirsvc://192.168.178.21:32565/osgirsvc_AMIsPeVObufIp5v5cV6pHNIvzGM=];priority=0;weight=0;props=ServiceProperties[{objectClass=de.custom.service.api.IManagerService, endpoint.id=e9dc7ac1-708d-43a6-b2fa-539beff6c732, remote.intents.supported=passByValue exactlyOnce ordered, ecf.endpoint.id=ecftcp://192.168.178.21:2121/server, ecf.rsvc.id=3, endpoint.service.id=174, service.imported.configs=ecf.generic.server, ecf.endpoint.ts=1461329304080, ecf.generic.server.hostname=192.168.178.21, ecf.endpoint.id.ns=org.eclipse.ecf.core.identity.StringID, remote.configs.supported=ecf.generic.server, endpoint.package.version.de.custom.api=1.0.0, endpoint.framework.uuid=70eaf65a-8608-0016-13af-dcea8562a726}]]]

BUT: ホスト システムではすべて問題なく、サービスはオンラインです。コンシューマ側で OSGI フレームワークを再起動すると、この Undiscovery イベントまですべて正常に動作します。発見から未発見までの期間は同じ長さです。

サービスを発見しないタイムアウトがあるようです。メソッドを呼び出してサービスを使用する場合、異なる動作はありません。何が起こっているのか誰にも分かりますか?

助けてくれてありがとう、そしてよろしく!

アップデート:

わかりました 1 つの更新: リモート サービスが検出されたら、クライアント側のローカル パラメーターで取得しました。リモート サービスがクライアント側で公開されていない場合 (以前の投稿で説明したように、サーバー側ではありません)、取得したインスタンスからメソッドを呼び出すことができます。そのため、プロキシは引き続き利用可能であり、サーバー側でリモート サービスを非公開にするまで正常に動作しています。そのため、プロキシは OSGI サービス レジストリでのみ非公開になります。

よろしくお願いします!

4

0 に答える 0