最近,一同学在开发中遇到了SSH三大框架中使用到了Collections.sort方法。然而,他开发环境中的JDK
是1.7.0_64,网站部署的JDK版本是1.7.0_80,他通过开发环境中产生的.class直接去更新网站部署环境中的.class
文件后,程序相关功能模块执行到Collections.sort不继续执行也不报错,而前台ajax因此取不到数据。
类似的远程如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
如上程序通过AJAX异步访问,在开发环境中能正常执行;但是使用低版本的JDK编译后的.class文件直接去替换高版本下
的同名.class文件类,程序执行到:
1 |
|
而下边的方法不执行也不报错:
1 2 3 4 5 6 7 8 9 10 11 |
|
程序无法执行Collections.sort,不能执行到函数返回语句,AJAX异步访问获取不到数据,导致前台报错获取数据失败。
在问题排查过程中,经历了如下过程:
1、开发环境是windows,网站部署环境是centos6.8,前后重新编译了网站代码,并且重新部署了centos上的网站,
问题还是不执行Collections.sort;
2、怀疑是阿里云环境安全的限制,关闭了主机防火墙,但是Collections.sort方法还是不执行也不报错;
3、单独编辑测试Collections.sort的java类分别在windows和centos环境下编译执行,发现Collections.sort在windows和centos上均可以执行,测试程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
|
4、查看windows和centos环境下的JDK版本,发现两边环境JDK版本不一致,windows环境下jdk版本是:1.7.0_64,而
centos环境下JDK版本是1.7.0_80;将windows环境下JDK版本更新到1.7.0_80,并指定开发工具myeclipse的Java编译使用
JDK1.7.0_80版本,重新编译网站源码,在centos上发布网站,发现如下程序顺利执行:
1 2 3 4 5 6 7 8 9 10 11 |
|
到此问题得到了解决!