關於兩個不同公司開發的兩個系統分別只支援MS JVM與Sun JVM的問題分析與解決方法的討論

YuLimin發表於2005-02-19
關於兩個不同公司開發的兩個系統分別只支援MS JVM與Sun JVM的問題分析與解決方法的討論

背景說明:
================================================================================
某軟體開發公司B ==>>代替真正公司的名字
某某客戶 ==>> 代替真正的客戶公司名字
兩公司分別開發系統A與系統B,某軟體開發公司A開發系統A,某軟體開發公司B開發系統B
系統A實施與應用時間比系統B早一年多,但只支援IE預設的MS JVM
系統B只支援Sun JVM
================================================================================

================================================================================
以下是某軟體開發公司B對某軟體開發公司A開發的系統A的升級建議
================================================================================
關於某某客戶系統A升級的建議
自2005年1月系統B在某某客戶分公司試執行以來,發現某某客戶分公司的系統A與系統B二者不相容。具體表現為:某某客戶分公司的系統A的某些功能只能在Microsoft JVM下執行,而該JVM只支援1.1版本的JDK;系統B要求的JDK版本為1.3或1.4。就此問題,某軟體開發公司B組織人員專門對JDK各版本相容性進行深入研究,發現二者不相容的原因如下。
1. JDK各版本類的組織發生了改變,導致系統B客戶端程式執行在只支援低版本JDK的JVM下時(譬如說Microsoft JVM),該JVM會找不到相應的類。例如:系統B客戶端程式用到PrintJob類,該類在JDK1.1版本中是位於java.awt包下,而在JDK1.2版本以後新增了一個java.awt.print包,並將該類放在此包下面。這樣就導致即使以Microsoft JVM類的載入格式重新編譯系統B,在執行過程中也會報錯:找不到PrintJob類。
2. 高版本的JDK對低版本的某些類不但在功能進行了相應的增強,而且其執行機理也與低版本有較大不同。比如說系統B大量使用了Thread類, 1.1版本的JDK對該類的設計在安全性上存在嚴重問題,1.2及其以上版本的JDK對此進行了全面的改進。這樣就導致1.1版本的JDK編譯器編譯出來的客戶端程式不能執行在1.2或更高版本的JVM之下,1.2版本的JDK編譯器編譯出來的客戶端程式即使能執行在1.1版本的JVM之下,也可能會丟擲異常(比如說找不到該方法等等異常)。
透過對JDK各版本相容性的研究以及對系統B功能實現的綜合考慮,開發人員發現系統B向下相容(即透過修改WEB系統原始碼,使得客戶端程式可以在Microsoft JVM下執行)實現起來需要修改大量程式程式碼,工作量很大,並且系統安全性、可靠性都會出現問題(這是由JDK1.1本身缺陷造成的)。相比較而言,升級系統A,使其可以執行在較高版本的JVM之下就容易很多,也更合理,原因如下。
1. 高版本的JDK開發、編譯出來的客戶端程式往往更加穩定、更強壯,解決問題的手段也較為豐富。升級之後的系統A擴充套件功能將會變得相對容易。
2. Microsoft已經宣佈到2007年底推出的Internet Explorer將不再包含Microsoft JVM,即以後的IE都必須由使用者自己安裝相應的JAVA執行環境,也就是說日後系統A的升級的可能性非常大。
3. 升級系統A相對簡單,只要將相應的源程式用高版本的JDK重新編譯,編譯過程中編譯器可能會提示:找不到某些包,這樣只需修改相應的import路徑即可。工作量較小。
基於以上考慮,希望某某客戶分公司採納此意見,升級系統A,解決二者不相容的問題。在此過程中,某軟體開發公司B進行相應的配合。

某軟體開發公司B
2005-02-05

相關文章