OSGI入门:Bundles之间的相互依赖性
????? 在我们上次的课程中,我们学习了如何启动和停止一个bundle,以及它们在框架内是如何相互交互的和它们的生命周期。但是bundle真正为了什么(这样翻译对吗)?
?
????? 每一个bundle是一个模块,它们允许我们将一个完整的项目切分成管理块,这样可以在OSGi运行的时候,加载进去。问题是无论我们是否喜欢,各个模块之间总是存在依赖性。在老式的jar文件中,从来没有一种可靠地方式指定依赖与其他jar包(类路径中的条目并不是可靠地表现方式)。然而你永远都不知道在运行的时候,jar中的代码是正常工作还是抛出异常。
?
????? OSGi非常优雅的处理这个问题。而且,它表现的要比它说的更好。所以,让我们赶快去查看代码吧。遗憾的是我们到目前为止一直使用默认的包,但是这样的工作不会太久,现在我们使用恰当的包开始工作吧!让我们看一段非常简单的JavaBean,你需要将下面的代码拷贝到osgitut/movies文件夹下的Movie.java中
?
??????? BasicMovieFider终于处于“RESOLVED”状态了。这是必须的一步,因为只有处于“RESOLVED”状态了,才可以被“start”。而且不再取决于其他的Bundle。
?
??????? 注意,通常我们没有必要这样做。Bundle会根据它们的需要自动的被“RESOLVE”。因此,即使我们没有使用“refresh”,它也会自动的处于“RESOLVED”状态。
?
??????? 这就是本节课的内容,OSGi还有更多有趣的东西等着我们,来看看Chris Aniszczyk's excellent article on IBM developerWorks 的内容。敬请期待下期课程,我们在那里开始深入学习OSGi服务。