java - 如何检测bundle是否完全加载到osgi容器中?

标签 java osgi loading soa

是否有任何类型的事件监听器(例如 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/

相关文章:

java - 尝试在 azure 模拟器上运行 Java/Eclipse 应用程序时出现路径太长错误

osgi - PAX 考试 - 类未找到错误

javascript - 如何防止两个 div 在我的网页首次加载时跳来跳去?

java - 无法使用 Apache Ivy 获取 Hibernate Core 和 Hibernate Annotations(但它也与 Maven2 相关。)

java - 读取浏览器的POST请求内容到Java

java - 嵌入式OSGi : accessing dynamically loaded bundle components

maven - 为什么不赞成使用maven-bundle-plugin的wrap/bundleall目标?

java - 如何在黑莓中创建带有图像的加载 PopScreen?

javascript - 如何在后台加载图像?

java - 如何检查特定错误的 ActionErrors?