我在weblogic中创建了两个数据源,其中包含以下jndi名称
我可以使用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 /正在给出问题。
答案 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;
看来密码是错误的,这不是您的情况,因为第一个例外是通用的,并且可能有不同的原因,其中一些已经在前面的答案中得到了解释,所以我只是添加我的。
答案 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();