手头的很多应用都开始往JDK7上迁移,JDK升级后build,test遇到了很多小问题,在这里一一列举分析一下:

  1. Unicode支持升级

    JDK7支持Unicode6.0,支持了很多新的字符。之前程序中为一个替换非法字符的函数写了unit test,测试用例中原本的非法字符在JDK7的函数Character.isDefined()返回结果为true,导致了测试用例的失败。

  2. 反射机制改变导致JUnit test失败

    JUnit依赖java自身的反射机制,由于JDK7反射机制的变化,获取类方法时不是顺序读取或者按照字母排序来获取,而是随机的。如果之前JUnit tests写得不够完善,方法间存在依赖或者teardown没有清理干净,会由于这个原因导致测试有时不过。但是从JUnit4.11开始增加了指定测试方法执行顺序的特性,可以通过增加annotation来指定test cases的执行顺序。总的来说,JUnit test之间理论上不应该存在依赖,JDK7还真的可以帮我们纠正一些test case在设计上的错误。

  3. SSL证书检验更加严格

    之前使用1.7.0_25就碰到SSL通信的问题,这次使用1.7.0_45又碰到一个新的问题,不得不说JDK在安全性上下的功夫是越来越深了。第一点,在使用openssl来生成自签名证书,配置文件openssl.cnf中必须定义KeyUsage。第二点,在使用1.7.0_31以后的版本,增加了一个对于keysize大小的验证,具体可以看%JAVA_HOME%/jre/lib/security/java.security

    jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

    可见MD2以及keysize小于1024的RSA算法都会被禁止,用户可以直接注释掉或者修改策略。

  4. 用JDK7安装Weblogic可能遇到的问题

    详见我的另外一篇博文http://jupiterbee.blog.51cto.com/3364619/1289622