【问题标题】:How do I get the symbolic name of the bundle, which serivce i use?如何获得捆绑的符号名称,我使用哪个服务?
【发布时间】:2013-07-18 13:19:23
【问题描述】:

我正在实现一个日志服务,该服务用于映射整个 osgi 框架中的数据流。

每次客户端包想要使用另一个包中的服务时,它会首先从我的日志包中调用一个函数,这有点像这样:

JournalService.Journal(args);
NeededService.neededfunction(args);

我的日记服务需要以下物品:

  • 使用该服务的包的包名。
  • 提供服务的包的包名。
  • 将使用哪个服务。
  • 将使用服务的哪个函数(可能是字符串)
  • 函数参数。

我知道如何获取最后 2 个(我作为参数传递给我的日记:字符串函数名和对象 [] args)。但我不知道需要传递什么来获得前 3 个,并且需要最少的参数。

【问题讨论】:

    标签: java osgi


    【解决方案1】:

    如果您有 ServiceReference,则可以从中获取所有信息。我相信大多数框架在本质上都使用 ServiceReferences 来引用捆绑包中的单个服务。

    http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/ServiceReference.html

    您可以获得所引用服务的捆绑包。如果bundle A从bundle B引用Service B,那么实例方法ServiceReference.getBundle会得到Bundle B,当前的BundleContext会得到Bundle A。

    也就是说,您最好的选择可能是使用 ReferenceListeners 之类的东西(尽管您可能没有使用蓝图)。这将让您知道何时引用或取消引用服务并获取与其相关的所有上下文数据。另一种方法可能是使用 ServiceEvent,它可以让您监听注册/注销事件。如果您已经知道这一点,我深表歉意。

    http://www.ibm.com/developerworks/xml/library/os-osgiblueprint/index.html#srms

    http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/ServiceEvent.html

    就跟踪单个方法而言,一旦它们从 osgi 中提取出来,您就可以代理您的引用。因此,bundle A 将从 Bundle B 获得对 Service B 的引用。然后,Bundle A 会获得服务 B 的代理,该代理在被调用时会委托给原始方法并调用您的 JournalService。

    【讨论】:

      【解决方案2】:

      这里有一篇文章展示了类似的功能:http://java.dzone.com/articles/osgi-service-hook-log-all

      它会用函数名称和参数注销每个方法调用,但它仍然不会注销包名称。我认为如果通过以下方式更改代码是可能的:

      • 当捕获到新的服务注册事件时,将注册不是代理服务而是 ServiceFactory 实现
      • ServiceFactory 将为每个捆绑请求(请求服务)实例化一个自定义代理,该代理会记录每个方法调用的日志

      在这种情况下,每个 Bundle-Service-Bundle 关系都会有一个自定义代理对象,以便他们可以注销您需要的信息。

      好吧,在这种情况下,根本不需要从您的生产代码中登录。

      有关 serviceFactory 的更多信息,请参阅http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/ServiceFactory.html

      在 Hooks 中,您可以根据包名称或其他内容过滤服务(您在 ServiceFactory 中重新注册)。代理系统中的每个服务可能会导致一些性能下降。

      【讨论】:

        猜你喜欢
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 2020-08-28
        • 1970-01-01
        • 2014-09-29
        相关资源
        最近更新 更多