当几乎相同的应用程序在同一个 Tomcat 实例中启动时,为啥 Tomcat webapp 会失败?
Posted
技术标签:
【中文标题】当几乎相同的应用程序在同一个 Tomcat 实例中启动时,为啥 Tomcat webapp 会失败?【英文标题】:Why is a Tomcat webapp failing when an almost identical app starts within the same Tomcat instance?当几乎相同的应用程序在同一个 Tomcat 实例中启动时,为什么 Tomcat webapp 会失败? 【发布时间】:2011-05-27 02:48:34 【问题描述】:我们在 Linux 上的 Tomcat 5.5.27 下遇到了稍微奇怪的 webapp 部署行为(在生产中的 CentOS 和用于开发的 Ubuntu 10.04 上)。
App A 和 App B 几乎相同(完全相同的库,一个复制的 Maven 项目),App B 的不同之处仅在于它的 JPA 实体被注释以访问相同模式中的不同表(JNDI 数据库引用相同)。
当应用部署到任一环境中时,应用 B 将不启动。然而:
-
从 Tomcat 管理控制台手动启动停滞的应用程序可以正常工作 (???)。
尝试重新启动 Tomcat 后,按字母顺序排列的应用程序无法启动。第 1 点仍然有效 (???)
日志记录已配置(log4j),但是,我们从 [尚未启动的] 应用程序 B 的日志记录中没有得到任何信息,也没有从 Tomcat 的“catalina.out”日志文件中得到任何错误(NB.logging 在应用启动并运行后即可工作)。
我已经对信息进行了相当彻底的搜索(Apache/Tomcat bugzilla、Google),但我没有发现任何真正有用的信息。其他posts 已经看到在服务器的 'context.xml' 'Context' 节点上使用 antijarlocking 和 antiresourcelocking 属性,但也有人建议这在 Linux 下是不必要的/无效的(在这里似乎没有工作,要么)。
有什么想法吗?
干杯
丰富
附:从 Tomcat 5.5.x 升级目前不是一种选择(IT 支持等)。
【问题讨论】:
【参考方案1】:tomcat 上的 spring 应用程序有类似的行为。 -- 他们要求 webAppRootKey 对于每个应用程序都是唯一的。 -- 如果应用程序的行为不像您描述的那样,那么对于 Spring 应用程序,请确保 App-A 有另一个 webAppRootKey 然后是 App-B。
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>myRootKey</param-value>
</context-param>
@见http://groups.google.com/group/riotfamily/browse_thread/thread/9a0edf69575d3ab6?pli=1
【讨论】:
拉尔夫,我会看看这个,让你知道我的进展如何。值得注意的是,您提到 Spring,是的,这些是基于 Spring 的应用程序;-)。另外,感谢您的快速回复。 按照锡上所说的做!是的,这行得通。奇怪的是,我有一个模糊的回忆,我们在另一个项目上设置了这个 webAppRootKey,在过去 4-5 年的某个时候(真的;-))。再次感谢。以上是关于当几乎相同的应用程序在同一个 Tomcat 实例中启动时,为啥 Tomcat webapp 会失败?的主要内容,如果未能解决你的问题,请参考以下文章