java 迁移数据_从迁移到Java 7的小技巧
java 遷移數(shù)據(jù)
經(jīng)過幾年的努力,我們終于開始在軟件級別方面將應(yīng)用程序從黑暗時(shí)代中拉出來,其中一個(gè)步驟是將我們的Java版本升級到Java7。在大多數(shù)情況下,這很輕松,但是有一些驚喜:
- 當(dāng)我們切換到Java 7時(shí),已經(jīng)運(yùn)行了好幾年的測試用例開始失敗。事實(shí)證明,我們有一些測試用例依賴于同一類中的先前測試用例。 這在兩個(gè)方面都是不好的:1)測試用例應(yīng)該各自獨(dú)立; 2)測試類中測試用例的執(zhí)行順序是不能保證的,盡管到目前為止(在Java 7之前),順序是找到的在源代碼中。 我發(fā)現(xiàn)此鏈接有助于解釋不一致之處
我在Eclipse中看到的排序。 這不是Java 7的問題,而是我們的測試用例。 當(dāng)我們開始使用Java 7時(shí)出現(xiàn)的一些東西 - 我們的Swing客戶開始拋出ClassCastExceptions ,并且該代碼已經(jīng)存在了10多年了,其歷史可以追溯到Java 1.4。讀取javadocs可以解釋這個(gè)問題,但是我決定進(jìn)行更多研究以找出發(fā)生這種情況的確切原因。現(xiàn)在。 我們正在將條目添加到TreeSet中,以保存FocusManager的前進(jìn)和后退遍歷鍵,并將KeyStroke對象放入TreeSet中。 Javadoc明確指出放置在TreeSet(或下面的TreeMap)中的對象必須是可比較的,或者您需要使用Comparator創(chuàng)建TreeSet以便對這些對象進(jìn)行排序。 我們什么都不做,也沒有例外。 深入研究Java源代碼,我發(fā)現(xiàn)從Java 7開始,TreeMap類已開始強(qiáng)制執(zhí)行此“要求”,在該類的早期版本中該代碼已被注釋掉,因此實(shí)際上并不需要比較器。 修復(fù)很容易,我創(chuàng)建了一個(gè)KeyStrokeComparator并將其傳遞給TreeSet構(gòu)造函數(shù)。
- 我還注意到,我們的Java jar簽名已開始記錄有關(guān)證書無效的警告。 為了保持構(gòu)建的整潔而不發(fā)出這些警告,我進(jìn)行了一些搜索,發(fā)現(xiàn)了一些與Java 7相關(guān)的帖子,并從代碼簽名證書中刪除了MD2withRSA算法。 我在Verisign的支持下進(jìn)行了工作,以幫助從證書鏈中刪除該算法,并且警告消失了! 不幸的是,這還沒有結(jié)束代碼簽名問題。
- 接下來,我們的Web Start客戶端將不再成功啟動(dòng),而是引發(fā)異常,至少在開發(fā)過程中,Web起始程序經(jīng)常會(huì)遇到“ 并非所有罐子都使用同一證書簽名的錯(cuò)誤消息”錯(cuò)誤消息。 我寫了另一篇關(guān)于如何幫助調(diào)試的博客文章 ,認(rèn)為這只是“常見的可疑罐子之一”,我們有問題,但不是,不是。 知道自證書更新以來所有這一切都發(fā)生了,這使我檢查了所有已簽名的罐子以尋找線索。 所有罐子都已使用相同的證書簽名,但是第三方罐子是在刪除鏈條目之前簽名的,而我們的應(yīng)用程序代碼是在證書更改后作為構(gòu)建過程的一部分簽名的。 這使我相信,即使罐子是用相同的證書簽名的,在更改證書之前和之后簽名的罐子之間也必須有一些區(qū)別。
- 當(dāng)我們切換到Java 7時(shí),已經(jīng)運(yùn)行了好幾年的測試用例開始失敗。事實(shí)證明,我們有一些測試用例依賴于同一類中的先前測試用例。 這在兩個(gè)方面都是不好的:1)測試用例應(yīng)該各自獨(dú)立; 2)測試類中測試用例的執(zhí)行順序是不能保證的,盡管到目前為止(在Java 7之前),順序是找到的在源代碼中。 我發(fā)現(xiàn)此鏈接有助于解釋不一致之處
對jar進(jìn)行簽名后,將在jar內(nèi)的MANIFEST.MF文件中生成條目,對于jar中的每個(gè)類一個(gè)條目。 這些條目包含類的名稱以及一些簽名算法信息,并且在查看MANIFEST.MF文件之后,我發(fā)現(xiàn)了區(qū)別。 更改前簽名的第3方j(luò)ars包含每個(gè)類的SHA1-Digest條目,但從當(dāng)前版本簽名的jars中包含SHA-256-Digest條目。 用更新的證書重新簽名所有的第3方j(luò)ar可以解決大多數(shù)問題。 在重新簽名過程中,我們遇到了一個(gè)小問題,在該過程中,我們用自己生成的版本重寫了現(xiàn)有的MANIFEST.MF,這導(dǎo)致了幾個(gè)jar文件在清單文件中包含其他服務(wù)提供商信息的問題。
全天工作! 很高興成為Java領(lǐng)域的最新專家。 接下來,遷移到EJB3和Hibernate 3或4。
希望這可以幫助!
翻譯自: https://www.javacodegeeks.com/2013/05/minor-gotchas-from-migration-to-java-7.html
java 遷移數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的java 迁移数据_从迁移到Java 7的小技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑上能发贴吧语音吗(电脑上能发贴吧语音
- 下一篇: 一加手机透视功能(一加手机透视功能在哪里