论坛首页 Java企业应用论坛

关于两个不同公司开发的两个系统分别只支持MS JVM与Sun JVM礬\0...

浏览 3871 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间: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
   发表时间:2005-02-19  
确实应该是低版本的实现的升级到高版本,而不是高版本的实现降低到低版本。
在 IE 中开发 Applet,不应该继续使用 M$ JVM,这会带来无穷的烦恼,风险也很大,而应该使用 Sun 的 JRE。
在页面中应该采用如下写法来使用 Applet:
<object id="ftpApplet" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0" width="0" height="0">
  <param name="code"          value="FTPApplet.class">
  <param name="codebase"      value="/includes">
  <param name="archive"       value="ftpapplet.jar">
</object>

这种写法有什么好处?这种写法是将 JRE 当作一个 ActiveX 控件来配置的,然后  JRE 再去启动 Applet。除非 M$ 挥刀自宫,决定 IE 完全不支持 ActiveX,否则他们再捣乱也不会影响到 Applet 的正常运行。而且这种写法可以使用所有的 JRE 1.4.x 版本。
0 请登录后投票
   发表时间:2005-02-21  
spring嘟嘟 写道
dlee 写道
确实应该是低版本的实现的升级到高版本,而不是高版本的实现降低到低版本。
在 IE 中开发 Applet,不应该继续使用 M$ JVM,这会带来无穷的烦恼,风险也很大,而应该使用 Sun 的 JRE。
在页面中应该采用如下写法来使用 Applet:
<object id="ftpApplet" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0" width="0" height="0">
  <param name="code"          value="FTPApplet.class">
  <param name="codebase"      value="/includes">
  <param name="archive"       value="ftpapplet.jar">
</object>

这种写法有什么好处?这种写法是将 JRE 当作一个 ActiveX 控件来配置的,然后  JRE 再去启动 Applet。除非 M$ 挥刀自宫,决定 IE 完全不支持 ActiveX,否则他们再捣乱也不会影响到 Applet 的正常运行。而且这种写法可以使用所有的 JRE 1.4.x 版本。

MS已经把ActiveX取消提上日程了,据说IE7就会
Applet的应用我一般均会以这种形式来书写的,不会以调用ActiveX的方式来调用的:

<applet code="Applet.class" width="100%" height="100%" codebase="./" MayScript>
<param name="cabbase" value="Applet.cab">
<param name="archive" value="Applet.jar">
<param name="Name" value="value">
</applet>
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics