Tongweb部署问题及IE浏览器Bug导致的报错

456次阅读
没有评论
Tongweb 部署问题及 IE 浏览器 Bug 导致的报错

当遇到东方通后台部署 war 包程序卡在 70% 的问题时,我感到非常困惑。无论我尝试了多少次,进度条始终停留在那个讨厌的百分之七十。更令人苦恼的是,后台一直报错,提示 ”Context path on virtual server [server] already loaded at[/xxx]”,这让我陷入了绝望的境地。

具体错误如下:

com.tongweb.catalina.core.TongwebRuntimeException: Context path on virtual server [server] already loaded at[/xxx]
at com.tongweb.catalina.core.ThanosStandardHost.addChild(ThanosStandardHost.java:624)
at com.tongweb.web.thanos.startup.ThanosHostConfig.deployWar(ThanosHostConfig.java:230)
at com.tongweb.tw.thanos.ThanosWebtierWebAppBuilder.fireTomcatProcess(ThanosWebtierWebAppBuilder.java:434)
at com.tongweb.tw.thanos.ThanosWebtierWebAppBuilder.deployApplication(ThanosWebtierWebAppBuilder.java:381)
at com.tongweb.deploy.TongWebDeployer.deploy0(TongWebDeployer.java:323)
at com.tongweb.deploy.TongWebDeployer.deploy(TongWebDeployer.java:283)
at com.tongweb.deploy.commands.DeployCommand.deploy(DeployCommand.java:270)
at com.tongweb.console.deployer.service.DeployerService.deploy(DeployerService.java:587)
at com.tongweb.console.deployer.controller.DeployerController.deploy(DeployerController.java:360)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237)
at org.jboss.resteasy.springmvc.ResteasyHandlerAdapter.createModelAndView(ResteasyHandlerAdapter.java:96)
at org.jboss.resteasy.springmvc.ResteasyHandlerAdapter.handle(ResteasyHandlerAdapter.java:82)
at org.jboss.resteasy.springmvc.ResteasyHandlerAdapter.handle(ResteasyHandlerAdapter.java:26)
at org.jboss.resteasy.springmvc.ResteasyWebHandlerTemplate.handle(ResteasyWebHandlerTemplate.java:39)
at org.jboss.resteasy.springmvc.ResteasyHandlerAdapter.handle(ResteasyHandlerAdapter.java:47)
work.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:933)
Servlet.doService(DispatcherServlet.java:867)

我不甘心被这个问题打败,于是我开始分析可能的原因。首先,我试图改变应用程序的名称,希望能绕过这个问题。可是无论我怎么改名,问题依旧困扰着我,进度条依然停滞不前。接着,我尝试修改部署时的 context 路径,然而这一举措也没有带来任何好转。接连的失败让我心情焦虑,我开始考虑是否是域的问题,于是我创建了一个全新的域,试图在新域中部署程序。然而,这似乎也不是解决之道。

为了解决问题,我决定深入研究代码。通过反编译,我发现问题似乎出现在 com.tongweb.catalina.core.ThanosStandardHost.addChild(ThanosStandardHost.java:624) 这行代码中的 addChild 方法。该方法在进行校验时,发现 tongweb.xml 文件里存在了相同的上下文,于是报错。然而,反复检查了 tongweb.xml 文件后,我并没有发现任何问题。

我的好奇心被激发了,我开始怀疑是不是系统的某个 Bug 导致了这个奇怪的现象。于是我尝试了不同的解决方案,但令人沮丧的是,依然没有收获任何成果。我陷入了彷徨的状态,不知道还能做些什么。

在绝望之际,我偶然间发现了一个奇怪的现象。当我将一直失败的尝试在 IE 浏览器中进行时,问题依然存在;然而,当我使用 Google Chrome 或者火狐浏览器时,竟然成功地部署了程序!这一发现让我震惊不已,难道问题出在 IE 浏览器上?

我开始深入研究 IE 浏览器的行为,发现它在部署过程中会重复发送请求。这意味着当部署时间较长时,IE 浏览器会不断地向服务器发送部署请求,导致服务器加载重复的上下文,从而引发了报错。终于,问题的原因浮出水面,看来这是一个涉及 IE 浏览器的 Bug!

为了进一步确认,我尝试了几次在不同时间段使用 IE 浏览器进行部署,果然每次部署时间稍长,问题就会再次出现。而在同样的条件下,Chrome 和火狐浏览器始终表现得稳定可靠。

我欣然接受了这个结论,而且我相信,这个问题可能与 IE 浏览器的缓存机制有关。或许 IE 浏览器在长时间使用后,对缓存的处理机制有了某种异常,导致了部署请求的重复发送。然而,这只是我的猜测,真正的原因可能更加复杂。

不管是缓存问题还是 Bug,至少我终于找到了解决问题的方法:将 IE 浏览器换成其他浏览器!这对于那些在使用东方通后台部署程序时遇到类似问题的人来说,应该是一个值得尝试的解决方案。同时,我也希望东方通的开发团队能够关注并解决这个问题,让更多的用户在部署过程中少遇到这样的困扰。

在这个问题的探索过程中,我收获了许多宝贵的经验。对于以后遇到类似问题,我会更加深入地去探究根本原因,而不仅仅是寻找表面的解决方法。毕竟,解决 Bug 并不是一件容易的事情,需要耐心和扎实的技术功底。

总之,这次经历让我更加了解了东方通后台部署的一些特性,也让我对浏览器在程序部署中的作用有了更深刻的认识。希望我的经验能对其他人有所帮助,让大家在使用东方通时少走一些弯路。同时,也希望开发者们在设计软件时,能够更加注重不同浏览器之间的兼容性,避免因为浏览器 Bug 而给用户带来不必要的麻烦。

正文完
 
评论(没有评论)