2013年的元旦,因為項目上線要加班,所以沒有放假。可是,就在這幾天,Web系統突然出現了嚴重異常。。。
系統開發與測試基本都結束了,等著從測試環境向正式環境遷移。就在元旦前一天,一個嚴重的異常出現了,異常資訊如下:
Caused by: org.dom4j.DocumentException: Error on line 1 of document : prolog 中不允許有內容。 Nested exception: prolog 中不允許有內容。
at org.dom4j.io.SAXReader.read(SAXReader.java:355)
at org.dom4j.io.SAXReader.read(SAXReader.java:271)
at org.dom4j.DocumentHelper.parseText(DocumentHelper.java:215)
... 56 more
因為伺服器是剛買的,系統都是新裝的,並且Java程式都是跨平台的,在Windows下和Linux下都可以啟動並執行,理論上來說應該沒有什麼問題,以前也做過Windows和Linux的遷移。
於是,我們把項目從測試的Windows環境遷移到Linux環境,都是同一個廠家的伺服器,JDK、WebSphere版本都一樣,應用程式版本也一致。
這個異常出現的位置是在資料庫裡的表單往頁面載入的時候出現的,資料庫裡的資料沒有問題,用Windows上的程式已經測試通過了,基本確定是項目部署環境的問題。還有一個功能有問題,流程圖顯示不出來。看起來沒什麼聯絡,唯一的聯絡就是資料都是大欄位儲存在資料庫裡的。
發現了異常之後,我重裝了好幾遍JDK和WebSphere的環境,Web系統裡的功能測試都正常,除了表單載入和流程圖顯示的功能。實在想不到會有什麼原因可以導致這麼詭異的異常出現,畢竟整個系統只有2個功能不好用。
4號項目就正式使用了,時間很緊迫啊。為了減少作業系統差異的可能性,我們也把Linux重裝了Windows,發現問題仍然存在,這樣就更確定也不是作業系統的原因導致出現異常,但是依然找不到具體原因。
幾乎絕望了,給項目負責人打了電話說了緊急情況,到時候客戶要是追究好提前有個準備,雙機Linux環境不能上線使用了,畢竟也算是一次意外事故吧。
晚上,項目組吃過飯說要去看二人轉,我突然有了一種預感覺得可以找到解決問題的辦法。於是半路抄小道溜回去加班了,不一會兒就找到了問題所在。
原因是由於Oracle的ojdbc14.jar檔案不一致,正式環境的jar檔案也是ojdbc14.jar,但是比測試環境的檔案要小一些,只有1.14M。正式環境是使用其他的伺服器遠程搭建好的,Oracle的jar包也是用的遠程伺服器的,其他項目也用的是那個jar包,的確很難想到資料庫驅動包會出問題,畢竟系統那麼多功能就2個不能用。
還好,總算找到問題的原因了。找到原因之後,我就將ojdbc14.jar檔案重新發布到正式環境測試,最後問題順利得到解決。雖然花了兩天時間,找到原因也總算沒白忙活。
小 結:有時候,解決問題也需要一些靈感,可能就在那一刹那間。