2011-09-11 94 views

回答

6

OSGi和Java Beans之间的主要区别在于类加载器的工作方式。在标准的.jar文件或EJB中,rt.jar文件或EJB等效文件维护类路径。此外,如果您使用容器来部署应用程序,则可能会有多个导致问题的类路径维护机制。因此,例如,当您创建一个.war文件时,通常会创建一个包含所有.war's .jar依赖项的lib目录。如果您的应用程序中只有一个war或.jar,则不会太糟糕。但想象一下使用100个EJB包含apache-commons的大型企业部署!你最终会得到100个运行在同一个容器中的apache-commons实例,这些实例会吸收资源。

在OSGi中,您将每个.jar文件(我们称之为bundle cuz,现在是OSGi)放入OSGi容器中。每个.jar文件公开(导出)希望其他软件包使用的软件包,并标识软件包的版本。此外,每个捆绑包还明确声明(导入)它需要从其他捆绑包运行的包。然后,OSGi容器将管理所有这些导出并将它们匹配到适当的导入。现在,您可以为每个想要提供的EJB提供apache-commons。您已经取消了/ lib目录,现在您的应用程序占用的资源更少。

在您的问题中,您询问了组件体系结构和模块化体系结构之间的区别。模块化是指将每个捆绑包设置为自己的部署单元并允许其与其他捆绑包进行交谈而不是将它们全部组合成一个大型.jar文件的过程。