和一个朋友聊天时谈到了OSGi,突然觉得swing_designer这个项目是最适合用OSGi模式开发的。这个项目里存在很多适合component和service的模型,因此打算把这个项目改造成OSGi架构的。今天仔细阅读了一遍OSGi R4的规范,发现其DS是比较适合这个项目的。由于之前在设计这个系统时就有意的做好了各种分割,接口设计的也比较合理,粗略估计了一下,代码修改改不会太多。重构好了之后的swing_designer应该是一个能使用OSGi插件机制方便的扩充平台,不仅仅能扩充自定义组件,还能扩充自定义布局管理器、自定义border、自定义属性编辑器等。
其实OSGi的确是一个不错的技术标准,希望Sun能给OSGi在Java更高的地位。一直以来人们都认为OSGi和Sun的对立,就像Eclipse同NetBeans的对立一样尖锐。但根据我所了解的情况,Sun并没有敌视OSGi,只是对于在Java中纳入OSGi的态度过于谨慎。我觉得Sun肯定是要最后完全纳入OSGi的,问题就是速度问题。Sun在JSR 277和JSR 291的意思应该解释为,不赞同在JVM一个级别支持OSGi,但愿意在更高应用层支持OSGi。在Sun看来,JSR 277存在层次比OSGi更低,它可以为JSR 291所提的OSGi标准提供更好的支持。而在更低层次支持OSGi一方面存在技术上的原因,另一方面会忽略了其他技术的支持。总之一句话,JSR 277和JSR 291不存在像OSGi拥护者想像的那种激烈竞争关系,而是相辅相成的关系,他们存在于不同的层面,JSR 277为OSGi的实现提供底层支持。这一点就连JSR 291的专家组组长也是这么认为的。当然我希望JSR 277和JSR 291能够更好的沟通,避免不必要的重叠和竞争设计。
关于JSR 277和OSGi之争,我觉得最好搁置,求同存异,毕竟将OSGi这种高层标准放到JVM层来实现的确不合适。希望这两个JSR能较好的处理好两者的关系,不要让他们形成竞争关系,而应该使他们成为合作关系。