Weblogic 数据源无法解析错误的解决方法

文章讲述了在WebLogic应用中遇到JNDINameNotFoundException的具体原因,如JNDI名称不匹配、数据源未正确发布等,以及如何通过检查、测试和配置解决这些问题的过程。
摘要由CSDN通过智能技术生成

问题现象

javax.naming.NameNotFoundException: Unable to resolve 'datasource1'. Resolved ''; remaining name 'datasource1'
	at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1292)
	at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:354)
	at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:227)
	at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
	at weblogic.jndi.internal.ServerNamingNode.lookup(ServerNamingNode.java:532)
	at weblogic.jndi.internal.RootNamingNode.lookup(RootNamingNode.java:84)
	at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:307)
	at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:435)
	at javax.naming.InitialContext.lookup(InitialContext.java:417)
	at TastyList.doGet(TastyList.java:36)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:295)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:353)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:250)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3793)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3763)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344)
	at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
	at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
	at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
	at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2451)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2299)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2277)
	at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1720)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1680)
	at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272)
	at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
	at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
	at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)
	at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
	at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:655)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:420)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:360)

错误原因及解决方法

1. 代码中使用的JNDI名和weblogic 中配置的名字不一致 在这里插入图片描述

2. 数据源发布的server和web app发布的server不一致

3. 数据源没有成功发布

确认方法1: 在Server的Services->JDBC中,确认是否有使用的JNDI name。不存在的场合,可能是没有发布成功。在这里插入图片描述
确认方法2: 对数据源进行测试
weblogic console中,Services->Data Sources->Monitoring->选择对应数据源->Testing中,选择server,点击【Test Data Source】
在这里插入图片描述
解决办法:

  1. 首先确保数据源中配置的数据库已经正常启动
    Oracle:
sqlplus username/password as sysdba

连接数据库后,执行 startup ,启动数据实例
断开数据库连接,执行【lsnrctl status】命令,查看实例监听状态
没有监听的场合,会提示没有监听程序。
执行【lsnrctl start】命令启动监听

  1. 重新发布数据源
    手动:
    Server的 Data Sources中选择对应数据源,不做任何变更,点击保存,就会重新发布数据源。
    自动:

对应数据源->Configuration->Connection Pool->Advanced中, 设置连接重建间隔【Connection Creation Retry Frequency】,数据连接不可用的场合,会间隔指定秒数后,再次尝试创建连接。为0的场合,自动重建连接无效。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值