原标题:Vestige—Java应用程序管理器
Vestige是一个安装、运行和更新JavaSE应用程序的框架。是为Java服务器应用程序(POP、CARDDAV、RESTful…)带来可移植性。
你可能会说Java已经是可移植的了,的确如此,但将操作系统特定于JVM的胶水却不是。Java服务器应用程序所需的内容包括:
可移植安装(创建rpm、DEB、EXE、DMG都很繁琐)。
自动启动计算机/用户会话。
与用户共享的目录(配置、日志)和仅用于应用程序的目录(缓存、TMP)。
即使配置了PAC代理,也可以使用internet配置(下载应用程序更新、访问web服务)。
Vestige带来了这一切。与其他框架一样,它使用Maven解析器(以前称为Eclipse-ether)从.m2/repository文件夹下载和执行应用程序。与现有框架不同,Vestige可以攻击依赖项来替换、添加或删除任何依赖项。此外,它允许你在一个类加载器(类路径模式)和每个JAR一个类加载器(平台模式)之间进行选择。平台模式允许更快的类加载(因为它只在一个JAR中搜索)和应用程序之间的类共享。
Vestige在JVM6到10上运行。在JVM9或更高版本上启动时,它使用JPMS(以前称为Jigsaw)并为每个类加载器创建一个模块层,以保持应用程序之间的类共享处于启用状态。
不过,在Vestige中运行Tomcat或Felix并不是很有用,因为最常更改的部分是功能部分,而功能部分位于Tomcat的webapp文件夹中的WAR中,以及OSGi中的一些捆绑包中,因此功能部分没有类共享。
但是,如果我们可以在Maven存储库中发布一个WAR,而不使用它的lib目录,Tomcat就可以发展并使用残余MavenSPI在web应用程序之间以及与VestigeJVM上运行的其他应用程序共享类。
Vestige专用于JavaSE应用程序,并试图限制移植应用程序所需的约束。
移植到OSGi或JPMS是一项繁琐的任务:你必须管理导入/导出包/模块。但移植到Vestige要简单得多。你只需删除所有JVM范围的操作(System.exit、System.setProperty和shutdownhooks)。如果不删除它们,应用程序将运行,但可能会干扰其他应用程序行为。
如果希望在平台模式下运行并在应用程序之间共享类,则必须使所有静态变量不可变(final是不够的),并使用线程上下文类加载器执行IOC。
Vestige为静态(应用程序停止)和动态(应用程序运行)更新提供SPI。动态更新很难实现(应该禁止阻塞操作),但这是可能的。
来源:搜狐