【发布时间】:2019-07-17 11:01:01
【问题描述】:
我们在 tomcat 9 (apache-tomcat-9.0.22) 上部署了一个应用程序。
官方文档 (https://tomcat.apache.org/tomcat-9.0-doc/config/context.html) 说可以定义默认上下文元素,但它不适合我们。
我们需要定义一个数据源和一个邮件服务器。如果我们在GlobalNamingResources 的conf/server.xml 文件中定义此资源,它就可以工作。
<GlobalNamingResources>
<Resource name="mail" type="javax.mail.Session"... />
<Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... />
</GlobalNamingResources>
但在生产中,我们无法修改server.xml 文件。所以我们需要在另一个文件中定义这个资源。
如果我们在 $CATALINA_BASE/conf/[enginename]/[hostname]/ROOT.xml 文件中使用名为 ROOT.war 的战争定义资源,它会起作用:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Context configuration file for my web application -->
<Context>
<Resource name="mail" type="javax.mail.Session"... />
<Resource name="jdbc/mydb" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"... />
</Context>
此解决方案可能令人满意,但我们的 war 文件必须具有与 ROOT.war 不同的名称(如 MyApp_v42.war),并且每次更新都会更改。我们不能在每次更新时重命名 xml 文件。
如果我们在$CATALINA_BASE/conf/context.xml 文件或$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default 文件中定义资源,就像文档说我们获得了javax.naming.NameNotFoundException。
提前致谢!
【问题讨论】:
标签: java tomcat deployment war context.xml