无法从前缀为jdbc /的java访问weblogic数据源

时间:2013-09-05 23:41:57

标签: java jdbc weblogic datasource

我在weblogic中创建了两个数据源,其中包含以下jndi名称

  • jdbc / testDatasource
  • testDatasource1

我可以使用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 /正在给出问题。

11 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:1)

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

所以也许你需要

dataSource = (javax.sql.DataSource) context.lookup("java:jdbc/testDatasource");

答案 4 :(得分:1)

在设置PROD服务器时,我的应用程序也面临同样的问题。

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

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

答案 5 :(得分: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管理服务器正在侦听的端口号。

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 server / lib文件夹中的所有jar,并将它放在客户端java代码构建路径和server / lib文件夹中。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

在我的情况下,这是由于数据源在部署期间被销毁。解决方案是添加destroyMethod =“”

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

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

}

答案 8 :(得分: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;

看来密码是错误的,这不是您的情况,因为第一个例外是通用的,并且可能有不同的原因,其中一些已经在前面的答案中得到了解释,所以我只是添加我的。

固定密码并测试数据库连接,然后给出: enter image description here

答案 9 :(得分:0)

对我有用的是通过删除WebLogic中的Temp文件夹来清除C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer缓存。确保这样做之前停止服务器。

答案 10 :(得分:-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();