是否有任何类型的事件监听器(例如 BundleEvent 类中的事件监听器)用于检测包是否已完全加载并可用于请求?
我进行了搜索,我所能找到的只是 this
它不使用事件监听器,意味着我需要手动或定期检查(顺便说一句,我没有测试那段代码。
加载操作是否有像 BundleEvent.STARTING 这样的事件?或者我们需要自己实现一个(如果可能的话)?
最佳答案
在 OSGi 中,有两种依赖关系。第一种基本上是设置一个环境,使您的包可以安全地运行。这包括代码依赖项和您可以在 list 中表达的其他依赖项。该框架确保在解析您的 bundle 之前满足这些依赖关系。如果不满足这些依赖关系,您将无法运行单个指令。
第二种依赖关系更加动态,当它们发生变化时,您的代码应该能够在运行时处理它们。在 OSGi 中,这些依赖关系是最好表达的服务。使用声明式服务(特别是使用注释),依赖其他服务是微不足道的(请,请不要为此使用服务跟踪器,DS 非常非常优越)。
正如其他响应者所说,准备就绪是情人眼里出西施。在 OSGi 中,当您表达对服务的依赖关系时,问题从 bundle 已准备好转移到:是否有服务 X?只要服务 X 的注册商也遵循这些规则,您就拥有了一个非常强大且有弹性的应用程序模型。由于框架和 DS 严格遵循生命周期规则,因此导致 bundle 准备就绪或未在单个模型中崩溃的原因有很多:服务。
简短的示例,服务 Y 依赖于服务 X:
@Component
public class YImpl implements Y {
@Activate
void activate() { /* only called when X is registered */ }
@Reference
void setX( X x ) {
this.x = x;
}
}
关于java - 如何检测bundle是否完全加载到osgi容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207744/