如何使用 docbase Root 从 server.xml 读取上下文参数
Posted
技术标签:
【中文标题】如何使用 docbase Root 从 server.xml 读取上下文参数【英文标题】:How to read context parameter with docbase Root from server.xml 【发布时间】:2014-03-18 16:21:06 【问题描述】:当我尝试通过 server.xml 访问数据源并将 docbase 设置为我的应用程序时。它工作完美。但是,如果我尝试通过 docBase=root 和 path="" 访问它,它就不会被访问。我正在使用Tomcat
<Context docBase="Configurator" path="/configurator" reloadable="true" source="org.eclipse.jst.jee.server:Configurator">
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxActive="10" maxIdle="4" name="jdbc/DB" password="xyz" type="javax.sql.DataSource" url="jdbc:sqlserver://xxx.xx.xx.xx:1433;DatabaseName=23" username="sa"/>
</Context>
<Context path="" docBase="ROOT" reloadable="true" crossContext="true" override="true">
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxActive="10" maxIdle="4" name="jdbc/Db2" password="xyz@123" type="javax.sql.DataSource" url="jdbc:sqlserver://xxx.xx.xx.xx:1433;DatabaseName=Real23" username="sa"/>
</Context>
我无法通过下面的代码访问第二个值“Db2”-
try
Context initContext;
initContext = new InitialContext();
DataSource o = (DataSource)initContext.lookup("java:/comp/env/jdbc/Db2");
System.out.println(o.toString());
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
谁能建议我应该怎么做才能从 server.xml 访问这些元素,其中 docbase 是 tomcat 中的根目录。
【问题讨论】:
【参考方案1】:我不完全确定您要做什么。有两种可能:
-
您正在尝试在 root war 下部署 JNDI 资源。
您正在尝试将 JNDI 资源全局部署到所有 Web 应用程序上下文。
如果是前者,那么这永远不会按设计工作。上下文是根上下文这一事实使分层 URL 结构看起来相关,但事实并非如此。根 webapp 就像另一个其他 web 应用程序一样。因此,有关类加载器和资源隔离的规则适用。根上下文/Web 应用程序不以任何方式“高于”其他上下文/Web 应用程序,因此不允许以这种方式共享资源。
如果您试图使资源对所有应用程序都是全局的,那么不要将它放在上下文中,而是在 Tomcat 中使其成为全局的。 Tomcat 有一个全局的context.xml
,它在运行时被合并到内存中的每个 Web 应用程序中。我想你也可以直接放在server.xml
<GlobalNamingResources>
下。有关详细信息,请参阅此处的 Tomcat 文档:http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html
【讨论】:
谢谢!我属于第 2 种可能性,您的解释帮助很大。以上是关于如何使用 docbase Root 从 server.xml 读取上下文参数的主要内容,如果未能解决你的问题,请参考以下文章
Django - serve() 得到了一个意外的关键字参数“documuent_root”