Rabu, 15 Agustus 2007

Java dengan .Net

Sumber : benpinter.net

Thursday, November 18 2004 @ 03:10 PM UTC
Contributed by: dede

Banyak orang mengatakan java dan .net adalah dua teknologi yang berdiri sendiri/ekslusif.
Sekarang itu sudah dapat di jawab bahwa itu salah; dengan menggunakan IKVM.Net yang merupakan jembatan antara dua dunia ini.


IKVM.Net
IKVM.Net merupakan Java Virtual Machine(JVM) 1.4 untuk .Net Framework (Ms.Net/Mono). software ini merupakan product yang berjalan dengan .Net runtime, jadi minimal anda memiliki salah satu dari implementasi .net ecma standard. Saat ini ada beberapa, tapi yang signifikan ialah Ms.Net dan Mono.




Bagaimana bekerja-nya?
IKVM bekerja dengan 2 cara:
Dynamically - aplikasi java yang sudah menjadi Byte Code(java class dan jar) langsung di jalankan menggunakan .net runtime.
Dengan cara ini java bytecode ini di terjemahkan menjadi CIL(common intermediate language) pada saat meng-load bytecode tersebut.
Statically - agar java code bisa digunakan oleh .Net aplikasi maka ia perlu di compile menjadi .net assembly.
Dengan begitu .net bisa menggunakan code yang terdapat di java class/jar. Cara ini membuat java menjadi .net assembly penuh dan dapat di katakan sudah cross-language.

Komponen yang terdapat di-IKVM.Net ini ialah:
IKVM.Runtime.dll - core library antara lain sebagai:
compiler Java Byte Code menjadi CIL.
Object model remapping; seperti java.lang.Object di map menjadi System.Object .Net API di classpath (cli.System.*)

IKVM.GNU.Classpath.dll - .net assembly versi dari GNU Classpath.

IKVM.JNI.CLR-Win32.dll - JNI interface untuk Win32.
IKVM.JNI.Mono.dll - JNI interface untuk Mono yang merupakan bagian dari mono(libmono-ikvm-jni.so).

IKVM.AWT.WinForms.dll - masih belum sempurna; library ini berfungsi sebagai mapping buat AWT.

ikvm.exe - starter seperti java.exe ("Dynamically").
ikvmc.exe - meng-kompile java class dan jar menjadi .Net assembly("Statically").
ikvmstub.exe - tool membuat stub class dari .Net assembly, jadi java code dapat mengkompile .Net code(yang ada di dalam assembly).

Dari .net ke java
Di mono; terdapat library user interface antara lain GTK+/Glade -> GTK#, QT -> QT#, WindowForms(dengan Wine), Mozilla-Gecko -> GeckoSharp dan Cocoa -> Cocoa#(Mac OSX).
Kebanyakan widget ini sudah mencapai versi stable. Seperti GTK#, library ini di buat direct ke API GTK+. Sedangkan di java harus melalui JNI.
Dengan bantuan ikvmstub.exe kita membuat jar.
misal: "ikvmstub gtk-sharp.dll" maka akan menjadi "gtk-sharp.jar" dan di java code nya di tambahkan "import gtk.*;"

Dari java ke .net
Banyak aplikasi java yang sudah matang di luar sana. sedangkan untuk meng-porting-nya ke .net agak butuh waktu.
wah saatnya ikvm menjadi penolong kita.
seperti Eclipse; dengan "ikvm eclipe.jar" maka hanya dengan .net runtime kita bisa menjalankan Eclipse.

Membuat java aplikasi menjadi native x86
Kalau anda menggunakan mono. maka ada kita bisa membuat java aplikasi kita menjadi native x86.
Dalam mono.exe terdapat "Ahead-of-Time compiler" yang membuat aplikasi .net menjadi native x86, maksudnya kita membypass JIT, karena setiap kita menjalankan aplikasi .net, maka intermediate languge di compiler oleh JIT agar bisa di jalankan di processor(x86 code). hal yang sama terjadi bila anda menggunakan JVM. Tentu ini membuat proces loading lebih cepat.
kita punya java source(Demo.class) kita jadikan menjadi .net assembly dengan: "mono ikvmc.exe -reference:`pwd`/classpath.dll Demo.class"
process diatas akan menghasilkan demo.exe; menjalankannya dengan "mono demo.exe" (mengunakan JIT)
sekarang kita buat native dengan: "mono --aot Demo.exe"
process diatas akan menghasilkan Demo.exe.so; kita tetap menjalankan demo.exe dengan "mono demo.exe" (sekarang tanpa menggunakan JIT).

Rangkuman
IKVM.Net project ini sangat berguna bagi developer baik dari .net dan java. Terutama bermigrasi aplikasi dari java bytecode ke .net assembly.
Bila anda hanya memiliki .net runtime, kita tetap bisa menjalankan java aplikasi tanpa JRE(Java Runtime Engine). Seperti di OS BSD, yang JRE-nya baru untuk 4.x bukan 5.x seri.
Skill java anda tetap berguna walaupun anda berada di .net runtime. :-)
Tanpa menggunakan jdk dan jre anda tetap dapat membuat java aplikasi dengan bantuan Jikes(penganti javac.exe) tentu dengan ikvm.net dan .net runtime.
Walaupun agak overhead, java aplikasi dapat berkomunikasi dengan .net assembly dengan stubclass, sekarang mereka bisa side-by-side.

Tidak ada komentar: