www.fatihkabakci.com

Personal Website and Computer Science TUR EN

JAVA IDL CORBA

Last update: 6/29/2015 4:53:00 AM

Yazan:Fatih KABAKCI

Bu yazının amacı, CORBA standardının Java teknolojisinde nasıl kullanıldığını açıklamaktır.

Günümüzde Java teknolojilerinin kullanımı ve yaygınlaşması gittikçe artmaktadır. Özellikle web uygulamalarında Javanın gücü gözle görülebilir bir şekilde etki yarattığı bilinmektedir. Ancak eski sistemler tarafından tasarlanan bazı web bileşenleri halen çalışmakta ve kullanılmaktadır. Dağıtık internet ortamında kullanılan bu bileşenlerin paylaşımı bu hususta önemli bir konu olarak göze çarpar. Nitekim J2EE uygulamalarında da bazı bileşenlere harici olarak erişmek isteyebilirsiniz. Bilindiği üzere CORBA (Common Object Request Broker Architecture) mimarisi, dağıtık ortamda platform bağımsız bileşen paylaşımı için tasarlanmış bir standarttır. Bu standardın Java Programlama Dilinde kullanımı Java IDL teknolojisi sayesinde mümkündür. Java bu protokole, kendi Java SE standardı içerisinde destek vermiştir. Java IDL sunucu ve istemci uygulamaları yazmak için, yalnızca JDK' ya sahip olmanız yeterlidir. Çünkü JDK kendi içerisinde bir IDL derleyicisi ve ORB mekanizması bulundurur ve size sadece uygulamanızı yazmanız kalır.

Aşağıda bir Java IDL uygulamasının nasıl yapılacağına dair örnek verilmektedir.

Bir Java IDL uygulaması için aşağıdaki temel adımlar işletilir.

1. IDL inşa etmek
2. Sunucu uygulamasını yazmak
3. İstemci uygulamasını yazmak
4. IDL, istemci ve sunucu dosyalarını derlemek
5. ORB' yi başlatmak
6. sunucu ve istemciyi başlatmak

Yukarıdaki temel adımların somut örneği aşağıdaki uygulamada gösterilmektedir. Sunucumuzda çalışan bir Java uygulaması için, eski tipte yazılmış HelloCorba adlı bir modülü kullanmak istediğimizi varsayalım. Bu maksatla aşağıdaki adımları gerçeklemeye çalışalım.

1. IDL Tanımlama - HelloCorba.idl

module ModuleHelloCorba
{
  interface HelloCorba
  {
  string helloCorba();
  oneway void shutdown();
  };
};

Yukarıda ilk olarak paylaşılacak HelloCorba arabirimi IDL dili kullanılarak tanımlanmaktadır. Bunun hali hazırda mevcut olduğunu varsayabilirsiniz.

2. Sunucu uygulaması

Asıl sorumlu olduğumuz sunucu uygulaması aşağıdadır. Burada HelloCorba somut örneği yaratılmakta ve Java nesnesine dönüşüm gerçekleşmektedir. Ardından uygulama sunucu ORB' ye bağlanarak hizmet vermesi sağlanır.

import ModuleHelloCorba.*;
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 HelloCorbaImpl extends HelloCorbaPOA {
  private ORB orb;

  public void setORB(ORB orb_val) {
    orb = orb_val; 
  }
    
  // implement helloCorba() method
  public String helloCorba() {
    return "\nHello corba !!\n";
  }
    
  // implement shutdown() method
  public void shutdown() {
    orb.shutdown(false);
  }
}

public class HelloCorbaServer {

  public static void main(String args[]) {
    try{
      // create and initialize the ORB
      ORB orb = ORB.init(args, null);

      // get reference to rootpoa & activate the POAManager
      POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
      rootpoa.the_POAManager().activate();

      // create servant and register it with the ORB
      HelloCorbaImpl helloCorbaImpl = new HelloCorbaImpl();
      helloCorbaImpl.setORB(orb); 

      // get object reference from the servant
      org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloCorbaImpl);
      HelloCorba href = HelloCorbaHelper.narrow(ref);
      
      // get the root naming context
      // NameService invokes the name service
      org.omg.CORBA.Object objRef =
          orb.resolve_initial_references("NameService");
      // Use NamingContextExt which is part of the Interoperable
      // Naming Service (INS) specification.
      NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

      // bind the Object Reference in Naming
      String name = "HelloCorba";
      NameComponent path[] = ncRef.to_name( name );
      ncRef.rebind(path, href);

      System.out.println("HelloCorbaServer ready and waiting ...");

      // wait for invocations from clients
      orb.run();
    } 
    
      catch (Exception e) {
        System.err.println("ERROR: " + e);
        e.printStackTrace(System.out);
      }
      System.out.println("HelloCorbaServer Exiting ...");
  }
}

3. İstemci uygulaması

Aşağıdaki istemci uygulaması, HelloCorba nesnesini talep eden uygulamadır. HelloCorba nesnesini aynı şekilde oluşturarak sunucudaki kodun çalıştırılmasını yetkilendirir ve sonuçları kendi ekranında görüntüler.

import ModuleHelloCorba.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class HelloCorbaClient
{
  static HelloCorba helloCorbaImpl;

  public static void main(String args[])
    {
      try{
        // create and initialize the ORB
    ORB orb = ORB.init(args, null);

        // get the root naming context
        org.omg.CORBA.Object objRef = 
        orb.resolve_initial_references("NameService");
        // Use NamingContextExt instead of NamingContext. This is 
        // part of the Interoperable naming Service.  
        NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
 
        // resolve the Object Reference in Naming
        String name = "HelloCorba";
        helloCorbaImpl = HelloCorbaHelper.narrow(ncRef.resolve_str(name));

        System.out.println("Obtained a handle on server object: " + helloCorbaImpl);
        System.out.println(helloCorbaImpl.helloCorba());
        helloCorbaImpl.shutdown();

    } catch (Exception e) {
          System.out.println("ERROR : " + e) ;
      e.printStackTrace(System.out);
      }
    }
}

4. IDL, sunucu ve istemci dosyalarını derlemek

Öncelikle komut satırından aşağıdaki gibi kaynak dosyaların bulunduğu dizine geçin. Örnekte kaynak dosyaları Windows ortamında C:\Users\fkabakci\Desktop\corba dizini altında toplanmıştır.

Java IDL Corba

Komut satırından kaynak dosyaların olduğu dizine geçtikten sonra, HelloCorba.idl dosyasını derlemek için aşağıdaki komutu koşun.

idlj -fall HelloCorba.idl

Java IDL Corba

Yukarıdaki komut çalışmaz ise, bilgisayarınızdaki JDK ayarlarının düzgün olduğundan emin olunuz.

HelloCorba.idl dosyasını derlediğinizde, C:\Users\fkabakci\Desktop\corba\ModuleHelloCorba dizini altında aşağıdaki sınıf dosyaları yaratılır.

Java IDL Corba

HelloCorbaPOA.java sınıfı sunucuya CORBA işlevselliği sağlayan soyut iskelet sınıftır.
_HelloCorbaStub.java sınıfı istemciye CORBA işlevselliği sağlayan somut sınıftır.
HelloCorba.java sınıfı IDL arabiriminin Java karşılığındaki halidir. Dönüştürülmüş kod aşağıdaki halini alır.

package ModuleHelloCorba;


/**
* ModuleHelloCorba/HelloCorba.java .
* Generated by the IDL-to-Java compiler (portable), version "3.2"
* from HelloCorba.idl
* 29 Haziran 2015 Pazartesi 04:13:37 EEST
*/

public interface HelloCorba extends HelloCorbaOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity 
{
} // interface HelloCorba


HelloCorbaHelper.java sınıfı CORBA nesnelerini cast etmeye yarayan narror() metodunu kullandırmaya yarar.
HelloCorbaHolder.java sınıfı HelloCorba.java arabiriminin public örneğini barındırır.
HelloCorbaOperations.java sınıfı helloCorba() ve shutdown() metotlarını içerir. Kod aşağıda gösterilmiştir.

package ModuleHelloCorba;


/**
* ModuleHelloCorba/HelloCorbaOperations.java .
* Generated by the IDL-to-Java compiler (portable), version "3.2"
* from HelloCorba.idl
* 29 Haziran 2015 Pazartesi 04:13:37 EEST
*/

public interface HelloCorbaOperations 
{
  String helloCorba ();
  void shutdown ();
} // interface HelloCorbaOperations


Yukarıda oluşan tüm kaynak dosyaları, istemci ve sunucu tarafında çalışan dosyalar ile birlikte derlemek için aşağıdaki komutu koşun.

javac *.java ModuleHelloCorba/*.java

Java IDL Corba

5. ORB' yi başlatmak

ORB' yi başlatmak için;

- Linux için orbd -ORBInitialPort 1050&
- Windows için start orbd -ORBInitialPort 1050

uygun komutlardan birini koştuğunuz takdirde aşağıdaki gibi ayrı bir pencere açılacaktır.

Java IDL Corba

Sunucu ve istemciyi başlatmak

Sunucu ve istemciyi başlatmak için aşağıdaki komutları koşun.

sunucu için -> java HelloCorbaServer -ORBInitialPort 1050 -ORBInitialHost localhost&
istemci için -> java HelloCorbaClient -ORBInitialPort 1050 -ORBInitialHost localhost

Java IDL Corba

Java IDL Corba

There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.