OSGi ConfigurationAdmin仕様では、ManagedService
とManagedServiceFactory
の実装では、ConfigurationException
を投げて無効な着信構成を通知する可能性があると記載されています。しかし、この声明とは別に、このスペックは、さまざまなアクターがどのように状況を処理すべきか、そして最も重要なのは、そのような例外の後に環境の状態がどうなるべきかについては言及していません。ManagedServiceFactoriesで例外を適切に処理する方法は?
たとえば、ManagedServiceFactory
は現在、有効なプロパティーセットを持つサービスインスタンス(service.pid = example.12345)を持っているとします。そのサービスインスタンスは工場によってサービスレジストリに公開されます。次に、そのサービスインスタンスの構成更新が工場に通知されます。ただし、検証時に、更新メソッドは受信プロパティが無効であると判断します。その仕様に基づいて、工場はConfigurationException
を投げるべきです。
しかし、それ以外のことが行われなければ、環境は不安定な状態のままです。レジストリには、もはや存在しない設定に基づいて公開されたサービスがあります。その結果、ManagedServiceFactory
サービスが再起動されるたびに(たとえば、バンドルの更新やフレームワークの再起動が原因で)、以前の有効な構成が失われたそのサービスを再インスタンス化することはできません。これにより、Configuration Adminサブシステムの永続パラダイムが破られ、一部のOSGi環境の安定性に関する重大な問題が発生します。
残念なことに、最初のコンフィグレータバンドルがコンフィグレーションの変更によってコンフィグレーションが変更されたことを検出するのは簡単ではなく、一般的にはその場所から安定したコンフィグレーションを復元することはほとんど不可能です。このような状況では、ConfigurationAdminが以前の有効な構成を(永続的に)復元することがより適切になると思われますが、残念なことにそのような動作は仕様には言及されていません。フェリックスの実装におけるそのようなメカニズム。
環境の安定性を維持する唯一の可能性は、ManagedServiceFactory
実装が最初に無効な構成プロパティを受け取った既存のサービスインスタンスを登録解除して破棄し、委任されたConfigurationException
。これにより、その時点でフレームワークが再起動された場合と同じ環境状態になります。同様に、ManagedService
の実装では、最初に完全にデフォルト設定を復元して無効な設定を処理し、ConfigurationException
を投げる必要があります。
したがって、ManagedService
とManagedServiceFactories
構成のアップデートのエラーをどのくらい正確に処理する必要がありますか?私の理解は正しいのですか?例/オープンソースの実装であるManagedService
とManagedServiceFactory
の中からわかるように、この側面はほとんどの開発者によって全く無視されているようです。スペックは対象に関する説明を提供していますか?
私は「ログして解決して祈ってください」戦略に同意できません。私のOSGiアプリケーションのいくつかは、お客様のサイトに組み込まれた組み込み機器として配備されています。この文脈では、「システムオペレータ」は、基本的に、基本的な技術的知識よりも少しだけローカルユーザを指定します。設定の更新を行うたびにログのエラーを適切に調べることが非常に重いので、最終的なエラーはほとんど検出されなくなります。システムが最初は動作するように見えますが、後で再起動しないと、ユーザーがもう周りにいないときに受け入れられません。 – jwatkins
私が記述する戦略については、実際には非常に簡単で予測可能です。彼らは無効な設定を修復しようとはしませんが、以前は有効な設定を復元するか、 'MangedService 'をリセットしてシステムを灰色のゾーンから抜け出すだけです(システムは正常に動作したようですが、システムがその時点で再起動された場合と同じ状態になり、システム管理者に設定の問題がすぐに見えるようになります。 – jwatkins
しかし、私はこの問題に対する解決策はほとんどないということには同意します。とにかく、私はいくつかの重要な点を見逃していないことを確認し、この問題に関する他の開発者の経験を得るためにここに質問を掲載しました。共有してくれてありがとう。私はosgi-devメーリングリストに質問を再投稿します:私は、主題のいくつかの一般的な勧告が形式化されることが望ましいと思う... – jwatkins