应用通过JNDI访问WAS数据源时Spring中datasource初始化失败问题的解决办法

当Spring应用程序在WebSphere Application Server (WAS) 上部署并通过JNDI尝试访问数据源时,可能会遇到NoInitialContextException,原因是容器与应用中的jta.jar冲突。解决方法是删除应用中的jta.jar,从WAS卸载所有应用,重启WAS,然后重新部署不包含jta.jar的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring应用部署到WAS上通过JNDI来访问WAS数据源是出错,报如下的错误

 

Stack Dump = javax.naming.NoInitialContextException: Cannot instantiate class: org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory]
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:669)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:259)
    at javax.naming.InitialContext.init(InitialContext.java:235)
    at javax.naming.InitialContext.<init>(InitialContext.java:187)
    at com.ibm.ws.runtime.component.EJBContainerImpl.remoteLazyBind(EJBContainerImpl.java:4381)
    at com.ibm.ws.runtime.component.EJBContainerImpl.install(EJBContainerImpl.java:2960)
    at com.ibm.ws.runtime.component.EJBContainerImpl.start(EJBContainerImpl.java:3730)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1250)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1140)
    at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:569)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:819)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:921)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl$AppInitializer.run(ApplicationMgrImpl.java:2100)
    at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:342)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
Caused by: java.lang.ClassNotFoundException: org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory
    at java.lang.Class.forNameImpl(Native Method)
    at java.lang.Class.forName(Class.java:163)
    at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:57)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:666)
    ... 14 more
或者

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is javax.naming.NoInitialContextException: Cannot instantiate class: org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory]
错误

是因为WAS容器和应用中jta.jar报冲突,删除应用中的jta.jar并从WAS卸载所有应用,重启WAS,重新这些没有包含jta.jar的新应用就可以。

参考:

http://forum.springsource.org/showthread.php?t=44441

http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值