Java 如何在OSGi中跟踪捆绑包之间的数据流

Java 如何在OSGi中跟踪捆绑包之间的数据流,java,osgi,Java,Osgi,我需要检查通过OSGi中后端系统的不同包的数据流 一个数据包通过“网关包”进入,然后经过几个正在处理的不同包。我应该做的是制作另一个包,它知道“监视”通过这些不同包的数据流。没有其他包真正知道它在那里 我该如何处理这个问题 您需要在公共API边界拦截调用吗 其中一种方法是使用。在Java中实现这一点的典型方法是使用AOP 您已经在使用Spring了吗?如果是这样的话,你可以研究它有各种各样的AOP味道 我假设代码正在进行直接方法调用?如果是这样,123x关于使用队列的建议将需要对代码进行重大重构

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

一个数据包通过“网关包”进入,然后经过几个正在处理的不同包。我应该做的是制作另一个包,它知道“监视”通过这些不同包的数据流。没有其他包真正知道它在那里


我该如何处理这个问题

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

其中一种方法是使用。在Java中实现这一点的典型方法是使用AOP

您已经在使用Spring了吗?如果是这样的话,你可以研究它有各种各样的AOP味道


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

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


也许最好退一步,先问问你为什么要这么做。您希望实现什么?

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

您可以使用Camel和一些队列在组件之间路由消息吗?我只是团队的一小部分。实际的实现甚至还没有发生。我必须首先在我必须制作的虚拟系统上进行数据监控,并逐渐用真实的捆绑包替换虚拟捆绑包。我也不知道春天是什么,直到今天才知道OSGi到底是什么。。AOP也是我今天听到的一个新概念。您使用的是什么OSGi容器?您使用哪些Java库?你可能已经有了构建解决方案的工具,不是我想这么做,而是我“必须”这么做。这是给我的任务。我想做的是制作一个“观察者”捆绑包,让其他捆绑包在它们做一些值得注意的事情时通知观察者捆绑包。这将更容易实现。但是他们告诉我“不,我们不希望后端对您应该制作的模块有任何了解…”。。我能想到的唯一解决方案是类似AOP的东西,但我对AOP不太熟悉,甚至对OSGi也不太熟悉。。正如我所理解的AOP,我认为这不是正确的解决方案。因此,您需要帮助客户了解他们正在尝试做的事情的问题,并了解他们的潜在需求是什么。。。。