gpt4 book ai didi

oracle - Tomcat GlobalNamingResources ResourceLink Oracle 获取DataSource

转载 作者:行者123 更新时间:2023-11-28 21:56:23 25 4
gpt4 key购买 nike

我在使用 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 中

我有每个资源的 ResourceLink

<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 代码中,我尝试按如下方式获取 DataSource:

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);
}
}

鉴于上述异常,它永远不会获得数据源,这与以下情况相同:
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 获取DataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26595842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com