Tomcat集群session复制与Oracle的坑
轉(zhuǎn)載自?Tomcat集群session復(fù)制與Oracle的坑
問題描述
公司某個(gè)系統(tǒng)使用了tomcat自帶的集群session復(fù)制功能,然后后報(bào)了一個(gè)oracle驅(qū)動(dòng)包里面的連接不能被序列化的異常。
01-Nov-2017 16:45:26.653 SEVERE [https-jsse-nio-8443-exec-2] org.apache.catalina.ha.session.DeltaManager.requestCompleted Unable to serialize delta request for sessionid [F825A52DD9E0E7F8FD6BB3E3F721F841]java.io.NotSerializableException: oracle.jdbc.driver.T4CConnectionat java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)解決方案
看到這個(gè)問題,首先檢查整個(gè)系統(tǒng)里面的代碼有沒有用到T4CConnection或者java.sql.Connection并將它們放到了session中。
檢查后發(fā)現(xiàn)系統(tǒng)并沒有用到任何及相關(guān)的類放在session中。
接下來就運(yùn)維的同學(xué)頭疼了,換tomcat版本、改各種tomcat相關(guān)的配置都沒有解決。
然后我判斷可能是程序或者數(shù)據(jù)導(dǎo)致的問題,果然,在經(jīng)過逐一排查窮舉測試,發(fā)現(xiàn)干掉某個(gè)對象后功能正常了,不報(bào)序列化的錯(cuò)誤了。而在干掉的那個(gè)對象里面發(fā)現(xiàn)使用了java.sql.Clob類型,曾幾何時(shí)在網(wǎng)上有看到過這個(gè)異常,在tomcat session復(fù)制時(shí)使用了這個(gè)類型的字段是會(huì)出問題的。
真是茅塞頓開,經(jīng)常確認(rèn),那個(gè)Clob字段在實(shí)際應(yīng)用中并沒有使用到,所以最后去掉該字段,折騰了整個(gè)團(tuán)隊(duì)兩三天的問題最終得已解決。
tomcat真是醉了,session復(fù)制你不支持Clob字段,你報(bào)一個(gè)oracle驅(qū)動(dòng)不能序列化的錯(cuò)誤,有點(diǎn)誤導(dǎo),讓人迷失方向,還好問題解決了。。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的Tomcat集群session复制与Oracle的坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想8703n平板参数?
- 下一篇: Tengine-Ngnix高级版