OSGi 是由OSGi联盟发起的以java为技术平台的动态模块化规范。
OSGI的优势:
1、模块化。模块化并不仅仅是把系统拆分为不同的块而已——这是JAR包就能够做的事情,真正的模块化必须考虑到模块中类的导出、隐藏、依赖、版本管理、生命周期变化和模块间交互等一系列的问题。
2、OSGi可以弥补java中资源精细化分的缺陷,加强架构的自约束能力。
如果有开发人员在web层使用DAO直接操作数据库,或者在DAL层直接从HttpSession对象中取上下文信息,这样的代码也许能逃过测试人员的黑盒测试,但是显然是不符合软件开发基本理论的。OSGi可以清晰的分清各层的依赖关系,可以让Web层只依赖Service层的JAR包,程序员就无法访问到DAO;可以使DAL层没有依赖Servlet API的JAR包。程序员也就不能访问HttpSession对象了。
3、动态化。OSGi可以做到动态修复缺陷,不停机地增加或禁止某块功能、更新某个模块等。
使用OSGi可能遇到的问题
1、OSGi的入门门槛比较高,学习曲线比较曲折。OSGi规范由数十个子规范组成,包含了上千个不同用途的API接口
(OSGi规范显得这么庞杂的主要原因是实现模块化本身需要解决的问题就非常多)
2、增加系统不稳定的风险。最典型的ClassNotFoundException异常、OutOfMemoryError、类加载死锁等常见的问题
OSGi中文社区:http://osgi.com.cn/user/1334158