有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

有没有办法(通过配置)限制哪些捆绑包可以看到哪些服务

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

额外积分:除了过滤服务注册,还可以修改注册属性。因此,即使捆绑包向alias=/admin注册Servlet,我也可以将其更改为alias=/somethingelse,供Pax Web Extender白板使用


共 (2) 个答案

  1. # 1 楼答案

    即将到来的R4。OSGi规范的第2部分定义了一个名为Find Hook的组件,它允许:
    “检查返回的服务引用集,并选择性地缩小返回的服务集”

    参见
    http://www.osgi.org/download/r4-v4.2-core-draft-20090310.pdf第12.5节

    请注意R4。2还不是最终版本,但我相信主要的OSGi实现(Felix和Equinox)已经在它们的主干中包含了这个附加功能的代码

  2. # 2 楼答案

    如果想限制服务的可见性,最好的选择是启用OSGi安全性。它旨在限制哪些捆绑包可以看到哪些服务、包和其他东西。例如,您只能将某个服务提供给您签署的捆绑包(或使用其他各种标准)

    前面已经提到的另一个选项是使用4.2服务挂钩,它允许一种“自己动手”的安全机制

    第二个问题是,通过注册服务时返回的ServiceRegistration,可以更改属性,例如注册服务的端点。更改可以通过成为ManagedService并使用ConfigurationAdmin来配置自己来触发