OSGI的切实体会

之前看了一些Osgi的文章和例子,只是大概了解了其作用和用法。今天项目中出现的一个问题,让我又一次切实地体会到了OSGI的好处(当然只是一部分好处)。

 

之前的体会:在公司的项目中因为模块划分问题,一个项目往往会有许多小的应用程序(打包成多个ear)。应用程序间的调用不是用webservice,就是用ejb的远程调用。其实大部分的应用程序都是装在同一台Server(weblogic)上,但是通过远程调用,performance影响十分严重。个人觉得OSGI是解决这个问题的有效方法。

 

今天遇到的问题(可能很多人都遇到过):公司的一个老产品,几年前就开始开发了,一直使用的是spring1.0的版本。现在我们要为产品增加新的功能,需要用到CXF,可是CXF必须用spring2.0。这样问题就来了,因为classloader的问题,如果要用如果要用CXF,那么整个产品都要升级spring的版本,但是发现spring1里annotation的配置和spring2有些不同,如果要升级到spring2就需要对之前的老代码/配置进行修改。虽然可行,但是老板们还是觉得风险很大......

其实问题就在于, 现在我们在同一个ear包里,不同的代码不能使用不同的spring版本。但是OSGI确能够解决这个问题。

 

OSGI将不同的小模块放到不同的bundle里,每个bundle有自己的classloader,bundle可以引用指定版本的其他bundle,所以只要将我们CXF部分做成一个bundle A,其他部分做成bundle B,那么两个bundle就可以使用不同的spring版本了。

 

你可能感兴趣的:(spring,webservice,weblogic,ejb,osgi)