根据我的理解,在OSGi中,您可以在运行时更新jar,而无需重新启动服务器.但是,jboss还具有热插拔,全耳朵更新并且服务器仍在运行.
那么OSGi在jboss的企业Java项目中会有什么好处呢?
解决方法
我相信答案与每个OSGi用例相同:模块化和更精细的更新粒度.
OSGi远不止在运行时更新jar,而是不重新启动服务器.从您的问题的角度来看,它是在运行时更新jar,而不重新启动应用程序.
我承认我不知道JBoss AS中EAR热部署的具体实现,但无论如何,EAR更新都不可能被设计为保留应用程序的整个状态.服务器仍在运行,但您在更新时基本上重新启动应用程序.这种状态损失的程度真的取决于你如何设计你的应用程序,但事实依然是你在单纯地做事情.
使用OSGi,情况并非如此:应用程序由大量的软件包组成,每个软件包都希望能够处理单独的功能部分.这种方法使得能够进行应用内部的热部署,因为该框架被设计为考虑重新启动任何单个jar对整个应用程序带来的影响,并使其他jar响应适当.这提供了尽可能多地保留应用程序状态的能力.
因此,OSGi设计在企业案例中的好处是应用程序活动.没有必要强调这一点的重要性.真的有一些用例可以安全地重新启动应用程序.但是,在我看来,OSGi是目前Java EE唯一真正可扩展和可维护的选择.事实上,最重要的应用程序服务器已经(或将要去)到OSGi运行时(并因此提供了OSGi应用程序支持),这就证明了这一点.