12

我在 weblogic 中创建了两个具有以下 jndi 名称的数据源

  • jdbc/testDatasource
  • 测试数据源1

我可以使用 java 访问数据源 testDatasource1,但是在访问数据源 jdbc/testDatasource 时,我得到下面提到的错误

javax.naming.NameNotFoundException: While trying to lookup 'jdbc.testDatasource' didn't find subcontext 'jdbc'. Resolved '' [Root exception is javax.naming.NameNotFoundException: While trying to lookup 'jdbc.testDatasource' didn't find subcontext 'jdbc'. Resolved '']; remaining name 'jdbc/testDatasource'

似乎前缀 jdbc/ 有问题。

4

11 回答 11

19

在某些情况下,它是由于数据源与您的服务器不在同一目标中引起的。应将使用数据源的服务器添加到相同的目标。

于 2014-04-17T15:50:21.253 回答
7

可能听起来很愚蠢,但既然它发生在我身上,我会分享它。

在Weblogic(至少10.3.4)下创建数据源时,别忘了走完整个配置过程(Finish按钮在结束前启用)。

在最后一页,您将能够activate为服务器创建数据源,而不仅仅是创建它。

要检查您的数据库是否已启动,您可以查看服务器的 JNDI 树。

于 2014-02-11T16:38:14.603 回答
3

我遇到了同样的问题。我的应用程序正在连接到在本地 Oracle Sql Server (Oracle XE 11g) 上运行的 Oracle DB。从其他答案中,我看到删除 Weblogic 缓存 /tmp、/cache 甚至 /logs 可能会起作用。我的问题是本地服务 Oracle Service XE 已停止。我知道这很愚蠢,但它可能会有所帮助。所以你应该做这三件事:
- 清除缓存;
- 检查数据库服务器服务是否正在运行;
- 尝试重新启动 WEBLOGIC 服务器;上面的那些东西对我有用。

于 2016-05-02T11:58:46.810 回答
1

java 是资源的根 JNDI 命名空间。

所以也许你需要

dataSource = (javax.sql.DataSource) context.lookup("java:jdbc/testDatasource");
于 2013-09-06T00:13:02.277 回答
1

当我们在 weblogic 中的两个数据源中定义了相同的 JNDI 名称(我创建了两个用于测试数据源的不同属性)时,也会发生此错误。我不得不删除其中一个,它工作正常。

于 2016-10-07T06:37:02.597 回答
1

在设置 PROD 服务器时,我的应用程序中也遇到了同样的问题。

Sol:针对 Web 逻辑控制台(节点或集群)中的数据源。这个对我有用。

导航: 在控制台中:转到 JDBC >Summary of JDBC Data Sources >DataSource1>选择要在其上部署此 JDBC 数据源的服务器或集群。

于 2017-11-05T07:49:34.493 回答
0

我遇到了这个异常:

javax.naming.NameNotFoundException: While trying to lookup 'jdbc.test_group_ir' didn't find subcontext 'jdbc'. Resolved ''; remaining name 'jdbc/test_group_ir'
    at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1224)

从 weblogic 控制台测试到数据库的连接给出:

 Error weblogic.common.resourcepool.ResourceSystemException: Could not create connection for datasource 'test_group_ir_pool'. The returned message is: ORA-01017: invalid username/password;

似乎密码错误,这不一定是您的情况,因为第一个异常是通用的并且可能有不同的原因,有些已经解释了以前的答案,所以我只是添加我的。

修复密码并测试数据库连接然后给出: 在此处输入图像描述

于 2019-06-04T14:15:57.967 回答
0

我遇到了同样的问题,现在已经解决了:)

解决办法是,

        String DATASOURCE_CONTEXT = prop.getProperty("tcDataSourceContext");
        log("DATASOURCE_CONTEXT.."+DATASOURCE_CONTEXT);
        Properties env = new Properties( ); 
        env.put(Context.INITIAL_CONTEXT_FACTORY,                                                                                                "weblogic.jndi.WLInitialContextFactory"); 
        env.put(Context.PROVIDER_URL,"t3://abc.com:8001");
        Context initialContext = new InitialContext(env);
        DataSource datasource =        (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
        if (datasource != null) {
            conn = datasource.getConnection();
        }
        else{
            log("Failed to lookup datasource.");
        } 

1#。abc.com 是部署 WebLogic 的服务器 URL。2#。8001 是 WebLogic Admin 服务器正在侦听的端口号。

3#。确保以下配置正确。

错误一:tcDataSourceContext=java:comp/env/jdbc/datasourcename

更正一项:tcDataSourceContext=jdbc/datasourcename

4#。此外,转到 WebLogic 服务器并导航到 /Oracle/Middleware/wlserver_10.3/server/lib/ 并执行以下命令。

命令:java -jar wljarbuilder.jar -profile wlfullclient5

上面的命令创建了一个 jar 文件,其中包含 WebLogic 服务器/lib 文件夹中的所有 jar 文件,并将其放置在您的客户端 java 代码构建路径和 server/lib 文件夹中。

希望这可以帮助!如果您有任何问题,请告诉我。

于 2016-02-26T22:31:55.753 回答
0

就我而言,这是由于数据源在部署期间被破坏。解决方法是添加destroyMethod=""

@Bean(name = "dataSource", destroyMethod="")
public DataSource dataSource() {

  JndiDataSourceLookup lookup = new JndiDataSourceLookup();
  return lookup.getDataSource(jndiName);

}
于 2017-10-09T15:38:22.123 回答
0

对我有用的是WebLogic通过删除C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer. 确保在这样做之前停止服务器。

于 2020-02-28T10:52:32.170 回答
-1

尝试以下操作,确保 Context.PROVIDER_URL 中的端口是您要运行应用程序的 weblogic 服务器的端口。

Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://localhost:8002");

Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try {
out.println("Connecting to DB......");
ctx = new InitialContext(ht);
javax.sql.DataSource ds= (javax.sql.DataSource) ctx.lookup ("jdbc/postdbsrc");
conn = ds.getConnection();
于 2015-12-10T10:34:13.707 回答