如何跟踪OSGi中的包之间的数据流

时间:2013-07-03 11:36:42

标签: java osgi

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

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

我该如何处理?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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