2 Java Sejarah Teknologi Java Bahasa pemrograman Java merupakan suatu bahasa pemrograman yang dikembangkan oleh Sun Microsystems di California pada tahun 1991, yang dipimpin oleh James Gosling. Bahasa pemrograman Java adalah bahasa pemrograman berbasis object oriented yang modem. Java memiliki sintaks yang mirip dengan bahasa C dan C++, tetapi Java menghilangkan banyak kelebihan C dan C++ yang menjadikan C dan C++ menjadi kompleks, menbingungkan dan tidak aman. Java platform dikembangkan mengakomodasikan masalah pembangunan piranti lunak untuk media yang terhubung ke jaringan. Java dirancang untuk mendukung arsitektur komputer yang berbeda-beda. Untuk mencapai kebutuhan tersebut, sebuah program yang dikompilasi harus dapat dipindahkan di dalam jaringan, bekerja telah client dan menjamin keamanan client yang memakainya. Java merupakan salah satu bahasa pemrograman yang multi-platform, maksudnya bahasa pemrograman ini dapat dijalankan pada sistem operasi yang berbedabeda. Namun untuk memiliki Java dapat menjalankan program java, sistem Virtual Machine (JVM) yang sudah operasi tersebut harus ter-install di dalamnya (http://java.sun.com/docs/books/vmspec/2nd-editionlhtml/Introduction.doc.html). 2.1.2 Java Virtual Machine Java Virtual Machine (JVM) merupakan dari Java platform. JVM sebenamya adalah komponen teknologi yang bertanggung jawab untuk menangani perangkat keras, sistem operasi, hasil kompilasi dari program Java (file .class) dan melindungi pengguna dari program yang tidak dikenali. JVM adalah sebuah mesin komputasi yang abstrak. Seperti sebuah mesin komputsasi yang nyata, JVM memiliki suatu rangkaian instruksi dan memanipulasi area memory pada saat Sangat beralasaan dalam mengimplementasikan suatu bahasa pemrograman dengan menggunakan mesin menggunakan virtual tersebut, sebuah bahasa virtual machine, pemrograman karena yang dibuat dengan hanya tergantung kepada mesin virtual tersebut, tidak lagi tergantung terhadap jenis perangkat keras yang digunakan oleh mesin atau. jenis sistem operasi yang digunakan, karena penanganan terhadap mesin dan sistem operasi merupakan tugas dari JVM. JVM tidak mengenaH format binary, format atau yang disebut bahasa pemrograman Java, JVM hanya file class. Sebuah file class bytecode mengenali mengandung instruksi JVM (http://java.sun.com/docslbooks/vmspec/2nd- edition/html/Introduction.doc.html). Di dalam Java, konsep Object Oriented merupakan hal yang wajib dikuasai sebelum menggunakan bahasa ini. Untuk mengerti akan OOP lebih lanjut, maka perlu diketahui apa itu object, apa class, bagaimana object dan class berhubungan, dan bagaimana object berkomunikasi, dan lain-lain. Object Dalam kehidupan nyata object memiliki dua karakteristik. Semua object memiliki state dan behavior. Sebagai contoh, anjing memiliki state (nama, warna, keturunan, menjadi lapar) dan mempunyai behavior (menyalak, mengambil, menggoyangkan ekor). Sepeda memiliki state (gigi, pedal, dua roda, jumlah gigi) dan mempunyai behavior (mengerem, mempercepat, melambat, mengganti gigi). Variables (state) Methods (behavior) Gambar 2.1 State dan Behavior Suatu Object Object di dalam bahasa pemrograman adalah yang juga satu atau mempunyai state dan lebih variabel berhubungan sebuah behavior. Object (property) dan object) seperti behavior yang model dari object dunia nyata, menyimpan state mereka dalam dengan method digambarkan pada (fungsi yang Gambar 2.1 (http://java.sun.com/docslbooks/tutorialljava/concepts/object.html). Dalam kehidupan nyata, Anda mungkin memiliki banyak benda (object) yang sama. Contohnya, sepeda Anda hanyalah satu dari sekian banyak sepeda yang ada di dunia. Dalam pandangan object oriented, sepeda Anda dapat dikatakan sebagai sebuah instance dari class yang bernama Sepeda. Sepeda mempunyai beberapa state dan behavior seperti yang telah disebutkan pada pembahasan tentang object di atas. Walaupun demikian, masing-masing object sepeda dapat memiliki state yang berbeda dengan object sepeda lainnya. Public API Private Implementation Details Gambar 2.2 Class Saat membuat sepeda, pabrik dapat membuat banyak sepeda dari sebuah cetakan yang sama. Akan sangat tidak efisien bila membuat sebuah cetakan barn untuk setiap sepeda yang diproduksi. Dalam program, cetakan untuk membuat sebuah object disebut class. Gamabran umum suatu class secara visual dapat dilihat pada Gambar 2.2 (http://java.sun.com/docslbooks/tutorial/java/concepts/class.html}. 2.1.3.3lnheritance Sepeda gunung, sepeda balap, dan tandem merupakan jenis-jenis sepeda. Dalam OOP sepeda gunung, sepeda balap, dan tandem merupakan subclass dari class Sepeda. Demikian pula class Sepeda merupakan superclass dari sepeda gunung, sepeda balap, dan tandem. Hubungan class-class tersebut dapat dilihat pada gambar 2.3. Mountain Bike Tandem Bike Racing Bike Gambar 2.3 Inheritance Masing-masing subclass mewarisi state itu subclass juga (property) dari mewarisi behavior (method) membuat property dan superclass. Method yang method sama yang sama tersebut yang dari superclass. Subclass dengan disebut superclass, selain yang dapat diwariskan sebagai oleh override method (http://java.sun.com/docs/books/tutorial/java/concepts/inheritance.html). 2.1.3.4/nterface Di dalam bahasa berhubungan dengan pemrograman Java, interface berarti bagaimana sebuah object sebuah media berinteraksi dengan object yang lainnya. Sebuah interface dapat dianalogikan seperti sebuah protocol (an agreed on behavior). Untuk program membuat suatu Java lainnya, program Java yang dinamis yang dapat dapat digunakan Java Reflection (http://java.sun.com/docs/books/tutorial/java/concepts/interface.html). dan memanggil ClassLoader 2.2 Reflection dan ClassLoader Format binary file yang berekstension .class merupakanfile yang dihasilkan dari proses kompilasi yang dilakukan oleh kompiler java dari source code program java. File binary class memiliki format tertentu yang mengikuti spesifikasi yang dikeluarkan oleh Sun sehingga Java Virtual Machine dapat mengenali format tersebut dan menggunakannya. Dengan menggunakan reflection kita dapat mengakses informasi internal dari sebuah class dari file dass-nya sehingga dapat di-load ke dalam NM, dan dengan menggunakan reflection dapat menuliskan program yang berhubungan dengan sebuah class ketika saat program tersebut di eksekusi bukan pada source code. kemampuan ini, menjadikan reflection sebuah alat yang berguna untuk aplikasi yang bersifat Dengan membangun fleksibel, di mana perubahan atau penanganan class dapat dilakukan pada saat runtime. Bahasa seperti c dan c++ mengkompilasi source code menjadi bahasa native memerlukan bagian linking setelah source code dikompilasi. Proses linking mengabungkan kode dari beberapa hasil source yang dikompilasi dengan kode library untuk membentuk program yang dapat di eksekusi.Sedangkan java menerapkan konsep yang berbeda, dengan menggunakan java, class-class yang dihasilkan oleh kompiler akan di-load oleh NM ketika diperlukan, sehingga tidak diperlukan proses linking dengan bahasa native dari mesin. Java menerapkan late binding, sehingga suatu aplikasi dapat ditulis menggunakan suatu interface tertentu dengan implementasi aktual tidak disebutkan sampai ketika pada saat run time. Aturan untuk melakukan loading suatu class telah dijelaskan secara terperinci didalam spesifikasi JVM. Prinsip dasarnya adalah suatu class akan di-load oleh JVM ketika dibutuhkan. Setiap class yang di-load mungkin memiliki class lain yang tergantung kepada class tersebut, sehingga proses loading tersebut menjadi rekursif. Definisi class di dalam Java dan spesifikasi dari NM memberikan suatu kerangka kerja yang sangat hebat dalam menciptakan suatu assembly code ketika run time. Melalui kegunaan dari suatu class loader, fleksibilitas dari sebuah class loader memungkinkan untuk melakukan loading suatu class secara dinamis ketika suatu aplikasi dijalankan. Suatu harga yang mesti dibayar dengan fleksifibilitas tersebut adalah kerja mesin yang lebih ketika pertama menjalankan suatu aplikasi. Beberapa ratus class hams diload oleh JVM sebelum dia dapat mengeksekusi aplikasi tersebut. Java menyediakan paket java.lang.reflection di mana di dalam paket tersebut terdapat beberapa class yang digunakan untuk mendukung reflection, antara lain : 1. class Class Merupakan class yang terdapat method sebagai class loader, yaitu dengan static method forName( ), kita dapat membaca suatu byte code dari sebuah class dan dijadikan object dari class Class. 2. class Constructor Merupakan class yang digunakan mendapatkan constructor dari suatu class. 3. class Field Merupakan class yang digunakan untuk mendapatkan attribute dari suatu class. 4. class Method Merupakan class yang digunakan untuk mendapatkan method dari suatu class. Java juga mendukung dalam pembuatan aplikasi yang terhubung melalui jaringan. Banyak teknik yang dapat digunakan untuk membuat aplikasi Java yang saling berhubungan melalui jaringan intranet maupun internet. Salah satu yang dapat digunakan adalah Remote Method Invocation (JVM) (Green, 2003). 2.3 Remote Method Invocation Pengertian RMI Remote Method Invocation (RMI) memungkin programmer untuk menciptakan program terdistribusi dengan teknologi java, dimana suatu method dari Java suatu remote object dapat dipanggil dari Java Virtual Machine (JVM) yang lainnya, yang biasanya dapat berubah mesin yang berlainan. Suatu program yang berbasis Java dapat memanggil sebuah remote object ketika program tersebut mendapatkan referensi dari remote object tersebut baik dengan melihat ke naming service yang disediakan oleh RMI atau menerima referensi dari suatu argumen atau return value. Sebuah client dapat memanggil sebuah remote object di server dan server juga dapat menjadi client bagi remote object lainnya. RMI memakai object serialization untuk marhal dan unmarshal parameter (http://java.sun.com/products/jdklrmil). RMI memungkinkan object dengan object berkomunikasi di mana terdapat pada JVM yang berbeda. JVM dapat berada di satu komputer maupun beda komputer. Dengan ini kita dapat memungkinkan sebuah aplikasi untuk memanggil method dari suatu object secara remote, berbagai sumber daya, dan men-load proses dari sistem yang berbeda. Method dapat juga mengirimkan object dari JVM lainnya dimana JVM tersebut belum mengenalinya, sehingga memungkinkan men-load suatu object yang diperlukan secara dinamis (Subranyam, 2000). RMI runtime adalah arsitektur yang dikembangkan dalam teknologi java. Untuk semua implementasi, RMI runtime akan menginstanisasikan sebuah thread untuk menangani setiap request dari client. Setelah sebuah request selesai, thread tersebut akan menunggu untuk suatu periode waktu tertentu untuk request client yang selanjutnya. Koneksi RMI akan memakai ulang thread-thread tersebut. Jika tidak ada request yang masuk ke dalam server maka RMI akan menghancurkan thread terebut. 2.3.2 Tujuan dari RMI adalah membuat object dari JVM yang berbeda kelihatan seperti object lokal. JVM yang memanggil remote object biasanya disebut sebagai client. dan JVM yang terdapat remote object biasanya disebut sebagai server. Salah satu aspek terpenting dari rancangan RMI adalah transparansi. Suatu aplikasi tidak harus tahu apakah suatu object yang digunakan adalah remote atau adalah lokal. Pemanggilan method dari suatu remote object memiliki sintaks yang sama seperti kita memanggil object lokal, tetapi dibawahnya banyak yang dibungkus sehingga tidak (Subranyam, 2000). 2.3.3 RMI mempunyai beberapa kelebihan, yaitu : kelihatan 1. object oriented : di dalam RMI, pengiriman object yang kompleks dapat dilakukan dengan mudah karena semuanya telah disediakan dan ditanganin oleh RMI itu sendiri. 2. safe and secure : RMI menggunakan mekanisme yang telah disediakan oleh Java untuk melindungi system yang telah dibangun. RMI menyediakan jalur komunikasi yang aman antara client dan server. Dan RMI juga menyediakan object SecurityManager yang dapat mengontrol beberapa aktivitas remote seperti membaca file tertentu atau melakukan koneksi terhadap jaringan lain. 3. Kemudahan dalam membuat dan menggunakan : sangat mudah menggunakan RMI untuk membuat aplikasi client server. Sebuah RMI Server pada dasarnya adalah sebuah interface yang dibuat dengan menggunakan Java juga, sehingga dapat dibuat dengan mudah tanpa ada masalah kompabilitas. 4. Melakukan koneksi ke suatu system yang sudah ada teknologi Java Native Interface (JNI) : dengan menggunakan memungkinkan aplikasi yang dibangun dengan Java melakukan interaksi dengan sistem yang sudah ada (native system) dan teknologi Java Database Conectivity (JDBC) memungkinkan aplikasi yang dibangun dengan Java melakukan koneksi kepada basis data relasional yang sudah ada. 5. "Write Once, Run AnyWhere" : RMI merupakan bagain dari semboyan Java yaitu "write once, run anywhere". Sistem yang dibangun dengan RMI dapat dengan mudah dipindahkan ke NM manapun juga. 6. Distributed Garbage Collection_;_ garbage collection adalah komponen yang telah terintegrasi dengan Java Enviroment. Garbage collection menggunakan algoritma refrence-counting. Dimana proses penghapusan object computer antara client dan server bekerja secara otomatis. dari sistem memory