好的,通常我们一直在为每个Web应用程序安装一个Tomcat 7实例,因为虽然它们几乎是相同的代码库(真的是相同的应用程序),但我们无法负担一个应用程序关闭更改并影响其他客户。
但安装这么多的雄猫队已经老去了。所以我们认为我们会将每个客户群中的雄猫数量减少到一个。
无论如何,我们的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应用程序测试)但看起来<webapp>/META-INF
中的context.xml必须包含有效的上下文和上下文路径。这是为什么?每个Web应用程序的路径是否必须不同?目前,该文件中没有连接信息(仅在conf/context.xml
中)。
最重要的是,我希望每个网络应用程序在获取数据库连接信息的位置都是“哑”,这样我就可以将战争文件丢弃到任何地方并自动连接。
感谢您的任何建议。
答案 0 :(得分:0)
如果将DataSource定义放在$ CATALINA_BASE / context.xml中,则每个Web应用程序都会使用相同的定义,因此您将拥有多个DataSource。
如果您希望在多个应用程序之间共享一个DataSource,请将DataSource定义添加为server.xml中的全局资源,并将ResourceLink添加到$ CATALINA_BASE / context.xml
META-INF / context.xml不是必需的文件。你可以完全放弃它。如果它存在,则它必须是有效的context.xml文件(例如,有效),但是 - 根据文档 - 它不能包含任何路径或docBase信息。