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:
module HelloApp {
interface Hello {
string sayHello();
oneway void shutdown();
};
};
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..");
}
}
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);
}
}
}
