我正在使用Apache Karaf作为OSGi容器。 Karaf有url包装器,可以直接从maven存储库安装包
> install mvn:com.farpost.billing/background-service/2.2-SNAPSHOT
Bundle ID: 139
一切正常。但我想从给定的来源开始几个捆绑。如果新捆绑偶尔会破坏生产服务并且我想要回滚,这是有道理的。使用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创建几个包?
答案 0 :(得分:2)
您遇到的问题是,您无法安装具有相同符号名称和版本的捆绑包的多个副本。
即使你可以,也有在你描述的场景中安装了同一个捆绑包的两个不同版本的副作用,因为只要安装了捆绑包,它就可以用来解析包。在您的场景中,这可能不是您想要的,因为您想要使用一个或另一个捆绑,而不是混合。
最后,我建议你只安装你想要的捆绑包。如果存在问题,请通过卸载有故障的软件包并安装旧版本来回滚。如果您想自动安装和更新(套件)软件包,请查看Apache ACE,这是一个OSGi的软件供应框架,可帮助您自动化这些方案(并管理OSGi系统)。
答案 1 :(得分:2)
可以使用功能文件一次安装多个捆绑包。目前,我们有一个功能文件,定义了大约6-7个包。最重要的是,该文件包含一个需要另一个6-7的功能。通过安装“主”功能,Karaf可以同时安装以下所有捆绑包。如果你愿意,你可以让Karaf在启动时运行这些捆绑包。
为了做到这一点:
创建功能文件。更多信息可以在这里找到:external source
将该功能文件放在m2目录中的某个位置。
修改Karaf主目录中的org.apache.karaf.features.cfg。将mvn URL添加到刚刚创建的features文件到“featuresRepositories”标记。 (可选)如果要在启动时加载功能,请将功能名称添加到“featuresBoot”。
启动Karaf后,您可以输入“features:install name_of_feature”。这将启动功能以及功能文件定义的功能所需的任何其他内容。
然后,您可以键入list以验证所有必需的包正在运行。如果任何捆绑包发生更改或添加了新捆绑包,则存在需要更新的缺点。
希望这有帮助。
答案 2 :(得分:1)
编辑:刚看到这篇文章已经有一年了! Stackoverflow RSS feed把它放在我的列表顶部!?!
+ 1到Marcel&托尼,两个都是正确的。
RESOLVED状态的捆绑包是活动导出/导入包(ACTIVE表示已启动并完成任何服务激活),您应该使用Karaf功能。 目前我们手动滚动我们的karaf-features文件(参见分发下载中的PDF文档),因为v2.x插件为每个依赖项创建了一个单独的功能,并且有点古怪(我没有尝试过trunk / v3但是它似乎是fixed)
你正在尝试的有两个陷阱;
(最差)选项1:
如果您真的非常渴望专门解决这个问题,假设您使用maven-bundle-plugin,请将buildnumber-maven-plugin添加到bundle config:
<Bundle-SymbolicName>${project.artifactId} ${buildNumber}</Bundle-SymbolicName>
然后,当您安装捆绑包时,请使用显式快照版本(版本名称中的SNAPSHOT在概念上只是指向最新时间戳版本的存储库软链接):
install mvn:com.farpost.billing/background-service/2.2-20100812-1354
使用此选项,正如Marcel所说,您可以在从RESOLVED包中导入服务时将其他捆绑包导入连接到ACTIVE捆绑包 - 因此类错配会破坏您的系统。
(较差)选项2:
略好一点(并且没有更改pom.xml):
refresh
命令有了这个选项,就像托尼所说的那样,你是单独管理所有这些捆绑包,这是一个痛苦和危险的东西(什么适用于什么?这写下来的地方?)。 Karaf功能和versions-maven-plugin插件将是一个更好的解决方案
(好)选项3: