-3

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

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

我该如何处理?

4

3 回答 3

1

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

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

于 2013-07-03T17:43:32.900 回答
0

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

于 2013-07-03T17:58:35.183 回答
0

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

一种方法是拦截器模式。在 Java 中执行此操作的典型方法是使用 AOP。

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

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

于 2013-07-03T12:43:25.540 回答