如何从server.xml读取docbase Root的上下文参数

时间:2014-03-18 16:21:06

标签: java eclipse java-ee tomcat jdbc

当我尝试通过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中的root。

1 个答案:

答案 0 :(得分:1)

我不完全确定你要做什么。有两种可能性:

  1. 您正尝试在根战争下部署JNDI资源。
  2. 您正尝试将JNDI资源全局部署到所有Web应用程序上下文。
  3. 如果是前者,那么这是永远不会按设计工作的。上下文是根上下文的事实使得分层URL结构看起来相关,但事实并非如此。 root 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