Rabu, 13 Mei 2009

sekedar sharing RMI dan EJB..

Perbandingan Antara Objek Lokal dan Objek Remote pada Java


Objek Lokal

Objek Remote

Object Definition

Sebuah objek local ditetapkan oleh sebuah class Java

Perilaku sebuah objek remote di tentukan oleh sebuah interface yang harus extend pada remote interface

Object Implementation

Sebuah objek local diimplementasikan oleh class Javanya

Perilaku sebuah objek remote di dieksekusi oleh sebuah class java yang mengimplementasikan remote interface

Object Creation

Sebuah instance baru dari objek local dibuat dengan operator new

Sebuah instance baru dari sebuah objek remote dibuat pada komputer host dengan operator new. Client tidak dapat membuat langsung objek remote yang baru (kecuali menggunakan Java 2 Remote Object Activation)

Object Access

Sebuah objek local di akses langsung melalui sebuah object reference variable

Sebuah objek remote diakses melalui sebuah object reference variable yang menunjuk pada sebuah implementasi proxy stub dari interface remote.

References

Pada suatu JVM, sebuah object reference menunjuk langsung pada sebuah objek di heap

Suatu “remote reference” adalah penunjuk pada sebuah objek proxy (sebuah “stub”) pada heap local. Stub tersebut berisi informasi yang memungkinkan stub untuk connect pada sebuah objek remote, yang berisi implementasi dari method-method.

Active Reference

Pada suatu JVM, sebuah object di sebut “hidup” jika terdapat paling sedikit satu reference yang menunjuk objek tersebut

Pada sebuah lingkungan terdistribusi, remote JVM memiliki kemungkinan crash, dan koneksi jaringan kemugkinan hilang. Sebuah remote object dikatakan memiliki sebuak remote reference pada objek yang aktif jika objek tersebut telah diakses dalam suatu periode waktu. Jika seluruh remote reference dengan jelas telah hilang, atau jika seluruh remote reference telah melampaui suatu periode waktu, maka sebuah remote object tersedia untuk melakukan pengumpulan “sampah”.

Finalization

Jika sebuah objek mengimplementasikan method finalize(), maka method tersebut dipanggil sebelum suatu objek diambil oleh “pengumpul sampah”

Jika suatu objek mengimplementasikan interface Unreferenced, maka method dari interface tersebut dipanggul ketika seluruh remote reference telah hilang

Garbage Collection

Ketika seluruh reference local kepada suatu objek telah hilang, sebuah objek menjadi calon untuk menjadi “pengumpul sampah”.

“Pengumpul sampah” terdistribusi bekerja sama dengan “pengumpul sampah” lokal. Jika tidak terdapat remote reference dan seluruh local reference yang menunjuk pada remote objek telah hilang, maka objek tersebut menjadi calon untuk menjadi “pengumpul sampah”.

Exceptions

Exception dapat berupa runtime exception atau exception. Compiler Java memaksa program untuk menangani seluruh exception.

RMI memaksa program untuk menangani seluruh kemungkinan dilemparnya objek RemoteException. Hal ini dilakukan untuk memastikan robustness dari aplikasi.

Java Remote Method Invocation (RMI)

RMI mulai diperkenalkan pada Java 1.1, dengan tujuan menyediakan fasilitas kepada programmer untuk dapat mendistribusikan objek yang digunakan pada beberapa proses yang berbeda, dapat berjalan di dalam satu mesin ataupun di beberapa mesin yang terhubung dalam jaringan. Fasilitas RMI ini ingin memberikan kemudahan, karena pembuatan antar muka (interface) dan implementasinya menggunakan kelas java biasa.






1. Arsitektur RMI


Dalam RMI, pendefinisian interface (behavior) dan penerapan dari interface tersebut merupakan dua konsep yang berbeda, artinya keduanya dapat berjalan pada dua JVM yang berbeda.

Sebuah interface pada Java, hanyalah berisi definisi method apa saja yang dapat digunakan oleh suatu objek dan tidak berisi kode logika perintah yang digunakan. Agar sebuah interface dapat diberikan logika perintahnya, maka harus dibuat sebuah class yang menerapkan (implementation) dari interface tersebut.

Pada RMI dimungkinkan untuk membuat dua class yang menerapkan dari satu interface yang telah didefinisikan. Satu class menerapkan behavior dari interface tersebut (berjalan di sisi server), dan satu class lagi bertindak sebagai proxy untuk remote service (server object) yang berjalan di client.


Program client melakukan pemanggilan method ke server melalui proxy. Jika remote method yang dipanggil mengembalikan nilai, maka pengembalian tersebut ditangkap oleh proxy, baru kemudian diteruskan ke program client.

Penerapan RMI dibangun dari 3 layer abstrak :

Layer pertama adalah layer Stub dan Skeleton yang terletak langsung di bawah pengembang aplikasi. Layer ini menangkap pemanggilan method yang dilakukan oleh client pada interface reference variable dan mengalihkan pemanggilan tersebut pada sebuah service remote RMI.

Layer selanjutnya adalah Layer Remote Reference. Layer ini mengerti cara untuk menterjemahkan dan mengelola reference yang terdapat dari client menuju remote service object. Pada JDK 1.1, layer ini mengkoneksikan client pada remote sevice object yang berjalan dan dieksport pada sebuah server. Koneksi antara client dan server adalah one-to-one (unicast) link. Pada Java 2 SDK, layer ini di tingkatkan untuk mensupport aktivasi remote service object yang sedang “tertidur” melalui Remote Object Activation.

Layer transport berbasiskan pada koneksi TCP/IP antara mesin pada sebuah jaringan. Layer ini menyediakan konektivitas dasar dan beberapa strategi untuk menembus firewall.

Dengan menggunakan arsitektur berlayer, setiap layer dapat ditingkatkan atau digantikan tanpa mempengaruhi system yang lain. Sebagai contoh, layer transport dapat digantikan dengan layer UDP/IP tanpa mempengaruhi layer di atasnya.

Layer Stub dan Skeleton

Ketika sebuah program client memanggil sebuah remote method service, stub dan skeleton akan meneruskan ke variabel referensi interface. Stub dan skeleton dinyatakan dengan design pattern Proxy.













Pada gambar di atas, class stub memiliki peran sebagai proxy, dan class implementasi remote service berperan sebagai RealSubject.

Skeleton adalah class pembantu yang di-generate untuk digunakan oleh RMI dan mengerti cara untuk berkomunikasi dengan stub melalui RMI. Skeleton memiliki pembicaraan dengan stub yaitu tentang membaca parameter untuk pemanggilan method dari hubungan tersebut, membuat panggilan pada objek implementasi remote service, menerima nilai kembalian, dan menuliskan nilai kembalian tersebut pada stub.

Layer Remote Reference

Layer kedua (Remote Reference Layer) menyediakan objek RemoteRef yang menyatakan hubungan ke objek remote service implementation. Objek stub akan menggunakan method invoke() dalam RemoteRef untuk meneruskan pemanggilannya. Pada Java 1.1 disediakan satu cara kepada client untuk berhubungan dengan remote service implementation, yaitu unicast (koneksi point-to-point).

Pada Java 2 SDK, RMI menambahkan semantik baru untuk koneksi client-server. Ketika sebuah method di panggil utuk sebuah objek yang aktif, RMI menentukan jika objek implementasi remote service terbengkalai. Jika terbengkalai, RMI akan membuat instance baru dari objek tersebut dan mengembalikan statusnya dari file disk. Tipe lain dari koneksi semantic dapat dilakukan, sebagai contoh, dengan menggunakan multicast, suatu proxy dapat mengirimkan sebuah method request pada banyak implementasi secara simultan dan menerima balasan yang pertama (hal ini dapat meningkatkan waktu respond an kumungkinan meningkatkan ketersediaan).

Layer Transport

Layer transport membuat koneksi antara JVM satu dengan JVM lainnya. Seluruh koneksi adalah jaringan berbasis stream yang menggunakan TCP/IP.

Jika dua JVM berjalan pada komputer yang sama, kedua JVM tersebut berhubungan melalui stack protokol jaringan TCP/IP komputer tersebut. Gambar di bawah ini menunjukkan kalau koneksi yang dapat digunakan tidak terbatas pada penggunaan TCP/IP:


TCP/IP menyediakan koneksi antara dua mesin yang tetap dan berbasis stream yang berdasarkan pada IP address dan nomor port pada setiap mesin. Pada RMI koneksi TCP/IP digunakan sebagai dasar untuk seluruh koneksi mesin-ke-mesin.

Selain TCP/IP, RMI menggunakan protokol level kabel yang disebut Java Remote Method Protocol (JRMP). JRMP adalah protokol berbasis stream yang hanya dispesifikan sebagian.

Transport layer RMI di desain untuk membuat koneksi antara client dan server, bahkan jika terdapat rintangan di jaringan.

2. Penamaan Remote Object

Agar client dapat menemukan remote objek yang diminta, RMI dapat menggunakan directory service, seperti JNDI. Namun RMI telah tersedia semacam directory service disebut RMI Registry, yang disediakan oleh tool rmiregistry. RMI Registry secara default menggunakan port 1099.

Pada sisi server, program membuat sebuah remote service dengan cara membuat locala object yang menerapkan service tersebut. Berikutnya, objek yang dibuat tersebut diexport ke RMI, dan kemudian RMI membuat sebuah layanan listening yang menunggu sebuah permintaan dari client. Setelah melakukan export, server meregisterkan objek tersebut ke RMI Registry dengan sebuah public name.

Di sisi client, RMI Registry diakses melalui static class Naming. Class ini menyediakan method lookup() dimana client menggunakannya untuk query sebuah registry. Method lookup() menerima sebuah URL yang menyatakan nama server dan nama service yang diminta, dan method ini mengembalikan remote reference object dari yang objek yang diminta. Format URLnya

rmi://[:]/

Perbedaan RMI dan EJB

RMI menawarkan akses jarak jauh terhadap sebuah objek yang berjalan pada proses lain. Sedangkan EJB menawarkan layanan yang lebih banyak dibandingkan dengan RMI. EJB tidak hanya memiliki fitur yang sama dengan RMI yaitu mengakses objek dari jauh tetapi EJB juga menyediakan service lain seperti persistence, pengelolaan transaksi, keamanan, dan pengelolaan resource. Server EJB menyediakan seluruh service yang rumit ini sehingga para pengembang hanya perlu memikirkan business logic saja.

RMI adalah protokol yang memungkinkan objek-objek terdistribusi dapat berkomunikasi satu sama lain. Sun Microsystem menyediakan implementasi Java dari protokol RMI ini sehingga hasil implementasi dapat bermacam-macam.

EJB adalah model komponen terdistribusi yang disediakan oleh Sun Microsystem. EJB berbasiskan pada protokol RMI dan menggunakan Java RMI sebagai inti implementasi. EJB berada 10 langkah di depan RMI dengan banyak fitur seperti membuat komponen, mendeploynya ke dalam server aplikasi dan lain lain.


Gambar 1.1 Seluruh Client dari Server EJB Menggunakan RMI pada Client IIOP-RMI dan Client dari EJB Pada Dasarnya Sama

Untuk dapat berbicara dengan server EJB, suatu client EJB pertama-tama harus mendapatkan sebuah objek reference pada server EJB. Hal ini sama dengan yang dilakukan oleh client RMI yang mendapatkan sebuah reference pada sebuah remote objek. Server EJB selalu diperlakukan seperti remote objek. Untuk mendapatkan objek reference, client BEA WebLogic Enterprise dari EJB menggunakan Java Naming and Directory Interface (JNDI). Pemanggilan JNDI mengembalikan sebuah reference pada sebuah objek yang dapat mengimplementasikan home interface dari EJB server. Client kemudian dapat menggunakan home interface pada sebuah server EJB untuk memantau instance EJB yang telah ada atau membuat instance baru. Client menggunakan remote interface untuk berinteraksi dengan objek EJB yang terletak di server. Singkatnya, sebuah client dari EJB adalah client RMI yang berbicara dengan EJB.

Tidak ada komentar:

Posting Komentar