【问题标题】:How do I track dataflow between bundles in OSGi [closed]如何在 OSGi 中跟踪包之间的数据流 [关闭]
【发布时间】:2013-07-01 01:54:29
【问题描述】:

我需要通过 OSGi 中后端系统的不同捆绑包检查数据包的数据流。

一个数据包通过“网关捆绑包”进入,然后通过几个不同的捆绑包进行处理。我应该做的是制作另一个知道“监控”通过这些不同包的数据流的包。在其他捆绑包不知道它的存在的情况下。

我该如何处理?

【问题讨论】:

  • 你可以使用 Camel 和一些队列在你的组件之间路由消息吗?

标签: java osgi


【解决方案1】:

如果数据流通过其他捆绑注册的 OSGi 服务,您可以为每个服务创建一个 java.lang.reflect.Proxy 对象,并将这些对象注册为 OSGi 服务(具有与原始服务相同的 OBJECTCLASS 和属性),最大 SERVICE_RANKING .在这种情况下,所有呼叫首先转到您的服务,然后您可以将它们转发到原始服务。

【讨论】:

    【解决方案2】:

    这是不可能的,除非在字节码级别进行一些重大的重写。在 OSGi 中,当您从另一个包中获取服务或直接实例化对象时,您可以直接不受限制地访问该对象。包之间没有代理,OSGi 本身不知道方法调用何时跨越包边界。

    也许最好先退后一步,问问自己为什么要这样做。你希望达到什么目标?

    【讨论】:

    • 不是我想这样做,而是我“不得不”这样做。这是我被赋予的任务。我想买一个“观察者”捆绑包,并让其他捆绑包在他们做一些值得注意的事情时通知观察者捆绑包。这将更容易实现。但是后来他们告诉我“不,我们不希望后端对您应该制作的模块有任何了解......”..我能想到的唯一解决方案是 AOP 之类的东西,但我不是那样熟悉 AOP,甚至对 OSGi 也不熟悉。。据我了解 AOP,我认为这不是正确的解决方案
    • 好的,所以你需要帮助客户了解他们正在尝试做的事情的问题,并弄清楚他们的潜在需求是什么......
    【解决方案3】:

    您需要在公共 API 边界拦截调用吗?

    一种方法是interceptor pattern。在 Java 中执行此操作的典型方法是使用 AOP。

    您已经在使用 Spring 了吗?如果是这样,那么您可以研究各种不同风格的 AOP。

    我假设代码正在执行直接方法调用?如果是这样,123x 使用队列的建议将需要对您的代码进行重大重构,因此这可能不是一个好的短期解决方案。

    【讨论】:

    • 我只是团队的一小部分。实际的实施甚至还没有发生。我必须首先在我必须制作的虚拟系统上进行数据监控,并逐渐将虚拟捆绑包替换为真实捆绑包。我也不知道 Spring 是什么,直到今天才被教授 OSGi 实际上是什么。AOP 也是我今天听到的一个新概念。
    • 您使用的是什么 OSGi 容器?您使用哪些 Java 库?您可能已经拥有构建解决方案的工具。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多