第 7 章 生命周期管理

7.1. 捆绑包生命周期状态

OSGi 环境中的应用程序受其捆绑包的生命周期约束。捆绑包有六个生命周期状态:

  1. installed - 所有捆绑包都以已安装的状态启动。处于已安装状态的捆绑包正在等待它们的所有依赖项被解决,一旦被解决,捆绑包就会变为已解决的状态。
  2. 已解析 - 当满足以下条件时,捆绑包会移到已解析的状态:

    • 运行时环境满足或超过捆绑包指定的环境。
    • 捆绑包导入的所有软件包均由处于已解析状态的捆绑包公开,或者可以和当前捆绑包同时移到已解析状态。
    • 所有所需的捆绑包都处于已解析状态,也可以与当前捆绑包同时解决。

      重要

      所有应用程序的捆绑包都必须处于已解析状态,然后才能启动应用程序。

      如果上述任何条件满足,则捆绑包将重新移到已安装的状态。例如,当从容器中删除包含导入软件包的捆绑包时,会出现这种情况。

  3. 启动 - 启动状态是已解析状态和主动状态之间的过渡状态。当捆绑包启动时,容器必须为捆绑包创建资源。当提供容器时,容器还调用捆绑包的 start() 方法。
  4. Active - 处于 active 状态的捆绑包可供工作。处于 active 状态的一个捆绑包取决于捆绑包的内容。例如,包含 JAX-WS 服务提供商的捆绑包表示该服务可用于接受请求。
  5. 停止 - 停止状态是活跃状态和已解析状态之间的过渡状态。当停止捆绑包时,容器必须清理捆绑包的资源。当提供容器时,容器还调用捆绑包的 stop() 方法。
  6. unmount - 卸载捆绑包后,它将从已解析的状态移到卸载状态。处于此状态的捆绑包无法转换为已解析的状态或任何其他状态。它必须明确重新安装。

应用程序开发人员最重要的生命周期状态是启动状态和停止状态。应用程序公开的端点在启动状态发布。公布的端点在停止状态停止。