OSGi的收支平衡点

时间:2009-07-28 22:40:56

标签: java osgi

OSGi似乎是最近的热门词汇。调用了许多benefits

  • 降低复杂性
  • 重用
  • 轻松部署
  • 版本

(等)

我要求一个非常具体的用例 - 中小型Web应用程序。 OSGi会为这些带来什么好处?这实际上值得吗?

2 个答案:

答案 0 :(得分:7)

我会一如既往地说“这取决于”。

您的环境

考虑一个没有OSGI经验的现有团队(他自豪地认为自己是“完成任务”的经验丰富的开发人员。他们有可能会遇到重大痛苦或缓慢的开始。

很多(比您想象的更多)开发人员不熟悉AntMaven等构建工具,当他们只使用这些构建工具的有限功能时。

最好使用EclipseAnt tasksMaven BND plugin VS脚本或jar存档的手动编写清单来创建OSGI包。

小型应用程序

对于小型应用程序,OSGI会引入不必要的复杂性,同时您可以使用动态语言(如Jython等)或插件框架(如JPFSPI)。您也可以直接使用反射和简单的自定义类加载器。

大型应用

大型应用程序可能会从OSGI中受益,特别是当它们从头开始编写时。恕我直言在现有应用程序中集成OSGI更像是引入一个补丁来提供模块化架构。

根据我的经验,在重写了许多应用程序之后,最好在项目的早期考虑模块化。

其他问题

部署: 在任何应用中都是一样的。如果您习惯于部署Java Web Start应用程序,则不需要进行部署。如果您已经习惯了OSGI,那么部署不应该是一个问题。

在生产中部署它时,在任何应用程序中都会偶尔出现问题,这很自然。

版本控制: 有许多方法可以在应用程序中提供版本控制。但是,如果您只使用版本控制作为“信息”而不是作为工具(管理依赖关系要求),则版本控制不是问题。

重复使用: 使用OSGI时,您倾向于编写代码以供重用,但任何编写良好的API都应考虑到代码重用。

Eclipse是使用OSGI编写的成功大型应用程序的第一个示例。还有其他大/好工具不使用OSGI并且是模块化的。

<强>结论

在许多模块化框架中,很难处理依赖关系,在运行时停止/启动/卸载/安装功能,而无需重新启动应用程序。您可以使用自定义类加载器,关闭和启动挂钩等。

OSGI以较低的成本为您提供这种灵活性恕我直言。

答案 1 :(得分:6)

即使我是OSGi的忠实粉丝,我也会冒险 NO 。除非您正在使用其他OSGi捆绑包,否则您遇到一个特定问题,如果没有这个大锤,您将无法轻松解决。

优点是优雅的类路径分离(恕我直言)。如果您需要相同JAR /类的不同版本,比如因为您正在升级应用程序的某些部分,或者因为您正在组合许多第三方模块,那么OSGi就很棒。

这不是一件容易实现的事情,而且OSGi并不容易。它变得干净,但代价是环境堆栈中的另一层。还有很多需要学习和维护的工作。

更不用说文档不是特别适合初学者。

我建议学习它 - 构建Eclipse插件是一种非常好的方法 - 但是在你知道它之前不要将它构建到你的开发计划中。

相关问题