InitialContext.lookup从错误的context.xml获取数据

时间:2014-09-17 06:19:54

标签: java tomcat java-ee servlets

我在一台计算机上运行两台Tomcat服务器作为Windows服务,每台服务器都安装在不同的HD中并使用不同的端口。 每个Tomcat都将数据源引用保存在它的context.xml到JDBC驱动程序中(两个连接都是相同的MySql服务器,但是不同的数据库):

Tomcat1:

<Resource name="jdbc/monitor" auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="user" password="password"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/monitor
autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8/>"

Tomcat2

<Resource name="jdbc/monitor" auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="user" password="password" 
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/monitorbeta 
autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8/>"

在代码中调用Initial上下文(在两台服务器上的所有servlet中)都是以非常标准的方式调用:

InitialContext context = new InitialContext();
DataSource datasource = (DataSource) context.lookup("java:/comp/env/jdbc/monitor");
Connection connection = datasource.getConnection();            
return connection;

问题是,在Tomcat2上,其中一个servlet从Tomcat1 context.xml获取连接(因此更新了错误的表) - 而其他servlet则“转向”正确的上下文! 我重新启动了服务,确保Tomcats使用其他端口,并且catalina home / base设置在Tomcat2上。我错过了什么?

编辑: 另外,我试图手动将环境设置为InitialContext,如下所示:

env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.rmi.registry.RegistryContextFactory");
env.put(Context.PROVIDER_URL,"rmi://localhost:9080");
Context ctx = new InitialContext(env);

仍然没有成功

1 个答案:

答案 0 :(得分:0)

问题在于我的JDBC处理程序,它明确地溢出了Initial上下文定义......