OSGi对模块化Web项目是否过度杀伤?

时间:2011-02-09 14:24:34

标签: java spring maven osgi modularity

我主要使用Java,Maven和Spring开发一个大型Web项目。但是,Web项目有不同的风格,可以满足特定的客户需求。例如,如果一个客户想要一个Twitter页面,而另一个客户不想要,那么我需要能够在有或没有Twitter页面的情况下构建该Web项目的风格。

我一直在研究Maven覆盖和OSGi两种选择。从基础叠加层复制资源时,Maven叠加层往往需要很长时间才能构建。我正在考虑将Spring OSGi Web作为一个选项,因为它们似乎正在为模块化Web项目的小块(控制器,视图,JS /资源/图像)进行模块化。

OSGi是否过度杀伤?这是我需要使用的吗?还有更好的东西吗?

4 个答案:

答案 0 :(得分:1)

您可能对Spring Slices感兴趣。它基本上允许您将Web应用程序的片段部署为单独的bundle。根据您整体产品的复杂程度,这可能是可取的。

我暂时没有认真看待它,所以我不太确定它的当前状态,但我预计它会因为我上次看起来有很大改善。

任何拥有更多最新信息的人都可以随意添加链接。

http://blog.springsource.com/2009/08/07/slices-menu-bar-screencast/

答案 1 :(得分:1)

如果您需要在运行时添加/删除无法预料的功能(和代码)(而不仅仅是启用或禁用它),OSGI非常棒,但大多数时候,Web应用程序不需要这样做。

因此,在您的情况下,我建议使用配置(文件)来启用或禁用功能,只要这是可能的。这也有一个优点,那就是你只需要一个WAR。

要解决以下问题:“如何将配置文件放入WAR中”,您有多种方法(Different files to be packaged in a Maven war project):

  • use maven environements - (好吧,那么你有几个WAR,但配置文件中唯一的不同,构建过程变得不那么慢,因为只为每个环境完成了WAR打包过程)
  • 将配置存储在WAR之外
  • 将配置存储在WAR之外,例如存储在数据库

答案 2 :(得分:0)

Matt,根据经验,尝试只有一个版本的应用程序,并尝试使用配置属性进行管理。 想象一下,当您有10个客户端并且每个客户端都有一些功能时会发生什么,但不是两个客户端具有相同的功能集。

答案 3 :(得分:0)

https://github.com/griddynamics/banshun这是Spring的osgi-less模块​​化支持两种自定义概念。它可以通过称为构建时自定义的通配符来拾取和实例化模块(子上下文),这意味着maven配置文件在WAR中放置了必要的叠加。相反的方式是运行时自定义,当根据属性定义必要的模块时。