如何在Tomcat 7中设置<Resource>,这样我就不需要在代码中使用"java:/ comp/env"了?

Ste*_*eve 7 java resources tomcat jndi

我是新手,在Tomcat中设置JNDI资源并设置JNDI资源.

我继承了一个servlet应用程序.它通过WebLogic在测试服务器上运行.servlet应用程序以下列方式访问其数据库资源:

ctx  = new InitialContext();
ds   = (javax.sql.DataSource)ctx.lookup("myDataBaseName"); 
conn = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)

当我在测试JSP中尝试它时,它不起作用.我明白了

javax.naming.NameNotFoundException: Name myDataBaseName is not bound in this Context
Run Code Online (Sandbox Code Playgroud)

但是,如果我改变测试JSP代码,我就能使测试JSP工作:

ctx  = new InitialContext();
Context envContext = (Context)ctx.lookup("java:/comp/env");
ds   = (DataSource)envContext.lookup("myDataBaseName");
conn = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)

我在TOMCAT_HOME/conf/context.html中有这个条目(我只是将它用作我的盒子上的开发环境)

<Resource name="myDataBaseName"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@blahblahblah:1521:database3"
        username="joeuser"
        password="password"
        maxActive="20"
        maxIdle="30"
        maxWait="-1"/>

</Context>
Run Code Online (Sandbox Code Playgroud)

我在TOMCAT_HOME/conf/web.xml中有这个:

<resource-ref>
    <res-ref-name>myDataBaseName</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

我读了大约10个关于相关问题的stackoverflow页面,但我不熟悉设置JNDI资源来抽象我的问题的解决方案.

如何更改Tomcat 7设置的方式以允许现有的servlet应用程序以"myDatabaseName"的形式访问其数据库?我没有选择改变servlet应用程序中的代码或改变WebLogic在测试服务器上的设置方式.

我需要改变我在我的计算机上设置Tomcat 7副本的方式(对于开发环境),以允许servlet应用程序以本帖子顶部的第一个引用代码块的方式访问其数据库.

Ola*_*laf 0

使用您提供的配置,您应该能够执行以下操作:

    ctx  = new InitialContext();
ds   = (DataSource)ctx.lookup("java:/comp/env/myDataBaseName");
conn = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)