Anda di halaman 1dari 17

MODUL PENGENALAN CORBA

Oleh : Mochammad Firdias Fasa Dien Kholiq M. a!"ar #hodiq

Ba$ % Pen&er'ian Cor$a

(.( Pen&er'ian Cor$a Common O$)ec' Req*es' Bro+er Archi'ec'*re ,CORBA- adalah teknologi yang dipergunakan untuk heterogeneous computing (sistem komputer dengan berbagai macam lingkungan). CORBA pada dasarnya menggunakan arsitektur client-server dimana klien dan server berupa objek. CORBA mendukung apa yang disebut interoperabilitas, yaitu kemampuan saling bekerjasama antar sistem computer.

(.. Per$edaan Cor$a dan RM% CORB berbeda dengan R!", berikut perbedaan CORB dengan R!"# $. CORB adalah dapat diimplementasikan dengan sembarang bahasa pemrograman. %. CORB terdiri dari beberapa mekanisme dimana R!" dapat termasuk di dalamnya. &. 'ada R!" tidak menggunakan ORB (Object Re(uest Broker).

(./ Kena0a Cor$a CORBA )apat menangani keberagaman lingkungan antara klien dan server (dapat diimplementasikan pada bahasa pemrograman yang berbeda). *al ini karena CORBA menggunakan apa yang disebut antarmuka (inter+ace) untuk menjembatani dua buah lingkungan yang berbeda.

(.1 A0a %'* ORB O$)ec' Req*es' Bro+er ,ORB- merupakan inti dari CORB dan bertanggung ja,ab untuk menjalankan semua mekanisme yang dibutuhkan, yaitu# $. !enemukan implementasi objek untuk memenuhi suatu re(uest %. !enyiapkan implementasi objek untuk menerima suatu re(uest

&. !elakukan komunkasi data untuk memenuhi suatu re(uest -ebuah permintaan (re(uest) yang dikirimkan suatu client ke suatu object implementation akan mele,ati ORB. )engan ORB, yang terdiri dari inter+ace, suatu client dapat berkomunikasi dengan object implementation tanpa adanya batasan plat+orm, teknologi jaringan, bahasa pemrograman, dan letak objek. )engan menggunakan ORB, objek client bisa meminta sebuah method pada sebuah object server yang bisa saja terdapat dalam satu mesin maupun jaringan yang berbeda. ORB menerima panggilan dan menemukan objek yang bisa mengimplementasikan permintaan, mengirim parameter, invoke method, dan mengembalikan hasil yang diperoleh. Objek-objek CORB dispesi+ikasikan menggunakan inter+ace, yang merupakan penghubung anatara client dan server. "nter+ace )e+inition .anguage (").) digunakan untuk mende+inisikan inter+ace tersebut. "). menentukan tipe-tipe suatu objek dengan mende+inisikan inter+ace-inter+ace objek tersebut. -ebuah inter+ace terdiri dari kumpulan operasi dan parameter operasi tersebut. "). hanya mendeskripsikan inter+ace, tidak mengimplementasikannya. !eskipun sintaks yang dimiliki oleh "). menyerupai sintaks bahasa pemrograman C// dan 0ava., perlu diingat, "). bukan bahasa pemrograman. CORB mende+inisikan ""O' ("nternet "nter-ORB 'rotocol) untuk mengatur bagaimana objek berkomunikasi melalui jaringan. ""O' merupakan open protocol yang berjalan diatas 1C'2"'. 'ada 0ava, CORB merupakan pelengkap untuk menyediakan +rame,ork distribusi objek, services pendukung +rame,ork itu, dan kemampuan antar operasi dengan bahasa pemrograman lainnya. CORB untuk client-server menggunakan protokol ""O' ("nternet "nterORB 'rotocol) untuk komunikasi antara server dan klien. rsitektur Corba #

(.2 A3A %DL a4a %DL ,%n'er"ace De"ini'ion Lan&a*&e- merupakan sebuah teknologi untuk distribusi objek yang berinteraksi antar plat+orm. CORB menggunakan "). untuk membuat antarmuka (inter+ace). 0ava "). adalah implementasi dari teknologi antarmuka pada CORB . !odel pemrograman "). atau biasa disebut 0ava "). terdiri dari ORB CORB dan kompiler idlj yang memetakan O!3 "). ke 0ava dengan menggunakan 0ava CORB ORB. plikasi CORB dibuat dengan menggunakan "). untuk mende+inisikan antarmuka objek agar dapat diakses oleh klien maupun server.

Ba$ %% Pra+'i+ Cor$a

..( 5ello 6ord $. Buat 4ile *alo.idl


module Halo { interface Hello{ void halo(in string nama); }; };

%. Buat 5*ello-tub.java
package Halo; /** * Interface definition: Hello. * * @author OpenORB Compiler */ public class _Hello t!" extends or#.om#.CORB$.porta"le.O"%ectImpl implements Hello { static final trin#&' _ids_list ( { )I*+:Halo/Hello:,.-) }; public trin#&' _id.() { return _ids_list; } private final static Cla.. _opsClass ( Halo.HelloOperation..class; /** * Operation halo */ public void halo( trin# nama) { while(true) { if (/this._i._local()) { or#.om#.CORB$.porta"le.Inp!t tream _inp!t ( null; try {

or#.om#.CORB$.porta"le.O!tp!t tream _o!tp!t ( this._re0!e.t()halo)1true); _o!tp!t.2rite_.trin#(nama); _inp!t ( this._in3o4e(_o!tp!t); return; } catch(or#.om#.CORB$.porta"le.Remar.hal56ception _e6ception) { continue; } catch(or#.om#.CORB$.porta"le.$pplication56ception _e6ception) { trin# _e6ception_id ( _e6ception.#etId(); throw new or#.om#.CORB$.7898O:8()7ne6pected 7.er 56ception: ); _e6ception_id); } finally { this._relea.eRepl<(_inp!t); } } else { or#.om#.CORB$.porta"le. er3antO"%ect _.o ( _.er3ant_prein3o4e()halo)1_opsClass); if (_.o (( null) continue; Halo.HelloOperation. _.elf ( (Halo.HelloOperation.) _.o..er3ant; try { _.elf.halo( nama); return; } finally { _.er3ant_po.tin3o4e(_.o); } } } } }

&. Buat *ello*elper.java


package Halo; /** * Helper cla.. for : Hello * * @author OpenORB Compiler */

public class HelloHelper { /** * In.ert Hello into an an< * @param a an an< * @param t Hello 3al!e */ public static void in.ert(or#.om#.CORB$.$n< a1 Halo.Hello t) { a.in.ert_O"%ect(t 1 type()); } /** * 56tract Hello from an an< * * @param a an an< * @return the e6tracted Hello 3al!e */ public static Halo.Hello e6tract( or#.om#.CORB$.$n< a ) { if ( /a.t<pe().e0!i3alent( type() ) ) { throw new or#.om#.CORB$.=$R H$+(); } try { return Halo.HelloHelper.narrow( a.e6tract_O"%ect() ); } catch ( final or#.om#.CORB$.B$*_>$R$= e ) { throw new or#.om#.CORB$.=$R H$+(e.#et=e..a#e()); } } // // Internal ?<peCode 3al!e // private static or#.om#.CORB$.?<peCode _tc ( null; /** * Ret!rn the Hello ?<peCode * @return a ?<peCode */ public static or#.om#.CORB$.?<peCode t<pe() { if (_tc (( null) { or#.om#.CORB$.ORB or" ( or#.om#.CORB$.ORB. init(); _tc ( or".create_interface_tc( id()1 )Hello) ); } return _tc; } /** * Ret!rn the Hello I*+ I* * @return an I*

*/ public static trin# id() { return _id; } private final static trin# _id ( )I*+:Halo/Hello:,.-); /** * Read Hello from a mar.halled .tream * @param i.tream the inp!t .tream * @return the readed Hello 3al!e */ public static Halo.Hello read(or#.om#.CORB$.porta"le.Inp!t tream i.tream) { return(Halo.Hello)i.tream.read_O"%ect(Halo._Hello t!". class); } /** * :rite Hello into a mar.halled .tream * @param o.tream the o!tp!t .tream * @param 3al!e Hello 3al!e */ public static void 2rite(or#.om#.CORB$.porta"le.O!tp!t tream o.tream1 Halo.Hello 3al!e) { o.tream.2rite_O"%ect((or#.om#.CORB$.porta"le.O"%ectImpl)3al !e); } /** * 8arro2 CORB$::O"%ect to Hello * @param o"% the CORB$ O"%ect * @return Hello O"%ect */ public static Hello narro2(or#.om#.CORB$.O"%ect o"%) { if (o"% (( null) return null; if (o"% instanceof Hello) return (Hello)o"%; if (o"%._i._a(id())) { _Hello t!" .t!" ( new _Hello t!"(); .t!"._.et_dele#ate(((or#.om#.CORB$.porta"le.O"%ectImpl)o"%)._ #et_dele#ate()); return .t!"; } throw new or#.om#.CORB$.B$*_>$R$=(); }

/** * 7nchec4ed 8arro2 CORB$::O"%ect to Hello * @param o"% the CORB$ O"%ect * @return Hello O"%ect */ public static Hello !nchec4ed_narro2(or#.om#.CORB$.O"%ect o"%) { if (o"% (( null) return null; if (o"% instanceof Hello) return (Hello)o"%; _Hello t!" .t!" ( new _Hello t!"(); .t!"._.et_dele#ate(((or#.om#.CORB$.porta"le.O"%ectImpl)o"%)._ #et_dele#ate()); return .t!"; } }

6. Buat *ello.java
package Halo; /** * Interface definition: Hello. * * @author OpenORB Compiler */ public interface Hello extends HelloOperation.1 or#.om#.CORB$.O"%ect1 or#.om#.CORB$.porta"le.I*+5ntit< { }

7. Buat *ello*older.java
package Halo; /** * Holder cla.. for : Hello * * @author OpenORB Compiler */ final public class HelloHolder implements or#.om#.CORB$.porta"le. treama"le { /** * Internal Hello 3al!e */ public Halo.Hello 3al!e;

/** * *efa!lt con.tr!ctor */ public HelloHolder() {} /** * Con.tr!ctor 2ith 3al!e initiali.ation * @param initial the initial 3al!e */ public HelloHolder(Halo.Hello initial) { 3al!e ( initial; } /** * Read Hello from a mar.halled .tream * @param i.tream the inp!t .tream */ public void _read(or#.om#.CORB$.porta"le.Inp!t tream i.tream) { 3al!e ( HelloHelper.read(i.tream); } /** * :rite Hello into a mar.halled .tream * @param o.tream the o!tp!t .tream */ public void _2rite(or#.om#.CORB$.porta"le.O!tp!t tream o.tream) { HelloHelper.write(o.tream13al!e); } /** * Ret!rn the Hello ?<peCode * @return a ?<peCode */ public or#.om#.CORB$.?<peCode _t<pe() { return HelloHelper.type(); } }

8. Buat *elloOperations.java
package Halo; /** * Interface definition: Hello. * * @author OpenORB Compiler */

public interface HelloOperation. { /** * Operation halo */ public void halo( trin# nama); }

9. Buat *ello'O .java


package Halo; /** * Interface definition: Hello. * * @author OpenORB Compiler */ public abstract class Hello>O$ extends or#.om#.>orta"le er3er. er3ant implements HelloOperation.1 or#.om#.CORB$.porta"le.In3o4eHandler { public Hello _thi.() { return HelloHelper.narrow(_thi._o"%ect()); } public Hello _thi.(or#.om#.CORB$.ORB or") { return HelloHelper.narrow(_thi._o"%ect(or")); } private static trin# &' _ids_list ( { )I*+:Halo/Hello:,.-) }; public trin#&' _all_interface.(or#.om#.>orta"le er3er.>O$ poa1 byte &' o"%ectId) { return _ids_list; } public final or#.om#.CORB$.porta"le.O!tp!t tream _in3o4e(final trin# op8ame1 final or#.om#.CORB$.porta"le.Inp!t tream _i.1 final or#.om#.CORB$.porta"le.Re.pon.eHandler handler) { if (op8ame.e0!al.()halo))) { return _in3o4e_halo(_i.1 handler); } else { throw new or#.om#.CORB$.B$*_O>5R$?IO8(op8ame);

// helper method. private or#.om#.CORB$.porta"le.O!tp!t tream _in3o4e_halo( final or#.om#.CORB$.porta"le.Inp!t tream _i.1 final or#.om#.CORB$.porta"le.Re.pon.eHandler handler) { or#.om#.CORB$.porta"le.O!tp!t tream _o!tp!t; trin# ar#-_in ( _i..read_.trin#(); halo(ar#-_in); _o!tp!t ( handler.createRepl<(); } } return _o!tp!t;

:. Buat *ello"mpl.java
package Halo; public class HelloImpl extends Hello>O$ { public HelloImpl(){ } public void halo( trin# nama) { <.tem.out.println()Hello ); nama); } }

;. Buat *ello-erver.java
package Halo; import %a3a.io.>rint:riter; import or#.om#.CORB$.ORB; import or#.om#.>orta"le er3er.>O$; import or#.om#.>orta"le er3er.>O$Helper; public class Hello er3er { /** * @param ar#. */ public static void main( trin#&' ar#.)throws

56ception {

ORB or" ( ORB.init(ar#.1 null); >O$ rootpoa ( >O$Helper.narrow(or".re.ol3e_initial_reference.()Root>O$))); HelloImpl imp(new HelloImpl(); byte&' id ( rootpoa.acti3ate_o"%ect(imp); or#.om#.CORB$.O"%ect ref ( rootpoa.id_to_reference(id); trin# ior ( or".o"%ect_to_.trin#(ref); <.tem.out.println() er3er tart . . .)); >rint:riter file(new >rint:riter()c:@@ior.t6t)); file.println(ior); file.clo.e(); rootpoa.the_>O$=ana#er().acti3ate(); or".r!n(); } }

$<. Buat *elloClient.0ava


package Halo; import %a3a.io.B!fferedReader; import %a3a.io.AileReader; import %a3a.!til. canner; import or#.om#.CORB$.ORB; public class HelloClient { /** * @param ar#. */ public static void main( trin#&' ar#.)throws 56ception { ORB or" ( ORB.init(ar#.1 null); canner m.4 ( new canner( <.tem.in); B!fferedReader "r ( new B!fferedReader(new AileReader()c:@@ior.t6t))); trin# ior ( "r.read+ine(); "r.clo.e(); or#.om#.CORB$.O"%ect o ( or"..trin#_to_o"%ect(ior); trin# nma()); <.tem.out.println()=a.!44an 8ama (

));nma(m.4.ne6t(); Hello in ( HelloHelper.narrow(o); in.halo(nma); } }

... Des+ri0si File $. *alo.idl, merupakan +ile dasar CORB yang akan dicompile ke dalam bahasa java. %. 5*ello-tub.java, merupakan kelas yang merepresentasikan stub pada sisi klien yang menyediakan +ungsi CORB untuk client yang diimplementasikan oleh antarmuka *ello.java &. *ello*elper.java, merupakan kelas +inal yang menyediakan +ungsi pembantu, seperti method narro,() yang dibutuhkan untuk melakukan casting pada re+erensi objek CORB menjadi tipe yang dibutuhkan. 6. *ello.java, antarmuka ini berisi versi 0ava dari "dl. *ello.java merupakan turunan dari org.omg.CORB .Object yang menyediakan +ungsi objek standart CORB 7. *ello*older.java, kelas +inal yang menangani anggota instans public dari tipe *ello. =elas ini menyediakan operasi keluar masuknya argumen yang diijinkan CORB tapi tidak mudah dipetakan pada 0ava. 8. *elloOperations.java, kelas antarmuka ini berisi sebuah method halo(-tring nama). ").-to-0ava memetakan semua operasi yang dide+inisikan pada antarmuka "). ke +ile ini dimana dapat diakses oleh server maupun klient. 9. *ello'O .java, merupakan kelas abstrak yang menyediakan +ungsi dasar server CORB . =elas *ello"mpl pada server merupakan turunan dari kelas *ello'O .

:. *ello"mpl.java, kelas yang berisi method yang akan dijalankan pada client ;. *ello-erver.java -erver pada CORB sama dengan server pada aplikasi 0ava pada

umumnya dimana diperlukan mengimpor pustaka, mendeklarasikan kelas server, metode main(), dan penanganan eksepsi. -erver CORB membutuhkan objek ORB lokal. -etiap server menginisialisasi sebuah ORB dan meregister objek servant sehingga ORB dapat mendeteksi server saat sebuah invokasi sampai pada server. )eklarasi dan inisialisasi ORB dilakukan di dalam blok try-catch dengan kode sebagai berikut# ORB orb > ORB.init(args, null)? -erver harus mengambil nilai dari root 'O dapter) dan mengakti+kan 'O !anager. 'O ('ortable Object adalah sebuah

mekanisme yang menghubungkan sebuah re(uest menggunakan objek yang diacu dengan kode yang sesuai untuk memenuhi re(uest itu. -ebuah server merupakan sebuah proses yang menginstansiasi (menggunakan) satu atau lebih objek servant. -ervant mengimplementasikan antarmuka yang digenerasi oleh idlj dan mengerjakan operasi yang ada pada antarmuka itu. 'ada praktikum ini sebuah *ello-erver membutuhkan sebuah servant. *ello-erver bekerja dengan naming service yang membuat operasi objek servant dapat diakses oleh klien. -erver membutuhkan sebuah re+erensi objek ke name service sehingga dapat meregister dirinya sendiri dan memastikan invokasi ke antarmuka *ello diteruskan ke objek servant-nya. -ervant diinstansiasi dalam blok try-catch dengan kode# orb.resolve5initial5re+erences()

untuk mendapatkan sebuah re+erensi objek ke nama server 'ada kode# org.omg.CORB .Object re+ > orb.resolve5initial5re+erences(@Aame-ervice@)? -tring BAame-erviceC dide+inisikan untuk semua ORB CORB sehingga ORB dapat mengembalikan objek naming conteDt yang merupakan objek re+erensi untuk name service. =ode-kode sebelumnya merupakan kode-kode untuk menyiapkan server, setelahnya server tinggal menunggu invokasi dari klien ke ORB dengan kode Orb.run()? $<. *elloClient.java =lien CORB membutuhkan ORB lokal untuk proses marshaling dan kerja ""O'. -etiap klien menginstansiasi sebuah dan org.omg.CORB .ORB menginisialisasi ORB. ORB dideklarasikan dan diinisialisasi di dalam blok try-catch. ORB orb > ORB.init(args, null)? )ipanggil orb.resolve5initial5re+erences() untuk mendapatkan naming conteDt, ditulis dalam blok try-catch dengan kode# org.omg.CORB .Object objRe+ > orb.resolve5initial5re+erences(@Aame-ervice@)? -tring BAame-erviceC dide+inisikan untuk semua ORB CORB . =etika string tersebut dile,atkan maka ORB akan mengembalikan initial naming conteDt yang merupakan re+erensi objek ke name service =lien memanggil metode pada sisi server dan mencetaknya ke layar dengan kode -ystem.out.println(hello"mpl.*alo(B3anC))?

../ alan+an Pro&ram $. 0alankan terlebih dahulu *elo-erver.java %. =emudain jalankan *elloClient.java

Anda mungkin juga menyukai

  • Form Excel Inpassing1
    Form Excel Inpassing1
    Dokumen1 halaman
    Form Excel Inpassing1
    Mochammad Firdias F D
    Belum ada peringkat
  • Contoh Surat Izin
    Contoh Surat Izin
    Dokumen3 halaman
    Contoh Surat Izin
    Mochammad Firdias F D
    Belum ada peringkat
  • Contoh Undangan Tahlil1
    Contoh Undangan Tahlil1
    Dokumen1 halaman
    Contoh Undangan Tahlil1
    Mochammad Firdias F D
    Belum ada peringkat
  • Contoh Surat Izin
    Contoh Surat Izin
    Dokumen3 halaman
    Contoh Surat Izin
    Mochammad Firdias F D
    Belum ada peringkat
  • Komunikasi
    Komunikasi
    Dokumen6 halaman
    Komunikasi
    Bintang Alfian
    Belum ada peringkat
  • S
    S
    Dokumen5 halaman
    S
    Mochammad Firdias F D
    Belum ada peringkat
  • Baca Dulu
    Baca Dulu
    Dokumen1 halaman
    Baca Dulu
    Mochammad Firdias F D
    Belum ada peringkat
  • Larik
    Larik
    Dokumen6 halaman
    Larik
    Mochammad Firdias F D
    Belum ada peringkat
  • Crack
    Crack
    Dokumen1 halaman
    Crack
    Mochammad Firdias F D
    Belum ada peringkat
  • README
    README
    Dokumen1 halaman
    README
    Fahmi Wahyu Trihasno
    Belum ada peringkat