0

好的,通常我们一直在为每个 Web 应用程序安装一个 Tomcat 7 实例,因为尽管它们几乎是相同的代码库(实际上是相同的应用程序),但我们无法承受让一个应用程序因更改而停机,这会影响其他客户。

但是安装这么多的Tomcat已经过时了。因此,我们认为我们会将 Tomcat 的数量减少到每个客户组一个。

无论如何,我们的 Hibernate 配置使用 JNDI,我想我会为每个 Tomcat 组创建一个通用 context.xml 文件并将其存储在其中,CATALINA_BASE/conf/context.xml以便同一组下的所有应用程序可以共享相同的生产数据库数据源。

我会在我的本地 Tomcat 上做同样的事情进行开发,只是让那里的上下文包含开发数据源信息。这样我就可以将战争部署到生产服务器或本地开发服务器,而不必更改上下文文件。

我假设如果我保持以下方案,我应该能够实现这一目标。

CATALINA_BASE/conf/context.xml  # either contains production or dev connections
CATALINA_BASE/conf/Catalina/localhost/    # EMPTY - don't want apps overwriting data sources
CATALINA_BASE/webapps/<webapp>/META-INF/context.xml  # almost BLANK.

到目前为止,这似乎有效(仅使用一个 Web 应用程序进行了测试),但看起来 context.xml<webapp>/META-INF必须包含有效的上下文和上下文路径。这是为什么?每个网络应用程序的路径是否必须不同?目前,该文件中没有连接信息(仅在 中conf/context.xml)。

最重要的是,我希望每个 Web 应用程序在获取数据库连接信息的地方都“哑巴”,这样我就可以将战争文件放在任何地方,它们会自动连接起来。

感谢您的任何建议。

4

1 回答 1

0

如果您将 DataSource 定义放在 $CATALINA_BASE/context.xml 中,则每个 Web 应用程序都会使用相同的定义,因此您将拥有多个 DataSource。

如果您希望在多个应用程序之间共享一个 DataSource,请将 DataSource 定义添加为 server.xml 中的全局资源,并将 ResourceLink 添加到 $CATALINA_BASE/context.xml

META-INF/context.xml 不是必需的文件。你可以完全忽略它。如果它存在,它必须是一个有效的 context.xml 文件(例如有效),但是 - 根据文档 - 它不能包含任何路径或 docBase 信息。

于 2013-05-04T18:50:34.567 回答