0

假设我有 2 个 OSGi 服务。其中之一是数据库记录的内存缓存。另一项服务是对这些数据库记录的一组CRUD操作。在修改期间,我想重建现有的缓存。一项服务如何强制另一项服务被修改?像发送org.osgi.framework.ServiceEvent.MODIFIED事件的东西。

(请注意,这是真实业务案例的简化示例,我并没有真正将缓存作为服务)

更新使问题更清楚 - 我需要与提供的完全相同的功能ServiceRegistration#setProperties。不幸的是ServiceRegistration不应该离开捆绑的界限。

4

2 回答 2

0

请,请不要尝试这样做。

只有服务的提供者包知道它背后的实现......这就是为什么只有提供者才能访问注册细节。

缓存提供程序应自行检测底层数据是否已更改,并适当地刷新缓存。没有其他包可以做到这一点,因为他们不知道缓存提供者从哪里获取数据,他们只能看到公共服务接口。

于 2013-05-10T22:57:55.533 回答
0

为什么要使用服务来解决这个问题?

只需使用 CRUD 包中的 EventAdmin 发送一个事件,说明数据已被修改。所以缓存可以监听这些事件并采取相应的行动。事件解决方案的优点是 crud 服务不需要知道有缓存,它只是将事件发送给感兴趣的人。

于 2013-05-11T17:09:57.560 回答