Architecture 在同一容器中部署不同版本的OSGI应用程序堆栈

Architecture 在同一容器中部署不同版本的OSGI应用程序堆栈,architecture,osgi,Architecture,Osgi,我正在构建一个API,它有一个REST前端,整个堆栈包含近10个不同的包,并且在缓慢增长。到目前为止,这很有效 从长远来看,我计划使用不同版本的API堆栈(使用OSGi versoning机制),可以通过REST前端以/API/v2/path/to/resource或类似格式访问 我的第一个想法就是为新版本部署整个堆栈,例如安装我所有的包。新的REST捆绑包将在blueprint中向jaxrs服务器添加/api/,一切都应该正常,但我担心的是,从长远来看,会部署很多捆绑包。我感觉到我将失去对已安

我正在构建一个API,它有一个REST前端,整个堆栈包含近10个不同的包,并且在缓慢增长。到目前为止,这很有效

从长远来看,我计划使用不同版本的API堆栈(使用OSGi versoning机制),可以通过REST前端以
/API/v2/path/to/resource
或类似格式访问

我的第一个想法就是为新版本部署整个堆栈,例如安装我所有的包。新的REST捆绑包将在blueprint中向jaxrs服务器添加
/api/
,一切都应该正常,但我担心的是,从长远来看,会部署很多捆绑包。我感觉到我将失去对已安装捆绑包的全面了解,等等

有没有办法把我的书堆分开? 我不想为每个版本安装新的容器。我已经看了Karaf的实例,但是我是否能够以与捆绑包安装在同一实例中相同的方式“附加”到jaxrs服务器?例如,访问同一主机、端口等上的其余前端


谢谢

我肯定会在两个版本之间进行一些隔离

诚然,OSGi版本控制功能非常强大,但如果您计划部署同一捆绑包的多个不同版本,则最好将所有接线完全正确,否则您将遇到非常难以调试的问题。此外,您可能会通过部署较新的版本来破坏较旧的版本,我想这正是您想要防止的

在Karaf中,实例之间的分离对您来说可能有点太重,因为您无法轻松地在实例之间共享捆绑包

OSGi的标准地址称为子系统,它允许您做您想做的事情,即拥有不同作用域的子应用程序,这些子应用程序将共享它们的大部分代码,比如http服务器


这个标准是相当新的,我不认为有一个成熟的实现,但我建议看看。处女座不支持子系统(现在?),但处女座有一个“计划”的概念,我认为这会满足你的目的。

我肯定会在版本之间进行一些隔离

诚然,OSGi版本控制功能非常强大,但如果您计划部署同一捆绑包的多个不同版本,则最好将所有接线完全正确,否则您将遇到非常难以调试的问题。此外,您可能会通过部署较新的版本来破坏较旧的版本,我想这正是您想要防止的

在Karaf中,实例之间的分离对您来说可能有点太重,因为您无法轻松地在实例之间共享捆绑包

OSGi的标准地址称为子系统,它允许您做您想做的事情,即拥有不同作用域的子应用程序,这些子应用程序将共享它们的大部分代码,比如http服务器


这个标准是相当新的,我不认为有一个成熟的实现,但我建议看看。处女座不支持子系统(现在?),但处女座有一个“计划”的概念,我认为这会满足你的目的。

我同意隔离很重要。OSGi框架只设计为承载一个“应用程序”。如果将多个应用程序部署到同一个框架而不进行隔离,则会在两者之间产生干扰,例如不希望共享包和服务

例如,您可以彻底测试一个应用程序并发现它是有效的。然后彻底测试第二个应用程序,发现它也可以工作。最后,将它们部署到OSGi框架中,发现两者都不起作用!这不好

子系统规范确实提供了隔离,但它很复杂,实现也不成熟。我建议简单地实例化多个OSGi框架。这可以在单个JVM中轻松完成,OSGi中没有任何静态或单例可以阻止它。实例化OSGi框架所需的基本代码约为5-10行


更新:有关如何实例化新OSGi框架的详细信息,请参阅我的博客帖子

我同意隔离很重要。OSGi框架只设计为承载一个“应用程序”。如果将多个应用程序部署到同一个框架而不进行隔离,则会在两者之间产生干扰,例如不希望共享包和服务

例如,您可以彻底测试一个应用程序并发现它是有效的。然后彻底测试第二个应用程序,发现它也可以工作。最后,将它们部署到OSGi框架中,发现两者都不起作用!这不好

子系统规范确实提供了隔离,但它很复杂,实现也不成熟。我建议简单地实例化多个OSGi框架。这可以在单个JVM中轻松完成,OSGi中没有任何静态或单例可以阻止它。实例化OSGi框架所需的基本代码约为5-10行


更新:有关如何实例化新OSGi框架的详细信息,请参阅我的博客文章

子系统看起来非常有前途,期待着到时候尝试:)那么您今天推荐的是运行单独的容器实例,还是有其他方法来隔离我的堆栈?子系统的RI是ApacheAries的一部分。但是,目前还没有二进制下载(截至2013年3月31日),看起来您必须从源代码构建Aries。子系统看起来非常有前途,期待着到时候尝试:)那么您今天推荐的是运行单独的容器实例,还是有其他方法来隔离我的堆栈?子系统的RI是ApacheAries的一部分。但是,没有二进制下载(截至2013年3月31日),它