我有一个在 servlet 容器 (Tomcat) 中运行的 Web 应用程序。我的计划是使用热插拔来向正在运行的 Web 应用程序添加和删除其他模块。这些附加模块只包含一些业务逻辑,但不包含任何与 Web 相关的东西,例如 servlet、JSP 页面或 HTML 文件。
做这个的最好方式是什么?
为了使用 OSGi,我考虑过从 Tomcat 切换到 Glassfish。我还考虑过将 Apache Felix 与 Tomcat 一起使用。
有哪些替代方案?
我有一个在 servlet 容器 (Tomcat) 中运行的 Web 应用程序。我的计划是使用热插拔来向正在运行的 Web 应用程序添加和删除其他模块。这些附加模块只包含一些业务逻辑,但不包含任何与 Web 相关的东西,例如 servlet、JSP 页面或 HTML 文件。
做这个的最好方式是什么?
为了使用 OSGi,我考虑过从 Tomcat 切换到 Glassfish。我还考虑过将 Apache Felix 与 Tomcat 一起使用。
有哪些替代方案?
如果您想创建一个可以快速更新而无需停机的模块化应用程序,OSGi 绝对是正确的技术。
你有几个选择:
您可以从像 Apache Felix 这样的 OSGi 容器开始,然后将包部署到该容器中,用于您的应用程序和 Web 服务器(其中大部分基于 Jetty)。这样,一切都是一个捆绑包,可以根据需要进行更新。如果您从头开始,并且对必须使用的现有 servlet 容器没有任何限制,那么这就是您要走的路。
如果您必须继续使用现有的 servlet 容器,您可以部署一个嵌入 OSGi 容器的 WAR,并且 OSGi 容器将加载构成您的应用程序的所有包。在这种情况下,您可以部署一个特殊的“桥”捆绑包,它将向“主机”servlet 容器注册 Servlet 和过滤器。
从 Glassfish 开始有点像第一个选项,因为 Glassfish 本身是基于 Felix 构建的。你只是在你的应用程序中预装了很多“额外的”包。如果您无论如何都使用其中的 80%,那可能是值得的。如果您在应用程序中几乎不使用任何 Glassfish (JavaEE) 功能,那么您最好从 Felix 开始并在那里选择组件。