本文内容
- 概述
- IKVM.NET 组件
- IKVM.NET 现状
最近做项目,遇到了一个情况。我们需要将项目集成到另一家公司中。用户既可以从他们的系统登录,访问我们的系统,也可以直接登录和访问我们的系统。这就涉及了用户同步问题,也就说,大家都已经在自己的服务器上进行了用户管理,如果一方增加一个用户,那么也必须在另一方中也添加该用户。
由于大家开发时使用的语言不同(C#与Java),在通过 WebService 同步时,大家都使用自己的加密算法对用户密码进行了加密,无法同步。再就是这个加密算法,一是人家用 Java 写的,我们用不了,二是人家保密,不给我们(NND,无非就是DES算法,漫天都是)。
那么,很容易想到的一个方法是:利用 IKVM.NET 将 Java 包转换成 .NET 类库 DLL 文件。本文介绍 IKVM.NET,你也可以访问 IKVM.NET。
概述
IKVM.NET 是对微软 .NET Framework 和 Mono 的一个 Java 实现。它包含如下组件:
- 在 .NET 上实现的 Java 虚拟机
- Java 类库的 .NET 实现
- 使 Java 和 .NET 可以互操作(interoperability)的一个工具
IKVM.NET 组件
IKVM.NET 0.36 由以下部分组成:
- IKVM.Runtime.dll 是虚拟机运行时和所有支持的代码。包含如下:
1) 字节码 JIT 编译器/验证器。JIT 把 Java 字节码编译成 CIL。
2) 重映射基础结构的对象模型。使得System.Object、System.String 和 System.Exception 看上去像 Java 的 java.lang.Object、java.lang.String 和 java.lang.Throwable。
3) 在 Classpath 中重实现托管的.NET 的本地方法。
- IKVM.OpenJDK.ClassLibrary.dll 是已编译的 Java 类库,该类库继承自 OpenJDK 类库,和一部分来自于 GUN Classpath 和 IcedTean 的代码,以及一些额外的 IKVM.NET 规定的代码。
- ikvm-native.dll 是实现一小部分 JNI 接口的非托管的C库和一些在非 Windows 平台上的特定代码。在 Windows 上,这是一个可选的部分,只需一个应用程序使用它自己的本地库。对于Java应用程序则不需要。在非 Windows 平台上,它是必需的,但是 Mono 发布包含它,因此,通常情况下,不需要独立安装。
- ikvm.exe 是相当于精简的、可执行文件 java.exe(“dynamic mode”)。
- ikvmc.exe 是静态编译器。用来把 Java 类和 jar 包编译成 .NET 程序集(“static mode”)。
- ikvmstub.exe 是从 .NET 程序集生成 stub 类文件的一个工具,这样,Java 代码就可以被编译成 .NET 代码。IKVM.NET 根据stub,引用被真正的 .NET 类型的引用替换。
- IKVM.AWT.WinForms.dll 是非常有限地实现了部分 AWT 功能。不过,这个问题关系不大。
IKVM.NET 现状
这个小节主要介绍 IKVM.NET 的现状,描述它的一些不足之处(暂不翻译)。
This project is currently in active development. Compliance with JDK 1.6 is largely implemented, but there are some holes. In particular,
1) AWT and Swing are not presently functional. This is a low priority item for the project developers.
2) Security is another fairly large hole missing from the IKVM platform. This will be solved by relying on the sophisticated and powerful security model offered by the .NET platform.
Still, enough functionality is in place that several large Java projects run successfully.