要充分理解OSGI带来的优质体验,就需要对比OSGI与传统架构模式的异同。
1. 传统的系统,
我以前接触过的很多系统都有用户验证模块。我最近接触的hudson也是。它可以让我选择是用LDAP来验证,还是用自带的小数据库系统来进行验证。也就是说在传统的应用中,我想替换一个正在使用的模块并不是太难。在运行时,基于同一个接口,选择不同的Impl为我做事情。这本身就是接口编程能为我们做的最基本的事情。
现在我要再加一种全新的验证方式,这种验证方式以前的系统还没有相应的实现。
有人马上就给我答案了,这并不是太难。 基于接口,再开发一个模块,打成一个jar包,应用程序相应的目录里面一扔,重启一下, Ok啦。呵呵,如果不重启呢? 这下麻烦来了,不重启,应用程序的上下文里面都没有布署的那些类,又如何做到不重启。
还是有人有答案,为什么要重启,仅仅是因为应用程序启动时没有加载到你新增的类嘛,那就实现一个自定义的Class loader, 专门负责扫描某个目录中的jar包,一有增删改就再扫一下。这样的话,随时加一种验证方式也就实现了。是的,这个答案与OSGI的思想很吻合。终于有人怒了,说来说去OSGI能做的传统方式也一样能做嘛,要它干嘛。不急着拍砖。接着看.
2. OSGI
如果用传统的方式来实现,就需要熟悉和用到Java底层特性,在具体实现过程中也会遇到不小的难度。OSGI提供优雅的方式来实现Java 软件中的热拔插功能。
1. 传统的系统,
我以前接触过的很多系统都有用户验证模块。我最近接触的hudson也是。它可以让我选择是用LDAP来验证,还是用自带的小数据库系统来进行验证。也就是说在传统的应用中,我想替换一个正在使用的模块并不是太难。在运行时,基于同一个接口,选择不同的Impl为我做事情。这本身就是接口编程能为我们做的最基本的事情。
现在我要再加一种全新的验证方式,这种验证方式以前的系统还没有相应的实现。
有人马上就给我答案了,这并不是太难。 基于接口,再开发一个模块,打成一个jar包,应用程序相应的目录里面一扔,重启一下, Ok啦。呵呵,如果不重启呢? 这下麻烦来了,不重启,应用程序的上下文里面都没有布署的那些类,又如何做到不重启。
还是有人有答案,为什么要重启,仅仅是因为应用程序启动时没有加载到你新增的类嘛,那就实现一个自定义的Class loader, 专门负责扫描某个目录中的jar包,一有增删改就再扫一下。这样的话,随时加一种验证方式也就实现了。是的,这个答案与OSGI的思想很吻合。终于有人怒了,说来说去OSGI能做的传统方式也一样能做嘛,要它干嘛。不急着拍砖。接着看.
2. OSGI
如果用传统的方式来实现,就需要熟悉和用到Java底层特性,在具体实现过程中也会遇到不小的难度。OSGI提供优雅的方式来实现Java 软件中的热拔插功能。