我有一个使用 OSGI 模型的 Java 应用程序:
我有两个预先存在的 bundle :
- com.mos
- com.login
com.login
实现并注册了 Authenticator
服务(自己的身份验证服务)。com.login
以及 com.mos
使用此身份验证服务。
现在我正在编写一个新包 (com.new
),并且我必须添加/修改身份 validator 服务,因此我编写了自己的实现。
一旦我启动我的程序/应用程序,如果我的新 bundle com.new
在com.login
之后运行,那么所有 bundle 都使用新的Authenticator Service
>.但是,如果 com.new
bundle 在 com.login
之前运行,则旧的 Authenticator Service
可用。
OSGI 中是否有任何机制可以让我们给予一些优先级,例如哪个包应该首先启动。
最佳答案
OSGi 包启动级别允许您影响每个包的启动顺序。 请参阅相应的 javadocs http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/startlevel/package-summary.html 但我不建议这样做。 启动级别通常不应用作控制服务启动的方法。在 OSGi 中,不保证服务启动顺序,服务可能随意出现和消失。
根据您的身份 validator 服务的具体实现来制作新包 (com.new) 将达到目的并保证正确的顺序。
关于java - OSGI捆绑优先级机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17109103/