java - 从一个来源安装多个包

标签 java osgi apache-karaf

我使用 Apache Karaf 作为 OSGi 容器。 Karaf 有 url 包装器,可以直接从 maven 存储库安装包

> install mvn:com.farpost.billing/background-service/2.2-SNAPSHOT
Bundle ID: 139

一切正常。但我想从给定的来源开始几个 bundle 。如果新 bundle 偶尔会破坏生产服务并且我想回滚,这是有道理的。使用 OSGi,这非常简单

 > list 
 [ 139] [Active     ] [            ] [Started] [   60] Billing background service (2.2-20100811-1232)
 [ 140] [Resolved   ] [            ] [       ] [   60] Billing background service (2.2-20100809-1127)
 > update 140
 > list
 [ 139] [Active     ] [            ] [Started] [   60] Billing background service (2.2-20100811-1232)
 [ 140] [Resolved   ] [            ] [       ] [   60] Billing background service (2.2-20100812-1354)
 > start 140
 > stop 139
 > list
 [ 139] [Resolved   ] [            ] [       ] [   60] Billing background service (2.2-20100811-1232)
 [ 140] [Active     ] [            ] [Started] [   60] Billing background service (2.2-20100812-1354)
 #################
 # suppose we need to rollback here
 #################
 > start 139
 > stop 140

问题是我无法从一个来源创建多个包:

> install mvn:com.farpost.billing/background-service/2.2-SNAPSHOT
Bundle ID: 139
> install mvn:com.farpost.billing/background-service/2.2-SNAPSHOT
Bundle ID: 139

第二次 install 调用不执行任何操作,但返回已经存在的包 ID。所以我的问题是,有没有办法从一个源 URL 创建多个包?

最佳答案

您遇到的问题是您无法安装具有相同符号名称和版本的 bundle 的多个副本。

即使可以,在您描述的场景中安装同一个包的两个不同版本也会产生副作用,因为只要安装了一个包,它就可以用来解析包。在您的场景中,这可能不是您想要的,因为您想要使用一个或另一个 bundle ,而不是混合使用。

最后,我建议您只安装所需的 bundle 。如果它有问题,请通过卸载有问题的 bundle 并安装旧版本来回滚。如果您想自动安装和更新(一组) bundle ,请查看 Apache ACE,这是一个用于 OSGi 的软件供应框架,它将帮助您自动执行此类场景(并管理一般的 OSGi 系统)。

关于java - 从一个来源安装多个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3472764/

相关文章:

java - Retrofit2,我如何转换具有不同对象名称但相同数据类型的响应

java - 使用 hibernate native 查询的错误 BigInteger 结果

java - 正则表达式 - 在 `:` 上分割字符串,但不在 if 语句内分割字符串

osgi - 如何在 OSGi (Apache Felix) 中处理不同的日志记录解决方案

maven-pax-provision + equinox : java. lang.Long 无法转换为 java.lang.String

java - 在 Apache Karaf 下设置 Java 堆大小

java - 使用 JavaMail 连接到 IMAP 时出现 "A1 NO LOGIN failed"异常

java - apache karaf 中的 activemq,使用 xbean 加载配置

apache-karaf - 在 Karaf 中完成线程转储

maven - 无法启动 bundle - 缺少要求(osgi.wiring.package)