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

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

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

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

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

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

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

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

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

所以也许你需要

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

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

修复是,

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

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

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

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

 @Bean(name = "dataSource", destroyMethod="") public DataSource dataSource() { JndiDataSourceLookup lookup = new JndiDataSourceLookup(); return lookup.getDataSource(jndiName); } 

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

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

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

请尝试以下操作,确保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();