我个人感觉OSGI表面是为了模块化,但其本质是为了软件设计的永恒主题--复用。
从过程式软件设计,到结构化软件设计,再到面向对象的软件设计,再进一步则是面向组件的软件设计。而java在JDK层面上已经提供了很好的面向对象的软件设计基础,但在面向组件的软件设计方面,则需要在更高的应用层面去实现,而没有基础性的实现方式。也就是说,你用java开发,可以基于组件,也可以不基于组件,这全看你的需求和远见,而且即使是实现面向组件的设计,在jdk层面也没有提供统一的方式。(反之,在面向对象方面,jdk则提供了诸如类、private、public、protected、static等等相关的元素)。
所以OSGI的出现,其实就是弥补了JDK在这方面的缺失。虽然OSGI不在JDK范畴内,但对于实际的应用中,OSGI规范却是介于JDK和基于OSGI的应用之间的,所以,基本上如果你需要将应用建立在OSGI规范之上的话,你的应用所依赖的其他组件也“不得不”迁移到OSGI上来,再加上OSGI独特的ClassLoader设计,使bundle间的类互相访问受到一定的约束,这就导致OSGI的入门门槛较高。
很幸运的是,OSGI经过多年的发展,也已出现了很多类似J2EE相关的各种框架实现,逐步将OSGI的应用门槛降低下来。从结构上说,在JVM之上最底层的就是OSGI的framework,例如:equinox、felix等等,很多osgi的初学者都直接在这些framework上开始,但这会造成很多麻烦,由于这些framework只是提供最基础osgi运行时环境,对于初学者来说,常会遇上要解决诸如log、配置、bundle的启动优先级等等问题。在此,我推荐karaf,karaf不是osgi framework,它是在osgi framework的基础上,整合了log、配置、console等等基础功能的osgi运行时环境,它相当于在equinox(或felix或其它OSGI framework)上包装了一下,令你的osgi应用可以免除集成那些基础功能的麻烦。如果初学者直接基于karaf来运行自己的应用,入门会轻松很多。
再进一步,我推荐servicemix,servicemix其实是个ESB,而karaf就是作为servicemix的内核,并独立出来的一个apache开源项目。在servicemix4开始,已经是osgi化了,同时Servicemix还集成了ActiveMQ、Camel等开源项目。Camel强大的组件化服务功能,使servicemix在SOA方面更加得心应手,如果有空的话,我想我会再跟大家交流一下Servicemix。
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐