Java Idl Ykaragol Wwwjavadilicom

You might also like

Download as pdf
Download as pdf
You are on page 1of 14

m

o
i.c
JAVA IDL

dil
ja va

Araştırma Konusu :  JAVA IDL
w.

Öğrenci No : 20221699
Öğrencinin Adı : Yusuf
Öğrencinin Soyadı : KARAGÖL
e­Posta : yusufkaragol84@yahoo.com 
ww

1
m
İçindekiler :

1. İçindekiler
2. Java IDL nedir ?
a) CORBA nedir ?

o
b) Neden IDL ?
3. Java ve IDL
a) Java IDL API’leri
b) Java IDL araçları

i.c
c) Örnek ­1
d) Örnek ­2
4. Sonuç
5. Ekler
a) Açıklamalar
b) Sözlük
c) Java IDL eşleşmesi
6. Kaynaklar

dil
ja va
w.
ww

2
m
1. JAVA IDL NEDİR?

JavaTM IDL, Java platformuna CORBA yeteneklerini ekleyen teknolojidir. Standartları temel alan 
bir yapıyla, iş birlikteliği ve bağlanabilirlik sağlamaktadır. JavaTM IDL, dağıtık Java uygulamalarının, Object 
Management Group (OMG) tarafından tanımlanan IIOP ve IDL gibi endüstri standartlarını kullanarak uzak 

o
makinelerde işlemler başlatabilmelerini sağlar. IDL ilk olarak CORBA için tanımlanmıştır. Bu yüzden önce 
CORBA'ya değinelim.

i.c
a) “CORBA” nedir?

CORBA (Common Object Request Broker Architecture), OMG’nin (Object Management Group) 
internet üzerinden birlikte çalışan uygulamalar için tasarladığı alt yapıdır. 1991 yılında OMG tarafından 
duyuruldu. Herhangi bir satıcının, herhangi bir işletim sistemi üzerinde çalışan, herhangi bir dille yazılmış 
CORBA tabanlı bir uygulaması, IIOP protokolü üzerinden; başka herhangi bir satıcının, herhangi bir işletim 
sistemi üzerinde çalışan, herhangi bir dille yazılmış bir başka CORBA tabanlı uygulaması ile iş birliği 
içinde çalışabilir.

dil
Dağıtık işlemler, bilgisayar alanında pek çok çözümde iyi bir yol sağlamaktadır. Paralel ve hızlı bir 
şekilde işlem yapmaları; hataya karşı daha dirençli olmaları gibi sebepler de dağıtık işleyen yapılara 
yönelmeye sebep olmuştur. Dağıtık işlemi sağlamak için kimi çözümler çıkmıştır. Bunlara soketler ve 
dağıtık işlem yapmak için tasarlanmış dilleri örnek verebileceğimiz gibi, daha üst seviyede CORBA ve RPC 
gibi yapıları da örnek verebiliriz. CORBA, RPC ile pek çok benzerliğe sahiptir. Yalnız RPC daha çok 
va
prosedürel dillere yönelik iken; CORBA temel olarak nesneye yönelik dillere göre tasarlanmıştır.

b) Neden IDL?

 CORBA'nın temelinde nesneye yönelimli dillerin uzaktan yordam çağırısı yapmasını sağlayan 
yapı yatmaktadır. Bu çağrıyı yapabilmesi için hem sunucu tarafın hem de istemci tarafın ortak bir arayüzde 
anlaşması lazımdır. Bu arayüzü dillerden ve platformlardan bağımsız bir şekilde tanımlayabilmek için, 
ja

CORBA bir tanımlama dili kullanmaktadır. Bu dile Interface Definition Language (IDL) denmektedir. Bu 
dil sayesinde nesnenin arayüzü tanımlanır. IDL derleyicileri, bu tanımı, istemci tarafında "stub" oluşturmak 
için, sunucu tarafta "skeleton" oluşturmak için kullanırlar. Üretilen bu kodları kullanarak, yapılan yordam 
çağırıları, sanki yereldeki bir nesneden çağrı yapılıyor gibi kullanılabilir. 
w.

İşte bu yüzden, IDL, CORBA için anahtar özelliklerden birisidir. CORBA’yı destekleyen her dil, 
kendi IDL eşleştirmesine sahiptir. Bu eşleştirmeler, OMG IDL’de tanımlanan CORBA türleri ile Java 
dilinin türleri arasında gerçekleşir. Hazırlanan idl dosyaları, bu eşleştirmeler baz alınarak, Java'da “idlj” 
(idl­to­java) derleyicisi ile Java kodlarına çevirilir. Ardından da elde edilen Java arayüzlerini gerçekleştiren 
kodlar ile arayüzleri çağıracak olan kodlar yazılır. Bu sayede sunucu tarafında gövde kısmı bulunan kodlar, 
istemci tarafındaki iskeletleri aracılığıyla işletilir.
ww

Burada bir noktaya dikkat çekmek gerekmektedir: 
Java IDL teknolojisi, programlarını Java diliyle yazmak isteyen CORBA programcıları için 
CORBA Interface Definition Language tabanlı bir yapı sağlar. Bu, CORBA programlamada Java'yı 
desteklemek için gerekli standart yoldur. Bu yol CORBA programlamada alışılagelmiş olan, C++, COBOL 
gibi dillerdekine benzer bir yapının Java yoluyla yapılmasıdır.

3
Java RMI over Internet Inter­ORB Protokol teknolojisi ("RMI­IIOP") ise IIOP üzerine Java RMI 
arayüzü ile program geliştirmek isteyen Java programcıları için daha uygundur. RMI­IIOP, farklı dillerde 

m
yazılmış CORBA nesneleri ile de iş birliği içinde çalışabilir. Ancak bunun için bütün uzak arayüzlerin, Java 
RMI arayüzü olarak tanımlanmış olması gerekmektedir. EJB remote object model, Java RMI tabanlı bir 
teknoloji olduğu için; bu konu biraz da EJB kullanan programcıların ilgi alanına girmektedir.

Sonuç olarak:

o
Java IDL, CORBA gibi standart haline gelmiş, dağıtık bir nesne modelini temel alması nedeniyle; 
aynı ağdaki fakat farklı platformlardaki nesnelerin birbirleriyle iletişim içinde çalışmasına olanak 
tanımaktadır. Gene bu sayede, nesnelerin hangi dille yazılmış olduğu da önemini kaybetmekte ve nesneler 
hangi dillerde yazıldığı önemsenmeksizin işbirliği içinde çalışmaktadır.

i.c
2.  JAVA ve IDL

Yukarıda bahsedildiği gibi, bir dilin CORBA'yı kullanabilmesi için o dilin IDL denilen arayüz 
tanımlama diliyle eşleşmelere sahip olması lazımdır. CORBA nesneleri OMG IDL'de (Object Management 
Group Interface Definition Language) tanımlanmıştır. 

a) Java IDL API'leri

org.omg.CORBA paketi:
dil
OMG CORBA API'lerinin JAVA programlama diline eşleşmesini sağlar.
org.omg.CosNaming paketi:
Java IDL için “naming service” sağlar.
org.omg.PortableServer paketi:
va
Uygulamanızın sunucu tarafının taşınabilir olması için sınıflar ve arayüzler tanımlar.
org.omg.CORBA.ORB paketi:
 CORBA Object Request Broker özellikleri için API'ler tanımlar

b) Java IDL Araçları
ja

idlj: Verilen bir IDL dosyasından, Java kodları üreten araç.
Bu araç sayesinde, idl ile yazdığınız arayüzün java kodları ile eşdeniği olan kodlar üretirsiniz. 
“Deneme.idl” isimli idl dosyanızdan bağlantıyı sağlayacak java kodları üretmek için 
> idlj Deneme.idl
demeniz yeterlidir. Bu size istemci tarafında kullanacağınız kodları üretecektir. Sunucu tarafında 
w.

kullanacağınız kodu üretmek için:
> idlj ­fserver Deneme.idl
demeniz gerekmektedir.
Parametre yapısı ­f<side> şeklindedir. side olarak; client, server ve all yazabilirsiniz.

orbd: « The object request broker daemon. » Corba ortamındaki sunuculardaki kalıcı nesnelerin, istemciler 
tarafından bulunup, kullanılabilmesini sağlar. Başlatmak için:
ww

> orbd ­ORBInitialPort 1050 ­ORBInitialHost localhost &
komutunu kullanabilirsiniz.

4
m
c) Örnek ­1

Java IDL, bir ağ üzerinde birbirleriyle ilişki içinde bulunan dağıtık nesnelerin çalışması için kullanılan bir 
teknolojidir. Java IDL, nesnelerin hangi programlama dillerinde yazılmış olmasına bakmaksızın 
birbirleriyle iletişim içinde bulunmasını sağlamaktadır. Bunun mümkün olmasını sağlayan Java IDL'in 
CORBA temelli olmasıdır. CORBA, dağıtık nesneler için bir endüstri standardı haline gelmiştir. 

o
CORBA'nın anahtar özelliklerinden biri olan IDL, programlama dillerinden bağımsız bir arayüz tanımlama 
dilidir. CORBA'yı destekleyen her programlama dili kendi IDL eşleştirmesine sahiptir. Adından da 
anlaşılacağı üzere Java IDL de, Java eşleştirmelerini sağlamaktadır.
Farklı programlardaki nesneler arasında etkileşim sağlamak için, Java IDL, ORB sağlamaktadır. (Object 

i.c
Request Broker). ORB, Java IDL uygulamaları ile diğer CORBA uyumlu uygulamalar arasında  alt düzey 
iletişimi sağlayan bir sınıftır.

Bu örnekte, Java IDL kullanılarak dağıtık CORBA uygulaması yazmak için temel adımlar anlatılacaktır. 
Tek işlevi “Hello World!” yazmak olan bir giriş programı yazılacaktır. Bu programda, tek işlev olacak, o da 
geriye içeriği “Hello World!” olan bir String nesnesi yollayacaktır.
Dağıtık nesneler arasındaki ilişki genelde iki taraflıdır: İstemci taraf, sunan taraf. Sunan taraf, bir “uzak 

dil
arayüz” (remote interface) sunar ve istemci de bu uzak arayüzden yordam çağrısında bulunur. Bu ilişki 
biçimi, genelde tüm dağıtık nesne standartlarında benzer şekildedir. Yalnız, bu bağlamda, sunucu ve istemci 
terimleri uygulama seviyesindeki bir etkileşimi değil, nesne seviyesindeki bir etkileşimi belirtmektedir. Bu 
yüzden, bir uygulama içindeki kimi nesneler ile sunucu görevi üstlenirken; kimi nesneleri de başka 
uygulamalardan istemde bulunmaktadır.
Bu yapıda, istemci tarafındaki uygulama uzaktaki nesneye bir referansa sahiptir. Nesne referansı, bir “stub” 
yordama sahiptir. Bu yordam uzaktan çağrılacak yordamın yerinde durmaktadır ve ORB'ye bağlıdır. Ne 
zamanki bu nesneden bir istemde bulunulursa, bu nesne ORB sayesinde sunucudaki yordamı çağırır.
va
Sunucu tarafında ise, ORB, bir “skeleton” kod kullanarak uzaktan yapılan çağrıyı yorumlayıp, yereldeki bir 
nesnenin bir yordamını çağırır. “skeleton”, çağrıyı ve parametrelerini yorumlayarak, sunulacak nesnenin 
yordamını çağırır. Nesne yordamından geri dönüldüğünde, sonuçları veya hataları çevirip, ORB üzerinden 
istemciye geri yollar.
ORB'ler arasındaki iletişim, IIOP (the Internet Inter­ORB Protocol) denilen bir protokol sayesinde 
sürdürülür. IIOP, standart TCP/IP tabanlı bir Internet protokolüdür, CORBA uyumlu ORB'lerin nasıl bilgi 
aktaracağını tanımlar. CORBA ve IDL gibi, IIOP standartları da OMG tarafından tanımlanmıştır.
ja

Geliştirim Süreci

Burada, yukarıda da bahsettiğimiz gibi basit bir giriş programı yazacağız. Basit bir tasarımı olmasına 
rağmen, bu program CORBA'ya giriş için oldukça kapsamlıdır. Aşağıdaki adımlar, Java IDL ile dağıtık 
w.

uygulamalar geliştirirken izlenecek ana adımları içermektedir.

i. Uzak arayüzü tanımlamak

OMG'nin Interface Definition Language (IDL) kullanarak uzak nesneler için bir arayüz hazırlayın. Bu 
kodları Java diliyle değil de IDL ile yazmamızın sebebi, bu IDL tanımlarının, idlj derleyicisi sayesinde Java 
kodlarına dönüştürülecek olmasıdır. idlj derleyicisi bizim için, ORB altyapısı hazır stub ve skeleton kodları 
ww

üretecektir. IDL ile bunu tanımlamanın esas sebebi de CORBA uyumlu bir başka dilde program yazan 
geliştiricilerin de arayüzümüzü görmesidir.
Eğer zaten hazırdaki bir CORBA servisi için istemci yazıyorsanız; bu idl oluşturulmuş ve size verilmiştir. 
Bu durumda yapacağınız, bu idl'den istemci kodlarını oluşturmaktır.
Bizim örneğimiz için yazacağımız idl şu şekildedir:

5
module HelloApp
{

m
  interface Hello
  {
    string sayHello();
    oneway void shutdown();
  };
};

o
Bu kodu, “Hello” ismindeki dizinin altındaki “Hello.idl” dosyasına kaydedin. Bu idl'den “stub” ve 
“skeleton” kodları oluşturacağız. 

i.c
ii.  Hello.idl'i Java'ya çevirmek

idlj, OMG IDL dosyalarını okuyup, yorumlayarak, gerekli Java dosyalarını oluşturur. idlj derleyicisi, 
varsayılan olarak sadece istemci tarafındaki kodları üretir. Eğer her iki taraftaki kodları üretmek istiyorsanız 
(örneğimizde yapacağımız gibi), idlj derleyicisine “­fall” parametresini de vermeniz gerekmektedir.
Buna göre Hello dizini içinde vereceğiniz, 
idlj ­fall Hello.idl

dil
komutu ile gerekli 6 dosyayı oluşturacaksınız. Eğer kabuk, idljyi bulamadığına dair bir uyarı ile geri 
dönerse; JAVA_HOME'daki “bin” dizininin altına bakın.

Derleyicinin çıktıları:
HelloPOA.java: Sunucu tarafı için temel CORBA işlevlerini içeren “skeleton” kod. Sunulacak nesneye 
gelen istemleri, bu nesne karşılar ve sunulacak nesneye sevkeder. Sunulacak olan nesnenin sınıfı (servant), 
bu sınıftan türeyecek.
_HelloStub.java: Bu sınıf istemci tarafında, CORBA işlevlerini yerine getiren; “stub” sınıf. Hello.java 
va
arayüzünü uygular.
Hello.java: Yazdığımız IDL kodunun, Java'ya çevrilmiş hali. Bu arayüz standart CORBA işlevlerini 
desteklemektedir ve “HelloOperations” arayüzünden türetilmiştir.
HelloHelper.java: Bu sınıf kimi yardımcı işlevleri yerine getirir. CORBA nesne referanslarını asıl türlerine 
dönüştürmek gibi yardımcı işlevleri vardır.
HelloHolder.java: Bu sınıf, Hello sınıfının bir nesnesini tutmaktadır. 
org.omg.CORBA.portable.OutputStream ve org.omg.CORBA.portable.InputStream gibi CORBA'nın 
ja

desteklediği, ancak JAVA semantiğine pek oturmayan argümanlar için işlevler sunar.
HelloOperations.java: Bu arayüz, Hello.idl'de tanımladığımız yordamları içerir. 

Buradan da anlaşılacağı üzere, IDL arayüzünü hazırlayarak, dağıtık ortam için gerekli bütün işlemleri 
yapmış oluyoruz. Bundan sonra geriye sunucu ve istemci sınıflarını hazırlamak kalıyor.
w.

iii. Sunucu Kodunu Yazmak

Sunucu kodunu yazarken yapacağımız işlemler iki farklı kategoridedir. Birincisi hizmetçi nesnenin 
(servant) yazılması; ikincisi de sunucu kodunun, yani main() içeren sınıfın yazılması.
Hizmetçi nesne, « HelloImpl », HelloPOA'dan türetilecek ve Hello.idl'de tanımlanan her yordam için bir 
gövde içerecektir. Bu yordamlar, (ORB ile temas eden kesim « skeleton » tarafından sağlandığı için) 
ww

sıradan Java yordamlarından farklı değildir. 
Sunucu sınıfındaki main() yordamında:
• ORB nesnesi üretilir ve ilklendirilir.
• root POA'ya bir referans alınır ve POAManager aktifleştirilir.
• Hizmetçi sınıfından bir nesne oluşturulur, ORB'a gerekli bilgileri geçilir.
• Yeni CORBA nesnesi « register » edilir.
• İstemciden gelecek nesne çağrıları için beklemeye başlanılır.

6
HelloServer.java dosyasına aşağıdaki kodu yapıştırın.

m
//Copyright (c) 1996­2002 Sun Microsystems, Inc. All Rights Reserved.
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

o
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;

import java.util.Properties;

i.c
class HelloImpl extends HelloPOA {
  private ORB orb;

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

dil
  // implement sayHello() method
  public String sayHello() {
    return "\nHello world !!\n";
  }
    
  // implement shutdown() method
  public void shutdown() {
    orb.shutdown(false);
  }
va
}

public class HelloServer {

  public static void main(String args[]) {
    try{
      // create and initialize the ORB
ja

      ORB orb = ORB.init(args, null);

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

      rootpoa.the_POAManager().activate();

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

      // get object reference from the servant
      org.omg.CORBA.Object ref = 
ww

rootpoa.servant_to_reference(helloImpl);
      Hello href = HelloHelper.narrow(ref);
          
      // get the root naming context
      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);

7
      // bind the Object Reference in Naming

m
      String name = "Hello";
      NameComponent path[] = ncRef.to_name( name );
      ncRef.rebind(path, href);

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

o
      // wait for invocations from clients
      orb.run();
    } 
        

i.c
      catch (Exception e) {
        System.err.println("ERROR: " + e);
        e.printStackTrace(System.out);
      }
          
      System.out.println("HelloServer Exiting ...");
        
  }

dil
}

iv. İstemci Kodunu Yazmak

İstemci, sunucudaki sunulan nesneyi kullanacak olan nesnedir. Sunucudaki nesneye erişmek için gerekli 
yapıları kullanır ve elindeki uzak nesneye ait arayüz sayesinde, uzak nesneyi yönetir. Yukarıda yazılmış 
olan sunucu ile uyumlu çalışacak bir istemci için:
va
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class HelloClient
{
  static Hello helloImpl;
ja

  public static void main(String args[])
    {
      try{
        // create and initialize the ORB
w.

        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);
ww

 
        // resolve the Object Reference in Naming
        String name = "Hello";
        helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));

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

8
        } catch (Exception e) {

m
          System.out.println("ERROR : " + e) ;
          e.printStackTrace(System.out);
          }
    }

o
Bu kodu yazıp, « HelloClient.java » adıyla kaydedin. Bu kod bir ORB nesnesi oluşturup, HelloServer'a 
ulaşır. Oradaki, Hello arayüzüne uygun bir nesneye erişir. Ve sanki bu nesne kendisiyle aynı sanal makine 
üzerindeymişçesine bu nesneyi kullanır.

i.c
v. Uygulamayı Çalıştırmak

Yukarıdaki sunucu ve istemci kodlarını çalıştırmak için önce derlememiz gerekmektedir. Hello dizini altına 
idlj tarafından üretilmiş « HelloApp » dizinini kopyalayın. HelloClient.java dosyasını da Hello dizinine 
kopyalayın. Ardından aşağıdaki komut ile derleyin:
>  javac HelloClient.java HelloApp/*.java

> javac HelloServer.java HelloApp/*.java 
dil
Yukarıdaki dizin yapısının aynısını sunucuyu derlemek için oluşturun. {Yalnız HelloClient.java yerine 
HelloServer.java dosyası olacak şekilde.} Ardından aşağıdaki komut ile derleyin:

Derleme işlemlerinden sonra, çalıştırma işlemlerine geçebiliriz:
> orbd ­ORBInitialPort 1050 ­ORBInitialHost localhost &
va
bu komutla « Object Request Broker Daemon »ı çalıştırırız. Burada 1050 yerine başka bir port da 
belirtebilirsiniz. Ancak, unix tabanlı sistemlerde genelde 1024'ün altı sadece root'un kullanım iznine 
verildiğinden bu portları kullanamayabilirsiniz.
« orbd » yazılımı, JAVA_HOME dizininizin altındaki bin dizininde bulunmaktadır.

Sunucuyu çalıştırmak için:
>  java HelloServer ­ORBInitialPort 1050 ­ORBInitialHost localhost&
İstemciyi çalıştırmak için:
ja

>  java HelloClient ­ORBInitialPort 1050 ­ORBInitialHost localhost
komutunu kullanın.
İstemci, konsola, Hello world!! yazacaktır.

d) Örnek ­2
w.

Bu örnek, yukarıdaki örnek ile aynı yapıda olmasına rağmen; yukarıdaki örnekle farkı uzak nesneye erişimi 
INS URL'i ile yapmasıdır. İki örneğin de geliştirme şekli tamamen aynı olduğu için bu ayrıntılara 
girilmeyecektir.
IDL dosyası:
// Tek yordamlık basit bir arayüz
interface Service {
ww

    void ping();
};

Bu dosyayı derlemek için, idlj'yi kullanacağız.
> idlj ­fall  Service.idl

9
Sunucu kodu olarak, aşağıdaki kodu INSServer.java kütüğüne yazın:

m
// Copyright (c) 1996­2002 Sun Microsystems, Inc. All Rights Reserved.
import java.util.Properties;
import org.omg.CORBA.Object;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Policy;
import org.omg.PortableServer.POA;

o
import org.omg.PortableServer.*;
import org.omg.PortableServer.Servant;

public class INSServer {
    public static void main( String args[] ) {

i.c
        try {
            Properties properties = System.getProperties( );
           
            properties.put( "com.sun.CORBA.POA.ORBPersistentServerPort",
                Integer.toString(1060) );

            ORB orb = ORB.init( args, properties );

dil
            ServiceImpl servant = new ServiceImpl( );
            POA rootPOA = POAHelper.narrow( 
orb.resolve_initial_references( "RootPOA" ));
            rootPOA.the_POAManager().activate();
            rootPOA.activate_object( servant );

            ((org.omg.PortableInterceptor.ORBInitInfoOperations)orb).
                register_initial_reference( 
va
                "PingService", rootPOA.servant_to_reference(servant) );

            System.out.println( "INS Server is Ready..." );
             
            orb.run( );
        } catch ( Exception e ) {
             System.err.println( "Error in setup : " + e );
        }
ja

    } 
}

Hizmet verecek nesnemiz (servant) için aşağıdaki kodu ServiceImpl.java kütüğüne ekleyin:
// Hizmet verecek sınıf
w.

public class ServiceImpl extends ServicePOA {
    public void ping( ) {
        System.out.println( "PingService.ping called..." );
    }
}

“ORBPeristentServerPort” ile INS isteklerini dinlemek için bir port açılıyor ve sırasıyla:
ww

ORB nesnesi ilklendiriliyor.
POAManager aktifleştiriliyor.
Hizmetçi nesne oluşturuluyor.
Oluşturulan hizmetçi nesne, “PingService” adıyla sunulmak için kaydediliyor.
İstemciden gelecek istekler için beklemeye başlanıyor.

1
İstemci tarafında ise:
“PingService” referansı ile nesneye ulaşıp, nesnenin “ping()” yordamını çağıracağız.

m
Aşağıdaki kodu INSClient.java kütüğüne kaydedin:

import org.omg.CORBA.ORB;

public class INSClient {

o
    public static void main( String args[] ) {
        try {
            ORB orb = ORB.init( args, null );
            org.omg.CORBA.Object object =orb.resolve_initial_references(

i.c
                "PingService" );

            Service insService = ServiceHelper.narrow( object );

            insService.ping( );
            System.out.println( "The server has been pinged" );
            
        } catch ( Exception e ) {

dil
            System.err.println( "Exception in INSClient " + e );
            e.printStackTrace( );
        }
    }
}

Bütün kodu derlemek için:
> javac *.java
va
komutunu kullanabilirsiniz.
> java INSServer &
komutuyla sunucu başlatılır,
> java INSClient ­ORBInitRef PingService=corbaloc:iiop:1.2@localhost:1060/PingService
bu komutla da istemci başlatılır.
İstemci ekranında:
“The server has been pinged”
ja

Sunucu ekranında:
“PingService.ping called...” yazdığını göreceksiniz.

İstemci isteği yaptıktan sonra kapanırken, sunucuyu el ile kapatmanız gerekmektedir.
w.

4. Sonuç

Yazılım geliştirirken, idl dosyasını oluşturduktan ve idlj derleyicisi ile bu dosya derlendikten sonra 
. sunucu taraf için:
Üretilen POA sınıfından türetilmiş bir hizmetçi nesne ile bu nesneyi sunacak olan main() 
yordamına sahip sunucu sınıfını,
ww

. istemci taraf için:
main() yordamına sahip ve uzak nesneyi kullanan bir istemci sınıfını,
yazmak yeterli olacaktır.

Ancak, görüldüğü üzere, Java IDL, kendi kendine ayrı bir teknoloji olmaktan ziyade; var olan 
CORBA teknolojisinin Java platformunda kullanılmasını sağlayan bir teknolojidir. Bu yüzden Java IDL'i 
kullanmak için öncelikle CORBA hakkında fikir sahibi olmanız gerekmektedir. Daha önce de belirttiğimiz 
gibi bu teknoloji, CORBA programcılarının Java dilini kullanmalarını sağlamak içindir.

1
5. Ekler

m
a) Açıklamalar

ORB, Object Request Broker'ın kısaltmasıdır. ORB'ler, işlenen veri yapılarının byte dizilerine 
dönüşüp, ağ üzerinden iletilmesi ve bu bayt dizilerinin tekrar veri yapılarına dönüştürülmesi işini yaparlar. 

o
Buna marshalling veya serialization denir.

IIOP,  “Internet Inter­ORB Protocol”ün kısaltması olup, CORBA'nın önemli bir parçasıdır. 
GIOP'nin TCP/IP eşleştirmelerine sahiptir.

i.c
GIOP, “General Inter­ORB Protocol”ün kısaltmasıdır. ORB'lerin iletişim için kullanabileceği soyut 
bir protokoldür. Mesaj türlerini ve formatlarını belirler. 

POA, “Portable Object Adapter” kelimelerinin kısaltmasıdır. Farklı ORB'lar üzerinde taşınabilen 
nesneler yazılmasını, kalıcı nesnelerin desteklenmesini, tek bir hizmetçi nesnenin birden çok istemciye 
eşanlı hizmet vermesini sağlar.

dil
OMG, “Object Management Group” kelimelerinin kısaltmasıdır. Dünya çapında 700'ün üstünde 
üyesi bulunan, nesne­yönelimli yazılım geliştirme konusunda standartları oluşturmaya çalışan kuruluş. 
Üyeleri içinde platform üreticileri, nesne­yönelimli veri tabanı yöneticileri, yazılım araçları geliştiricileri ve 
yazılım satıcıları bulunmaktadır. CORBA standartlarını da OMG belirlemiştir.

“naming service”, CORBA nesnelerinin isimlendirilmesini sağlayan CORBA servisi.
va
b) Sözlük

interface : arayüz
remote interface : uzak arayüz
implement : uygulamak
method : yordam
ja

distributed : dağıtık
class : sınıf
object : nesne
instance : nesne
skeleton : ?
w.

stub : ?
client : istemci
server : sunucu
servant : hizmetçi nesne
register : ?
naming service : ?
ww

1
c) Java­IDL Eşleşmesi

m
IDL Type Java Type
module package 
boolean boolean

o
char, wchar char
octet byte
string, wstring java.lang.String

i.c
short, unsigned short short
long, unsigned long int
long long, unsigned long long long
float float
double
fixed
enum, struct, union
sequence, array
dil double
java.math.BigDecimal
class
array
va
interface (non­abstract) signature interface and an operations 
interface, helper class, holder class
interface (abstract) signature interface, helper class, holder 
class
constant (not within an interface) public interface
ja

constant (within an interface) fields in the Java signature interface for 
non­abstract, or the sole Java interface for 
abstract
exception class
w.

Any org.omg.CORBA.Any
type declarations nested within interfaces "scoped" package
typedef helper classes 

pseudo objects pseudo interface
ww

readonly attribute accessor method
readwrite attribute accessor and modifer methods
operation method 

1
6. Kaynaklar :

m
1.  
http://java.sun.com/j2se/1.4.2/docs/guide/idl/
 
2.  http://www.corba.org/ 
3.  
http://en.wikipedia.org 
4.  
http://www.omg.org/  

o
5.  
http://www.omg.org/gettingstarted/corbafaq.htm   

i.c
dil
ja va
w.
ww

You might also like