oracle - Tomcat GlobalNamingResources ResourceLink Oracle 获取数据源

标签 oracle tomcat jdbc

我在使用 Tomcat 7 获取 JDBC 数据源时遇到困难

javax.naming.NameNotFoundException: Name [jdbc/weblogin01b] is not bound in this Context. Unable to find [jdbc].
    at org.apache.naming.NamingContext.lookup(NamingContext.java:818)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:166)
    at org.apache.naming.factory.ResourceLinkFactory.getObjectInstance(ResourceLinkFactory.java:92)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:841)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:829)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:166)

在CATALINA_BASE/conf/server.xml中

我包含了各种略有不同的资源 所有的目标都是相同的连接,希望其中之一是正确的:

<GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />


    <Resource name="jdbc/weblogin01"
        username="weblogin01"
        password="xxxxx"
        auth="Container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.pool.OracleDataSource"
        description="Global Address Database"
        url="jdbc:oracle:thin:@10.15.120.29:1522:DGSPC"
        maxActive="15"
        maxIdle="3" />

    <Resource name="jdbc/weblogin01b"
        user="weblogin01"
        password="xxxxx"
        auth="Container"
        type="javax.sql.DataSource" 
        driverClassName="oracle.jdbc.OracleDriver"
        factory="oracle.jdbc.pool.OracleDataSourceFactory"
        url="jdbc:oracle:thin:@10.15.120.29:1522:DGSPC"
        maxActive="20"
        maxIdle="3"
        maxWait="-1" />   

    <Resource name="jdbc/weblogin01c"
        user="weblogin01"
        password="xxxxx"
        auth="Container"
        type="javax.sql.DataSource" 
        driverClassName="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@10.15.120.29:1522:DGSPC"
        maxActive="20"
        maxIdle="3"
        maxWait="-1" />   

</GlobalNamingResources>

在 META-INF/context.xml 中

我有每个资源的资源链接

<Context antiJARLocking="true" path="/testDbAccess">
    <ResourceLink name="jdbc/weblogin01"
        global="jdbc/weblogin01"
        type="javax.sql.DataSource"/>
    <ResourceLink name="jdbc/weblogin01b"
        global="jdbc/weblogin01b"
        type="javax.sql.DataSource"/>
    <ResourceLink name="jdbc/weblogin01c"
        global="jdbc/weblogin01c"
        type="javax.sql.DataSource"/>
</Context>

在 web.xml 中,我没有进行与 JDBC 相关的任何更改,因为我了解 ResourceLink 元素就足够了。

在 Java 代码中,我尝试按如下方式获取数据源:

String dbUser = "weblogin01b";
try {
    // Obtain our environment naming context
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");

    // Look up our data source
    ds = (DataSource) envCtx.lookup("jdbc/" + dbUser);          
    if (ds == null) {
        logger.log(Level.WARNING,"Null datasource for " + dbUser);
    }
}

鉴于上述异常(exception),它永远不会获取数据源,这与以下情况相同:
jdbc/weblogin01
jdbc/weblogin01b
jdbc/weblogin01c

我发现 Tomcat 是一场艰苦的斗争,任何帮助将不胜感激。

最佳答案

谜题的第 1 部分已解决:

我编辑了错误的 server.xml 副本

我在 NetBeans 下运行 Tomcat,它创建了 CATALINA_HOME 的单独副本,并将其配置为 CATALINA_BASE,我没有注意到单独的副本。

我希望 Tomcat 的 CATALINA_HOME 和 CATALINA_BASE 始终是独立的并且明显不同,即没有重复的文件。

第 2 部分是一个不同的故事:
java.sql.SQLException: ORA-01017: 无效的用户名/密码;登录被拒绝

我知道我已经指定了正确的用户名和密码,但我没有看到这些值记录在任何地方,我猜测我在错误的属性中指定了正确的值。

关于oracle - Tomcat GlobalNamingResources ResourceLink Oracle 获取数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595842/

相关文章:

java - 如何在 Eclipse 项目中包含 mysql 数据库

mysql - Groovy:RedHat:java.sql.SQLException:没有找到适合 jdbc:mysql 的驱动程序:

java - JAVA如何获取上传速度

tomcat - 如何修复 Tomcat list 的 Augeas 依赖性?

tomcat - Sysdeo Tomcat DevLoader - Java 类的热部署导致整个应用程序重新启动

asp.net-mvc - 使用 Entity Framework 从 oracle 数据库创建模型

java - 难以使用SQLserver jdbc连接到数据库

oracle - 使用 SQL/MM Still Image 将 BLOB 图像与存储为 ORDImage 的图像进行比较

json - 向具有 JSON CLOB 约束 Oracle 的表添加列

mysql - 设计具有多种变体产品的数据库的最佳方法是什么?