2

正如标题所示,我在使用 OSGI + Spring DM 时遇到了问题。

在我的项目设计中,我有一个需要服务 svB 并导出服务 svA 的包 A。Bundle B 需要 svA 并导出 svB(当然还有其他东西)。这似乎导致了死锁,因为看起来两个捆绑包都在等待另一个捆绑包上线。Spring DM 是否可能出现这种死锁?有针对这个的解决方法吗?

4

1 回答 1

4

这听起来不像 Spring-DM 的问题,而是您已经为这种死锁做好了准备:A 依赖于 B,B 依赖于 A,因此没有人可以完成任何工作。要摆脱这种情况,您可能需要更改您的设计,并启用 A 或 B 中的一个来启动另一个而没有另一个。同时,另一个应该有一些内置的延迟加载逻辑(这将是你的工作),并在另一个自己上线时继续它的启动顺序。

使用 OSGi 声明式服务,您可以声明对服务的依赖,但在您要启动时允许它不存在(使用 cardinality 选项执行此操作。)

于 2010-02-12T15:12:09.717 回答