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