首先是对JAVA 和 .NET平台的构成做一个分析,然后是我个人对JAVA如何形成的一个认识,接着是分析微软和SUN

之间的合作与分歧,最后是JAVA与.NET合作的前景。

我个人强烈认为JAVA与.NET将在不久的未来逐步的统一起来。已经有很多关于整合JAVA和.NET的项目计划被提交到源码开

放组织。在微软的MSDN,SUN 的JAVA站点,华夏名网以及来自于ECMA 和 W3C.org的标准文档都可以看到有关内容。

简介

JAVA与.NET继续发展下去,可能的两种结果:其中的一种退出竞争或是两种共存,而共存的可能性更大。JAVA得以生

存的原因在于它的时间优势:它已经发展了六年;它在大多数的操作系统上可以运行;它得到了业界领导者如ORACLE、IBM

的支持;并且使用JAVA进行开发的项目计划几乎覆盖所有的应用程序领域。

而.NET的优势在于微软拥有90%的桌面操作系统市场,同时微软也开始采用SUN的市场战略,即将其特有的技术标准

化。如:在远程通信上它向IETF(InternetEngineering Task Force)和W3C(World Wide Web Consortium)提交了SOAP

(SIMPLE OBJECT ACCESS PROTOCLE)(类似于RFC-REQUEST FORCOMMENT);向ECMA (European Computer

Manufacturer's Association)提交了C#语言和通用运行时(COMMON RUNTIME)基础结构的标准。

JAVA平台的构架

JAVA平台包括JAVA语言,以及一套虚拟机——如JVM、KVM、CVM等——通过它们实现在PC机,手提电脑或是嵌入式系

统上运行JAVA的字节码。同时,JAVA平台还定义了一整套覆盖面很广的API,它们被用来与微软的API协调或是相互竞争。

如JDBC对ODBC,JTAPI对TAPI,JDO对ADO等等。因此,简要来说,JAVA平台包括语言,虚拟机,以及API库。

由于使用虚拟机机制,所以JAVA语言在所有的平台上只有唯一的版本,因此它使用RMI(远程方法调用Remote

Method Invocation)协议进行远程通信;微软则在.NET框架中使用DCOM——正在逐步演变为SOAP(简单对象访问协议)。

SUN最初对JAVA的宣传是“一次性代码编写,所有环境下运行”,但在推出了“J2EE” (Java 2 Enterprise

Edition)和“J2ME” (Java 2 Micro Edition)后不得不收回了它最初的宣传,因为“一种尺码的鞋适合所有的脚”的解决

方案并不能很好的工作。

.NET平台的构架

.NET框架包括C++, VB.NET (VB 7.x) 和 C# 等一系列语言;与JAVA虚拟机类似的一套运行时环境;以及一套倾向与

WINDOWS体系的API接口。其中的运行时环境可能存在于一个浏览器、或是一个WEB SERVER、或是在操作系统中。将来也许

在SQL SERVER中也可能存在这样的运行时环境。另外需要提及的是微软的SOAP协议,它在继承了DCOM的一些特性的基础上

发展起来,基于XML格式通过HTTP进行传输。SOAP的JAVA版本,可以在http://xml.apache.org上看到它的有关文档。

发展历程

JAVA最初来源于SUN的一套为机顶盒设计的语言,当时的名字是OAK,SUN将之更名,并将它放在INTERNET上作为开放源码共

享。随着专门为网页设计的JAVA APPLET的出现,JAVA语言迅速在INTERNET上流行起来。当时的浏览器主要是NETSCAPE。当

微软发现明天市场的主宰可能是浏览器而不是桌面系统时,开始着手对NETSCAPE进行收购,在收购计划失败后微软发展了

自己的浏览器IE。

当时的INTERNET需要一种语言,而JAVA适时的出现了,由于它与C++的许多相似的语法,使得很多程序员转向了JAVA。而它

确实具有很多优势,以至于在98年秋,它的反对者微软在MSDN中都宣称,JAVA是编写COM组件的最佳语言。

随着JAVA一起出现的还有LINUX操作系统和APACHE服务器。这三者的联合在服务器端的应用表现出强大的威力,以至

WINDOWS NT在企业级服务器市场受到了很大的冲击。

98年出现的DHTML和JAVASCRIPT导致了JAVA APPLET在网页设计领域的淡出,在这里有两方面因素:一、大部分APPLET效果

现在都可以由DHTML完成;二、而DHTML对带宽的要求更低。但是JAVA因为在服务器端的应用仍有市场,而得以继续发展。

这是开发源码的支持者为JAVA添加了活力,首先是APACHE提出的SERVERLET 和 稍后出现的JSP,这些在.com网站的程序开

发中占据了一席之地。

JAVA平台首先以SERVERLET,然后是JSP,最后是EJB(Enterprise Java Beans),逐步向企业级应用拓展。EJB是一个面向对

象的事务进程系统,有些类似于微软的MTS(Microsoft Transaction Server)。事实上MTS和EJB都不是很成功,因为它们

都无法达到INTERNET应用的规模。

就我的观点来看,JAVA最失败的时刻是,SUN通过法律手段向微软索赔$2000万,并获得成功的时候。微软从那时开始

制订自己的.NET计划,同时也宣布了JAVA作为独一无二的INTERNET 平台的地位的结束。

展望

现在,我们能看到到还只是一个很混乱的局面。而在未来,我们将看到.NET的成熟,以及它和JAVA的融合。

JAVA将继续保持它的特点:跨平台的服务器端应用,如WAP服务器,或者是电信领域的如JAIN(Java API for Intelligent

Networks,同时它在嵌入式系统中将继续保持它的优势,象智能卡、移动电话、PDA等。而我们还将看到.NET的成熟,当然

这种成熟需要时间,可能是相当长的一段时间,就好象当年JAVA成长那样。

ORACLE 8i 及其更老一些的版本,充当着一个JAVA 运行时的载体的角色,这使得JAVA 得以与ORACLE 数据库引擎紧密结

合;同样,.NET体系也会与新版本的SQL SERVER,紧密的结合,这将包括一个VES (虚拟执行系统)执行引擎。这将使程

序开发人员可以在SQL 语句和存储过程中嵌入C#和VB.NET 的成分。目前,你可以通过调用DLL函数来使用扩展存储过程,

但数据库本身并没有一个面向对象的运行时引擎与之相匹配。

未来的标志.NET 成熟的里程碑

非微软产品,包括服务器,桌面或是便携式设备的操作系统如Solaris, Linux和Palm OS的.NET接口。与JAVA核心的整合。

比如说,针对CLI(Common Language Infrastructure)的JAVA编译器,针对JAVA虚拟机的C#编译器。SQL SERVER 或是

ORACLE 等数据库产品中整合的VES 引擎。由中立的第三方开发的开放源码的,完善的.NET平台。

可以预见到,微软将会赞助一些开放源码的项目,以使.NET 向UNIX 平台扩展,而这将有助于一些开放源码组织减少它们

对JAVA的偏爱。

JAVA的命运

JAVA的一个主要目标是通信设备提供商,如NOKIA就在它的WAP SERVER 应用了JAVA。类似于70年代和80年代初,PC销

售时硬件供应商将最终的应用程序绑定在操作系统中一起销售,JAVA现在也被绑定于通信设备中被销售。

它的另一个主要方向是JAIN(Java API for Advanced Intelligent Network),它主要是定义一套与协议(如CDMA,

GSM,IMT2000)无关的API,以便于基于开放市场的组件开发。这使得ISV(独立软件供应商)可以以插件的形式提供通信

服务,如可自动转接至最近的可拨通的国际呼叫中心的800免费电话。当然,JAIN也遇到了对手,想微软和不列颠通信提出

的Parlay计划——它也被业界所支持。

另外,JAVA在嵌入式设备中也保持着领先的地位,如smart 3G 和 GPRS,在这里的移动电话系统采用的是J2ME(Java 2

Micro Edition),但是如果它不能很好的解决一些固有的问题,如载入时的延迟等,也许,很快,它就将被C#代替,如

果.NET 能提供快速的运行环境,和广泛的业界支持。

.NET和JAVA的整合

无论从商业角度,还是开发者角度,甚至是源码开放组织的角度,.NET和JAVA的整合都显得很有必要,下面就二者的整合

做出一个提前的估计(所有的相关项目被分为A、B、C三个组,以便于看清它们之间的关系,当然这些项目也完全可以被独

立的操作):

JVM to CIL compiler (Group A)

Java API bridge for .NET API and lib. (Group A)

Java compiler for CLI (Group A)

CLI ports for Palm OS, Linux and Solaris (Group B)

.NET API and lib. bridge for Palm OS API (Group B)

.NET API and lib. bridge for POSIX (Group B)

CIL compiler to JVM (Group C)

.NET API and lib. bridge for Java API (Group C)

C# compiler for JVM (Group C)

A组的项目

该组项目的主要目的是使现有的JAVA二进制代码能够在.NET平台上被执行。这意味着JAVA的二进制码(后缀为class

的文件)不用再从源代码进行重编译就能运行于.NET 平台了。当然这些class 文件在安装或执行时会被编译,就好象微软

的运行时和JIT对微软中间语言所做的那样。

JVM to CIL compiler

一个编译器,输入JAVA字节码,输出MSIL代码——它将被编译为可执行文件(如EXE,DLL,MSI等)

Java API bridge for .NET API and lib

在这里,JAVA API 与每一个相应 .NET API之间将建立一个映射,比如Java API中的java.io.File将被映射到 .NET的

System.IO.File 类。相对于比较简单的IO类的映射,还有一些映射比较复杂,比如java.net包到.NET 的SYSTEM.NET的映

射。这里存在的一个问题是:该项工作如果在C#中进行开发会比较方便。而假如在JAVA中实现,则需要有一个直接指向CLI

(Common Language Interface)的编译器,它能生成符合CLS(Common Language Specification)标准的CIL(Common

Intermediate Language)代码。

可以通过编写一个向导式的工具来避免一些烦琐的工作,例如,可以利用C# 或JAVA来编写一个基于XML格式的对象描述,

用它生成一个框架代码,然后根据需要向其中手写添加其他代码。如果你确实打算进行这样的操作,在

http://xml.apache.org站点你可以找到很多有用的资料。微软的过时的JAVA SDK中也有类似的工具可供参考——一个用来

生成Jdirect(JDirect was the Microsoft's hack for implementing native interfaces)代码的工具,利用它可以实

现访问本地WIN32 API。SDK中有该工具的源代码。顺便提一句,由于这里涉及到微软的一套独特的JAVA扩展标记,因此SUN

和微软一直就此问题打着官司。

Java compiler for CLI

它将JAVA源代码(使用.NET 框架API)编译为可执行文件的格式,如EXE,DLL等,这个工作是在最高的层面上对JAVA

和.NET框架进行整合。这将为今后直接利用JAVA在.NET框架下创建应用打好基础。

对现有JAVA编译器的代码生成部分重写,将是此项工作一个比较便捷的解决方案。就我个人的意见,SUN会根据开放源代码

的标准,开发这样的一套编译器。当然,这样的一些改造计划需要对一些JAVA类进行调整。

B组的项目

该组的项目将主要致力于为其他的平台如PALM OS、SOLARIS以及LINUX平台开发.NET 框架的端口。这些端口应该用C 来编

写以适应速度和控制上的需要,另外采用 C 来开发还可以保留进行操作系统相关的系统级编程。

CLI ports for Palm OS, Linux and Solaris.

这部分内容事实上分为两个独立的部分:一、针对PALM OS;二、针对UNIX 系统。

对于PALM OS 来说,解决方案比较简单,开发可以在PC 环境下进行,然后利用数据线或是蓝牙传输到PALM 设备上。与之

相关的.NET 框架针对PALM OS 设计的 API 将在下个部分详述。

UNIX部分将利用JAVA开发,最后将PE(Portable Executeable)文件编译为COFF(Common Object File Format)格

式,一种UNIX 可执行文件的格式。编译将在安装或是载入时进行。

.NET API and lib. bridge for Palm OS API.

这个.NET API bridge 应该以一种优化的方式被映射到PALM OS API上。连接器和装载设备的映射表驻留在PC 的网关上。

通过数据线或蓝牙传输PALM OS 的可执行代码。它的实现将依赖于PALM OS 的驻留虚拟机 KVM(the Java 2 Micro

edition)运行时,同时它还应该避免KVM设计中JAVA运行程序载入过慢的缺陷。另外这一套API 与 为WINDWOS CE 的 设计

的不同,它不应舍弃那些资源占用较大的API 象System.Xml。.NET依赖于SOAP进行远程的方法调用。SOAP 基于 XML格式,

因此它需要System.Xml的支持。如果没有,基于SOAP的分布式应用将无法工作。通过调用System.Xml API 的方法可以实现

对PDA诸如WINDOWS CE 和 PALM OS上的应用程序或是一些服务器端的应用的远程操作。甚至可以在SOAP的基础上利用为

WAP (Wireless Access Protocol)设计的WBXML (Wap Binary XML)标准与WAP 网关进行通信。

.NET API and lib. bridge for POSIX.

这部分将对.NET API 和UNIX API进行映射,大量的 C 的编程工作将是一个困难,但更大的困难将来自于GUI 元素的

处理上。这些UNIX平台会有很多GUI框架,比较安全的做法是给它们提供一个WIN32 API 的端口作为媒介。如果能以前文所

述的MICROSOFT JAVA SDK的方法来进行映射的操作,那么将节省大量的编程工作。

C组的项目

该部分的内容致力于将.NET 框架应用于JAVA上。这将是一项艰苦的工作。当然,假如微软向ECMA提交一份标准规范,这项

工作将变的比较实际一些。

CIL compiler to JVM

该项目将把.NET执行程序(PE)转换为.class格式的文件。但如果执行程序中有一些非受管代码,JVM将不接受它们。该项

目的实现依赖于下面将要描述的.NET API bridge for Java 的实现。

.NET API and lib. bridge for Java API.

一个完全兼容的.NET API bridge几乎是不可能的,它需要依赖于微软向ECMA提交的标准中的一些参数。这项工作将由JAVA

来实现,但与前文提到的Java API to .NET bridge一样,将有很多烦琐的工作。

C# compiler for JVM

这项工作可以用JAVA或是C# 的任意一种来完成。比较容易实现的是利用JAVA,因为有SUN的JAVA编译器的许多代码可以

被再利用。但我建议用C# 来实现该项工作,在.NET 框架中有许多基础的编译器可被利用。此项目依赖于.NET API

bridge for Java的实现。

总结

最后我要说的是将.net 与JAVA 整合不仅仅是微软与SUN的工作。所有的程序员也许都应对它进行关注

net项目怎么兼容Java_是否能让JAVA 和 .net框架共存相关推荐

  1. osgi java_使普通的旧Java OSGi兼容

    osgi java 尽管OSGi在Java世界中越来越流行,但仍有许多Java应用程序和库尚未设计成可在OSGi中使用. 有时您可能需要在OSGi环境中运行这样的代码,或者是因为您想利用OSGi本身提 ...

  2. 解决vue2+vue-cli3项目ie兼容问题

    解决vue2+vue-cli3项目ie兼容问题 参考文章: (1)解决vue2+vue-cli3项目ie兼容问题 (2)https://www.cnblogs.com/kingjordan/p/120 ...

  3. Web项目--------原Oracle数据库的项目同时兼容MySql

    原Oracle数据库的项目同时兼容MySql步骤: (一)修改资源配置文件applicationContext-dataSource.xml的数据库连接 Oracle数据库中加上from dual的原 ...

  4. vue项目PC兼容移动端

    做完的pc项目要求兼容移动端,常规操作的话是新做一个webapp后再来回跳转, 当前pc项目没有太多的交互和复杂的页面,所以决定在一个项目里进行兼容适配 1.新建两个组件,pc端页面组件,m端页面组件 ...

  5. vue项目浏览器兼容问题

    vue项目浏览器兼容问题 Vue项目修改默认滚动条样式:element-ui隐藏标签el-scrollbar.vuescroll插件: IE浏览器不兼容vue-socket.io:vue-socket ...

  6. maven 创建 java_使用maven创建java项目

    1. 从 Maven 模板创建一个项目 在终端(* UNIX或Mac)或命令提示符(Windows)中,浏览到要创建 Java 项目的文件夹.键入以下命令: mvn archetype:generat ...

  7. 零基础学怎么学Java_零基础学java难么?怎么自学?

    在计算机发展迅速的今天,越来越多的人去学习编程,其中Java就是大家热衷的语言之一.这时候就有人问,零基础学java难么?下面小编将回答这一问题并给出学习路线. 小编想说,这个实际上要看个人能力以及前 ...

  8. 「实战篇」开源项目docker化运维部署-后端java部署(七)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...

  9. java 获取sqlsession_获取Java的MyBatis框架项目中的SqlSession的方法

    从XML中构建SqlSessionFactory从XML文件中构建SqlSessionFactory的实例非常简单.这里建议你使用类路径下的资源文件来配置. String resource = &qu ...

  10. 深入浅出学java_《深入浅出学JAVA开发初级》

    整体说明: Java私塾的这一套视频是完全真实课堂录制,实际上课时间为十一天,主要内容包括: 1:系统完整的学习Java的基础知识 2:深入剖析重点知识点的理论 3:超多的编程题目和程序讲解 4:最后 ...

最新文章

  1. 征文 | 第一届全国计算社会科学高端论坛
  2. 文巾解题 567. 字符串的排列
  3. VxWorks关于任务创建的几个函数的概述
  4. 超出文本隐藏并且显示省略号
  5. 网络通信中关于请求数据、断点续传和写入本地文件
  6. WINDOWS上OpenCV需要有MediaPlayer才能正确运行?
  7. 大小端转换代码(宏、函数方式)(浮点、整数)
  8. 太强了,这款开源终端工具可查询 IP 信息 ...
  9. 较全的正则字符、规则汇总
  10. 鼠标滑入滑出判断事件(转自流云诸葛)
  11. 数理基础(概率论)------离散型和连续型分布期望方差公式
  12. 海森堡模型自洽平均场解
  13. OpenMP学习笔记之常用指令parallel/sections/critical 其余待续
  14. 地方门户网站盈利的“达摩五指”
  15. 高德地图1008INVALID_USER_SCODE错误
  16. 无图言屌?YYImage 设计思路,实现细节剖析
  17. Vue3-pinia(状态管理)
  18. nrf52832 UICR 寄存器
  19. php解三元一次方程,三元一次方程的求解
  20. Linux安装7z软件-deb格式安装

热门文章

  1. 获取联通光猫PT952G的管理员密码
  2. 高级电工实验室成套设备(带功率表、功率因数表)
  3. Java实习日记(3)
  4. 三菱plc控制步进电机实例_电工进阶PLC工程师!必学步进电机的编程控制指令,你掌握了吗...
  5. VFB组件:Scintilla控件(代码编辑器)
  6. Unity3D 5.0软件安装教程
  7. 互联网日报 | 6月13日 星期日 | 腾讯开展“饭圈乱象”专项整治;端午档单日放映场次刷新纪录;湖北取消除武汉外落户限制...
  8. 如何设置局域网共享打印机及问题解决
  9. 计算机开机错误62,请问主板诊断卡错误代码62怎么办啊 ?
  10. 小米与乐视的竞争分析