【发布时间】:2011-03-05 02:05:57
【问题描述】:
我最近一直在学习 OSGi 和一些关于 Groovy 的知识,但对两者都很陌生。我知道 Groovy 是 Grails 框架的一部分,而且 Grails 有利于快速开发。 OSGi 中最令人向往的特性之一是类加载器管理,我相信这可能仍然是 Grails 的一个问题(如果错了请纠正我)。所以,我很好奇在 OSGI 环境中运行 Groovy 和/或 Grails 是否可能,甚至是可取的?
【问题讨论】:
我最近一直在学习 OSGi 和一些关于 Groovy 的知识,但对两者都很陌生。我知道 Groovy 是 Grails 框架的一部分,而且 Grails 有利于快速开发。 OSGi 中最令人向往的特性之一是类加载器管理,我相信这可能仍然是 Grails 的一个问题(如果错了请纠正我)。所以,我很好奇在 OSGI 环境中运行 Groovy 和/或 Grails 是否可能,甚至是可取的?
【问题讨论】:
有一个Grails plugin 可用,它将Grails 应用程序转换为可以部署在SpringSource 的dm 服务器上的OSGi 包。插件作者还发布了一些关于 Grails 与 OSGi 集成的blog posts。但是,据我了解,Grails 框架的 OSGi 支持仍然相当有限,将通过Grails 2.0“原生”支持。
【讨论】:
在我看来,将整个应用程序打包为 OSGi 包并没有真正的好处,除了可以在 OSGi 容器中运行它。它不会使您的应用程序更加模块化,因为它仍然是一个大捆绑包。请注意,使用 OSGi 不会简化与类加载有关的任何事情。当您使用未设计为在 OSGi 环境中运行的库时,它可能会引入问题。除非您有充分的理由,否则不要使用它。这是一项很棒的技术,但仅仅将其放入其中不会使任何事情变得更简单或更好。
【讨论】:
我倾向于认为,相反的方式更可取:让 Grails 模块,如 GORM 或 GSP 在 OSGi 容器中运行。 所有 Groovy 或 Grails jar(现在是模块而不是插件)都已经与 OSGi 兼容,因此将它们安装到正在运行的容器中应该不是问题。因此,您可以结合两种生态系统的优势。
另一方面,与 tomcat 相比,将打包为一个巨大的单体包的应用程序部署到 OSGi 容器中并没有太大区别。
【讨论】: