Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用OSGi实现自动更新_Java_Osgi_Auto Update - Fatal编程技术网

Java 使用OSGi实现自动更新

Java 使用OSGi实现自动更新,java,osgi,auto-update,Java,Osgi,Auto Update,我想做的是为我的代码创建一个“启动器”框架,给定URL和预定义的版本控制方案: 1) 检查是否存在更新 2) 下载更新 3) “安装”更新 4) “重新运行”应用程序 我想a)在现有JVM内完成所有这些,b)独立于平台。高要求,对吗?基于我对OSGi和ApacheFelix的(有限的)了解,我很确定这是可能的,但我真的迷失在细节中了 检查更新并下载它是微不足道的。导致“旧”包卸载和“新”包加载是我遇到的问题。我以前做过OSGi的工作,但它的动态性比这要差得多。一个好的起点或者在正确的方向上一次艰

我想做的是为我的代码创建一个“启动器”框架,给定URL和预定义的版本控制方案: 1) 检查是否存在更新 2) 下载更新 3) “安装”更新 4) “重新运行”应用程序

我想a)在现有JVM内完成所有这些,b)独立于平台。高要求,对吗?基于我对OSGi和ApacheFelix的(有限的)了解,我很确定这是可能的,但我真的迷失在细节中了

检查更新并下载它是微不足道的。导致“旧”包卸载和“新”包加载是我遇到的问题。我以前做过OSGi的工作,但它的动态性比这要差得多。一个好的起点或者在正确的方向上一次艰难的推进将是最受欢迎的


如果我真的过度烘焙了一些已经用免费图书馆解决的东西,那么也告诉我这个,但到目前为止我还没有发现任何东西。:-)

您甚至不需要下载它,只需检查更新是否可用,然后对需要更新的捆绑包调用Bundle.update(InputStream),之后通常会调用PackageAdmin.refreshPackages()。

您可以检查著名的资源调配解决方案,这些解决方案可以代替您完成所有步骤(检查新版本、下载、安装/更新、重新启动等)

  • 对于Equinox框架:p2
  • 对于任何OSGiR4框架:ApacheACE
  • 致以最良好的祝愿,
    Dmytro

    这将导致前一个捆绑包解除绑定正确?更新后(即在硬盘上)现有捆绑包会发生什么情况?Richard的回答简洁而正确,请参阅-旧的捆绑包的状态将更改为“已卸载”,在这种情况下,它将不再可用。不确定每个框架的功能-它们肯定会在重新启动之间保留捆绑包,我会想象一个已卸载的捆绑包将被完全删除(只要不妨碍垃圾收集,就从JVM以及磁盘缓存中删除).OSGi非常适合您的需要,如果灵活,只需使用maven repo和pax mvn url句柄即可完成。刷新会导致旧捆绑包“解除绑定”并可用于垃圾收集。更新后,硬盘驱动器和内存中的捆绑包有两个修订版,假设其他捆绑包对更新的捆绑包具有依赖关系。这就是为什么需要刷新,因为您希望任何依赖的捆绑包切换到新修订版。一旦刷新发生,则在内存或磁盘上,更新包只有一个版本。如果更新失败了怎么办?或者如果更新成功但有运行时错误来保证回滚怎么办?我认为作为新更新发布回滚包会很好。