gpt4 book ai didi

java - 如何过滤 OSGi 服务可见性?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:58:58 24 4
gpt4 key购买 nike

OSGi 采用面向服务的架构:Bundle 注册服务对象,供其他 bundle 使用。服务发布和绑定(bind)由框架管理。这将服务提供者与服务用户完全分离(除了需要就服务接口(interface)达成一致)。

有没有办法(通过配置)限制哪些服务对哪些包可见?

例如,如果我有一个 HttpService,所有想要这样做的包都可以将 servlet 安装到其中。我想让 HttpService 对选择性 bundle 不可见。

对于额外的学分:除了过滤服务注册之外,还可以修改注册属性。因此,即使 bundle 使用 alias=/admin 注册了一个 Servlet,我也可以将其更改为 alias=/somethingelse 以供 Pax Web Extender Whiteboard 使用。

最佳答案

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

如您所知,可以过滤服务属性,尽管这可能无法提供您所要求的那种控制:服务仍然对框架中部署的其他 bundle 可见。

在 SpringSource 的 dm 服务器(一个开源、模块化、基于 OSGi 的 Java 应用程序服务器)中,应用程序在部署时可以Scoped。这允许您部署多个应用程序(在不同的范围内),这些应用程序可能包含不一致版本的依赖包,同时仍然允许共享公共(public)包(通过将它们部署在一个范围之外——在所谓的全局范围内)。

如果一个范围内的应用程序/bundle 注册了一个 OSGi 服务,它只对同一范围内的 bundle 可用。 (服务也是“范围内的”。)

这不是魔法:服务器包装了 OSGi 服务接口(interface)并“在幕后”使用服务属性来即时执行所需的过滤。

我认为这会为您提供您正在寻找的那种分离。

有关 dm 服务器(不要与 Spring DM 混淆)的信息,请访问 SpringSource.org dmServer page .

史蒂夫·鲍威尔
SpringSource; dm 服务器开发

关于java - 如何过滤 OSGi 服务可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/866584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com