当我尝试通过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。
答案 0 :(得分:1)
我不完全确定你要做什么。有两种可能性:
如果是前者,那么这是永远不会按设计工作的。上下文是根上下文的事实使得分层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