配置Oracle数据源报错:NoClassDefFoundError: Could not initialize class oracle.net.nt.Clock
·
问题现象:
在TongWeb8.0上配置Oracle数据源,报错如下:
java.lang.NoClassDefFoundError: Could not initialize class oracle.net.nt.Clock
oracle.net.nt.NetStatImpl.incrementBytesSent(NetStatImpl.java:73)
oracle.net.nt.TimeoutSocketChannel.write(TimeoutSocketChannel1.java:205)
oracle.net.ns.NIOPacket.writeToSocketChannel(MNIOPacket.java:350
oracle.net.ns.NIOConnectPacket.writeToSocketChannel (NIOConnectPacket.java:247)
oracle.net.ns.NSProtocolNIO.negotiateConnection (NSProtocolNIO.java:117)
或
java.lang.ExceptionInInitializerError: Exception java.lang.IllegalStateException: Timer already cancelled.
java.util.Timer.sched(Timer.java:397)
java.util.Timer.scheduleAtFixedRate(Timer.java:328)
oracle.net.nt.Clock.<clinit>(Clock.java:52)
oracle.net.nt.NetStatImpl.incrementBytesSent(NetStatImpl.java:73)
原因说明:
TongWeb8.0.9.09版本及之前,将ojdbc.jar放在TongWeb的lib下配置数据源,会因先执行一次卸载同协议类,再注册,这样导致加载时的初始化资源被关闭,创建数据源时加载 oracle.net.nt.Clock 调用 TimeoutInterruptHandler.getTimer() 获取的定时器已经被关闭无法使用,Clock 加载失败 。
解决办法:
方法一:升级到TongWeb8.0.9.10及之后版本。
方法二:若不升级版本,可把Oracle数据库驱动放到任意目录,然后创建Oracle数据源时指定驱动包目录并保存,这种情况下创建数据源就可以成功,也能正常使用。
更多推荐




所有评论(0)