3

我注意到在运行 Jboss 时这两个选项都可用,并且它们都重新编译了项目(我注意到两者都在运行“make”)。我确实看到了这个问题,接受的答案是有道理的,但我不确定热插拔是什么意思。可以在无需重新启动服务器的情况下注册更改的可能示例是什么?

4

1 回答 1

4

您的问题需要更多细节才能完全回答,但这里有一些基本概念:

  • 热交换只是将您的项目文件替换到应用程序服务器的部署文件夹中(未打包,即不是 .war/.ear,而是所有单独的文件)。它通常更快,因为更改在 Web 应用程序中立即可见。但是应用程序服务器并不总是可能/支持它,并且通常如果您热交换 .jar 文件,应用程序服务器不会选择它或最终会感到困惑。
  • 重新启动 JBoss 将停止所有现有服务(EJB、池、队列、消息传递...)并重新启动它们。这几乎是运行应用程序的最干净的方式(最干净的方式是取消部署、重新启动和部署)
  • 重新部署意味着您的应用程序及其服务首先从 JBoss 中删除,但服务器级别的其他服务设置(消息传递、池、JMX ......取决于您的实际设置)仍然部署。然后部署应用程序(从您的 dev 文件夹或 .WAR/.EAR 复制到 JBoss webapp)

通常,您会安全地热交换(最终手动).(x)html/.jsp/.jsf/images/.js/.css,因为 JBoss 不需要处理它们。更改在 WEB-INF/classes 中部署为 .class 的 java 类中的代码通常可以热交换。

更改部署为 .jar 的 java 文件中的代码几乎总是至少需要重新部署。一些正确配置的启用 OSGi 的应用程序服务器在热交换完整的应用程序时更加灵活(我知道 Glassfish 可以,但我不知道需要什么特定设置)

最后,在开发中,有时多次重新部署会导致内存泄漏或应用服务器不稳定(通常您会在日志中得到 OutOfMemory 异常)然后您需要清理(取消部署、停止、启动然后部署)

于 2013-08-21T02:08:05.120 回答