【发布时间】:2013-06-14 13:01:50
【问题描述】:
我有一个使用 OSGI 模型的 java 应用程序:
我有两个预先存在的包:
- com.mos
- com.login
com.login 实现并注册了Authenticator 服务(自己的身份验证服务)。com.login 以及com.mos 使用此身份验证服务。
现在我正在编写一个新包 (com.new),我必须添加/修改 Authenticator Service,所以我已经编写了自己的实现。
一旦我启动我的程序/应用程序,如果我的新捆绑包com.new 在com.login 之后运行,那么所有捆绑包都使用新的Authenticator Service。但是如果com.new 捆绑包在com.login 之前运行,那么旧的Authenticator Service 可用.
OSGI 中是否有任何机制可以让我们优先考虑应该首先启动哪个包。
【问题讨论】:
-
那么您要确保始终使用新的身份验证器服务吗?然后你可以像@Thomas 建议的那样引入依赖项(我也会避免调整 startlevels)。或者您想在运行时动态找出哪个是最好的验证器(即,一旦可用就使用新的验证器)?然后,您可以使用 ServiceListener 或 ServiceTracker 以及合适的过滤器来始终了解哪些身份验证器可用。
标签: java osgi osgi-bundle