我们在 tomcat 9 (apache-tomcat-9.0.22) 上部署了一个应用程序。
官方文档 ( https://tomcat.apache.org/tomcat-9.0-doc/config/context.html ) 说可以定义默认上下文元素,但它对我们不起作用。
我们需要定义一个数据源和一个邮件服务器。conf/server.xml如果我们在文件中定义此资源,GlobalNamingResources它就可以工作。
<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 的 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.
提前致谢!
绝地无双
相关分类