假设我有2个OSGi服务。其中之一是DB记录的内存缓存。另一项服务是对这些数据库记录设置CRUD次操作。在修改期间,我想重建现有的缓存。一个服务如何强制另一个服务进行修改?喜欢发送org.osgi.framework.ServiceEvent.MODIFIED
事件。
(请注意,它是真实商业案例的简化示例,我并不真正将缓存作为服务)
更新让问题更加明确 - 我需要与ServiceRegistration#setProperties
提供的功能完全相同的功能。不幸的是ServiceRegistration
不应该离开Bundle。
答案 0 :(得分:0)
请不要试图这样做。
只有服务的提供者包知道它背后的实现...这就是为什么只有提供者才能访问注册细节。
缓存提供程序应检测自身是否已更改基础数据,并相应地刷新缓存。没有其他捆绑可以做到这一点,因为他们不知道缓存提供者从哪里获取数据,他们只能看到公共服务接口。
答案 1 :(得分:0)
为什么要使用服务来解决这个问题?
只需使用来自CRUD捆绑包的EventAdmin发送一个事件,该捆绑包表示数据已被修改。因此缓存可以监听这些事件并相应地采取行动。事件解决方案的优点是,crud服务并不真正知道有一个缓存只是将事件发送给感兴趣的人。