如何设置在虚拟机上运行的Tomcat以启用远程调试以及热交换同步文件更改?

时间:2014-01-30 17:48:12

标签: java tomcat virtual-machine

提前道歉,以便做出冗长的解释。

我们有一个大型Web应用程序,它使用RabbitMQ服务器,Tomcat Web服务器,MySQL数据库和Hadoop环境。大多数团队使用Windows,一个使用Ubuntu,但我们使用CentOS作为部署环境。我们最近开始使用vagrant和ansible来标准化跨多个环境的环境配置和部署。这是提高应用程序质量的一部分,也有助于我们避免不同环境之间的故障。

我们有大部分是现在的工作,并且在过去的几天我一直在寻找到复制(或者甚至提高)我们目前的发展过程中有关于构建,运行,调试和热插拔次要代码更改无需重新启动应用程序。我们现有的设置使用嵌入式Jetty(在eclipse中),我们可以在运行或调试模式下运行Jetty。有了这个设置,我们可以设置断点,浏览到相关的网页,而当断点激活,我们可以单步执行代码,丢帧从堆栈中通过的方法再次运行,甚至使小的改动代码(在规则之内JVM hotswapping)。当然,这对我们非常有帮助。

我想尽可能多地复制这种行为,除了代替嵌入式jetty实例,我想远程调试虚拟机上的tomcat实例,但仍然可以对代码进行更改而无需重启tomcat每一次。我应该在这一点上指出我知道JRebel,但是我们的团队在这个时候被认为是不可行的。

此时我已设法自动同步(使用vagrant); 'src / main / webapp / WEB-INF','target / classes'(由eclipse编译)和'target / lib'(由maven copy-dependencies插件创建)。这些都被同步到了正确的地方。 vm,所以tomcat认为它是一个爆炸性的战争。我已正确设置Tomcat以便它在调试模式下运行,并且我已经使用eclipse连接到它,并通过放置一个断点成功进入调试模式。同步文件导致tomcat重新启动应用程序并使用新文件。

唯一的问题是,当我保存对文件的更改时,我丢失了所有会话数据,我必须等待重新部署完成,然后重复相应的步骤以返回到断点。这显然是浪费时间。

经过那么冗长的解释,我的问题是:

  1. 有没有人设法实现我想做的事情?
  2. 我正在努力做什么?
  3. 如果有,有没有人有任何提示可以帮助我完成配置?
  4. 我可以在不触发上下文重新加载的情况下进行热级替换吗?
  5. 对于这篇文章,任何帮助都会非常感谢和抱歉! :)

0 个答案:

没有答案