3

OSGi employs a service-oriented architecture: Bundles register service objects, that other bundles consume. Service publishing and binding is managed by the framework. This decouples service providers from service users completely (except for the need to agree on a service interface).

Is there a way to limit (by configuration) what services are visible to what bundles ?

For example, if I have an HttpService, all bundles that feel like doing so can install servlets into it. I would like to make the HttpService not visible to selective bundles.

For extra credits: In addition to just filtering service registrations, the ability to modify registration properties. So that even if a bundle registers a Servlet with alias=/admin, I can change that to alias=/somethingelse for consumption by Pax Web Extender Whiteboard.

4

6 に答える 6

2

どのサービスがどのバンドルに表示されるかを (構成によって) 制限する方法はありますか?

ご存じのように、サービス プロパティでフィルター処理することは可能ですが、これはおそらくあなたが求めている種類の制御を提供しません。サービスは、フレームワークにデプロイされた他のバンドルに引き続き表示されます。

SpringSource の dm サーバー (オープンソース、モジュラー、OSGi ベースの Java アプリケーション サーバー) では、アプリケーションのデプロイ時にスコープを指定できます。これにより、一貫性のないバージョンの依存バンドルを含む可能性のある複数のアプリケーションを (個別のスコープで) デプロイできますが、共通のバンドルを共有することもできます (スコープ外 (いわゆるグローバル スコープ) でそれらをデプロイすることにより)。

範囲指定されたアプリケーション/バンドルが OSGi サービスを登録する場合、それは同じ範囲内のバンドルでのみ利用可能です。(サービスも「範囲指定」されます。)

これは魔法ではありません。サーバーは OSGi サービス インターフェイスをラップし、サービス プロパティを「内部」で使用して、必要なフィルタリングをオンザフライで実行します。

これにより、あなたが探している種類の分離が得られると思います。

dm サーバー (Spring DM と混同しないでください) に関する情報については、SpringSource.org dmServer ページにアクセスしてください。

スティーブ・パウエル
SpringSource; dmサーバー開発

于 2009-05-15T16:27:59.500 に答える
2

OSGi 仕様の今後の R4.2 では、
「返されたサービス参照のセットを検査し、オプションで返されたサービスのセットを縮小する」 ことを正確に許可する Find Hook と呼ばれるコンポーネントが定義されています。


http://www.osgi.org/download/r4-v4.2-core-draft-20090310.pdfセクション 12.5 を参照してください。

R4.2 はまだ最終段階ではないことに注意してください。主要な OSGi 実装 (Felix と Equinox) のトランクには、この追加機能のコードが既にあると思います。

于 2009-07-07T19:42:38.480 に答える
1

私はこれを試していませんが、あなたに役立つようです...

OSGi R4 コンポーネント仕様では、「構成管理サービス」が説明されています。これは、5 分間の調査から、サービスを動的に変更できるように見えます。

最終的には、合意された構成値に基づいてサービスへのアクセスを制御するのはあなた次第だと思います

于 2009-05-15T13:25:38.393 に答える
0

サービスの可視性を制限したい場合、最善の策はOSGiセキュリティを有効にすることです。どのサービス、パッケージ、その他のものがどのバンドルに表示されるかを制限するように設計されています。たとえば、自分が署名したバンドルでのみ特定のサービスを利用できるようにすることができます(または他のさまざまな基準を使用できます)。

もう1つのオプションは、すでに述べたように、4.2サービスフックを使用することです。これにより、一種の「自分で行う」セキュリティメカニズムが可能になります。

2番目の質問である、サービスが登録されているエンドポイントなどのプロパティの変更は、サービスの登録時に返されるServiceRegistrationを介して実行できることです。変更は、ManagedServiceになり、ConfigurationAdminを使用して自分で構成することでトリガーできます。

于 2010-05-11T22:45:20.317 に答える
0

追加のクレジット: サービス登録をフィルタリングするだけでなく、登録プロパティを変更する機能。そのため、バンドルが alias=/admin でサーブレットを登録する場合でも、Pax Web Extender Whiteboard で使用するためにそれを alias=/somethingelse に変更できます。

iPOJOを使用すると、公開されているサービスのプロパティを非常に簡単に変更できます。他にもたくさんの機能があり、OSGi をよく使う人にとっては興味深いものになるでしょう。

于 2009-07-07T15:05:34.283 に答える