CORBA, Hello World

CORBA (Common Object Request Broker Architecture) merupakan arsitektur standar untuk sistem terdistribusi berbasis object. CORBA memungkinkan banyak object yang terdistribusi untuk saling berhubungan, singkat kata, CORBA adalah semacam middleware yang dihasilkan oleh sebuah konsorsium yang bernama OMG (Object Management Group). Dari salah satu sumber disebutkan bahwa OMG adalah sebuah konsorsium terbuka yang terdiri dari kurang lebih 700 perusahaan yang bekerja sama untuk mendefinisikan standar komputasi object, dengan demikian object CORBA menjadi dapat ditulis dengan beberapa bahasa pemrograman yang didukung oleh perusahaan-perusahaan tersebut, diantaranya C, C++, Java, Ada atau SmallTalk. Selain itu object CORBA juga dapat berada pada berbagai platform sistem operasi seperti Solaris, Linux, Windows, OpenVMS, HP-UX dan AIX juga beberapa platform lainnya.

Sistem CORBA didesain agar antar sistem dapat saling berinteraksi satu sama lainnya dengan melalui suatu objek bus yang bernama ORB (Object Request Broker). Melalui ORB inilah objek–objek yang terletak di local atau di remote pada sistem terdistribusi berbasis CORBA saling berkomunikasi. Berikut ini adalah beberapa bagian utama pendukung CORBA:

  • ORB, sebagai perantara bagi object untuk saling berhubungan, sebagai responder bagi aplikasi atau ORB lainnya
  • CORBA Services, sebagai penyedia layanan CORBA yang berjalan pada level sistem (daemon)
  • CORBA Facilities, sebagai penyedia layanan CORBA yang berjalan pada level aplikasi
  • Bussiness Object, yaitu obyek utama dalam sistem berbasis object

Sebuah sistem berbasis CORBA yang memiliki kemampuan berinteraksi dengan berbagai object yang dibangun diatas platform yang beragam, menggunakan sebuah interface yang dapat dimengerti oleh berbagai platform tersebut, interface tersebut dikenal dengan Interface Definition Language (IDL). IDL dikembangkan untuk menyediakan fungsi khusus, yaitu agar dapat digunakan untuk mendefinisikan antarmuka terhadap layanan yang disediakan oleh sistem terdistribusi tersebut. Disini kita akan mencoba CORBA sederhana dengan menggunakan Java, sebagaimana yang sudah diuraikan diatas, maka langkah pertama yang harus dilakukan adalah dengan membuat IDL-nya terlebih dahulu:

$ vi Hello.idl
kemudian tuliskan baris berikut:
module HelloApp {
   interface Hello {
      string sayHello();
      oneway void shutdown();
   };
};
Selanjutnya adalah melakukan kompilasi file IDL tersebut, dengan Java dapat digunakan program IDLJ yang terdapat dalam distribusi Sun JDK:
$ idlj -fall Hello.idl

Setelah proses kompilasi selesai, akan dihasilkan file-file sebagai berikut:
HelloPOA.java, adalah class abstract yang menyediakan dasar fungsionalitas server CORBA
_HelloStub.java, adalah class yang menyediakan fungsionalitas untuk client CORBA
Hello.java, adalah interface yang menyediakan fungsionalitas dasar obyek CORBA yang terdefinisi dalam file IDL
HelloHelper.java, adalah class yang berfungsi untuk membaca dan menulis tipe data ke streams CORBA
HelloHolder.java, adalah class yang memberikan delegasi ke metode dari class Helper untuk melaksanakan membaca dan menulis
HelloOperations.java, adalah interface yang mengandung metode sayHello() dan shutdown()
Pindahkan file-file tersebut kedalam sebuah folder untuk memudahkan kompilasi berikutnya. Selanjutnya adalah pembuatan class server dan client, dimana pada server terdiri dari dua class yaitu server dan servant yang merupakan implementasi dari interface IDL Hello.java.
$ vi Server.java
kemudian tuliskan baris berikut:
import HelloApp.*;   // folder hasil kompilasi file IDL
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;

class HelloImpl extends HelloPOA {   // servant

   private ORB orb;

   public void setORB(ORB orb_val) {
      orb = orb_val;
   }

   public String sayHello() {   // implementasi dari method sayHello()
      return "Hello World!";
   }

   public void shutdown() {   // implementasi dari method shutdown()
      orb.shutdown(false);
   }
}

public class Server {   // server

   public static void main(String args[]) {
      try{
         ORB orb = ORB.init(args, null);   // membuat dan menginisialisasi ORB
         POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
         rootpoa.the_POAManager().activate();   // aktifkan POAManager
         HelloImpl helloImpl = new HelloImpl();   // buat servant dan register-kan ke ORB
         helloImpl.setORB(orb);
         org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);   // referensi obyek dari servant
         Hello href = HelloHelper.narrow(ref);
         org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");   // service name
         NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
         String name = "Hello";
         NameComponent path[] = ncRef.to_name( name );
         ncRef.rebind(path, href);
         System.out.println("Server aktif..");
         orb.run();   // tunggu permintaan dari client
      } catch (Exception e) {
         System.err.println("ERROR: " + e);
         e.printStackTrace(System.out);
      }
      System.out.println("Server nonaktif..");
   }
}
Kompile dengan perintah:
$ javac Server.java HelloApp/*.java
Selanjutnya adalah pembuatan program client:
$ vi Client.java
dan tuliskan baris berikut:
import HelloApp.*;   // folder hasil kompilasi file IDL
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class Client{

   static Hello helloImpl;

   public static void main(String args[]){
      try{
         ORB orb = ORB.init(args, null);      // inisialisasi ORB
         org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");      // service name
         NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
         String name = "Hello";
         helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
         System.out.println("object server handling : \n" + helloImpl);
         System.out.println(helloImpl.sayHello());
         helloImpl.shutdown();
      } catch (Exception e) {
         System.out.println("ERROR : " + e) ;
         e.printStackTrace(System.out);
      }
   }
}
Kompile dengan perintah:
$ javac Client.java
Saat ini program sudah siap, langkah berikutnya adalah menjalankan program server dengan:
$ orbd -ORBInitialPort 1050 -ORBInitialHost localhost
$ java Server -ORBInitialPort 1050 -ORBInitialHost localhost
Setelah program server jalan dan tampil pesan bahwa server sudah aktif, jalankan program client:
$ java Client -ORBInitialPort 1050 -ORBInitialHost localhost
Jika berhasil, maka Anda sudah berhasil membuat aplikasi dengan CORBA.. :)