Java Idl Ykaragol Wwwjavadilicom

  • Uploaded by: www.javadili.com
  • 0
  • 0
  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Java Idl Ykaragol Wwwjavadilicom as PDF for free.

More details

  • Words: 3,047
  • Pages: 14
m i.c o

ww w. ja

va

dil

JAVA IDL

Araştırma Konusu Öğrenci No Öğrencinin Adı Öğrencinin Soyadı e­Posta

:  JAVA IDL : 20221699 : Yusuf : KARAGÖL : [email protected] 

1

3.

4. 5.

m

ww w. ja

va

6.

İçindekiler Java IDL nedir ? a) CORBA nedir ? b) Neden IDL ? Java ve IDL a) Java IDL API’leri b) Java IDL araçları c) Örnek ­1 d) Örnek ­2 Sonuç Ekler a) Açıklamalar b) Sözlük c) Java IDL eşleşmesi Kaynaklar

dil

1. 2.

i.c o

İçindekiler :

2

m

1.

JAVA IDL NEDİR?

i.c o

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  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.

a) “CORBA” nedir?

dil

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.

b) Neden IDL?

va

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  prosedürel dillere yönelik iken; CORBA temel olarak nesneye yönelik dillere göre tasarlanmıştır.

ww w. ja

 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,  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.  İş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.

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

m

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  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.

i.c o

Sonuç olarak: 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. 2.  JAVA ve IDL

a) Java IDL API'leri

dil

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. 

va

org.omg.CORBA paketi: 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: 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

ww w. ja

b) Java IDL Araçları

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  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: > orbd ­ORBInitialPort 1050 ­ORBInitialHost localhost & komutunu kullanabilirsiniz.

4

m

c) Örnek ­1

i.c o

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.  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  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.

ww w. ja

va

dil

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  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. 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. 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  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ı  ü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

i.c o

m

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

Bu kodu, “Hello” ismindeki dizinin altındaki “Hello.idl” dosyasına kaydedin. Bu idl'den “stub” ve  “skeleton” kodları oluşturacağız.  ii.  Hello.idl'i Java'ya çevirmek

dil

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 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.

ww w. ja

va

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  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  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.

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

m

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

import java.util.Properties; class HelloImpl extends HelloPOA {   private ORB orb;

va

dil

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

i.c o

//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.*; import org.omg.PortableServer.*; import org.omg.PortableServer.POA;

public class HelloServer {

ww w. ja

  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       HelloImpl helloImpl = new HelloImpl();       helloImpl.setORB(orb);        // get object reference from the servant       org.omg.CORBA.Object ref =  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

m

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

i.c o

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

iv. İstemci Kodunu Yazmak

dil

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

va

İ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: import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*;

ww w. ja

public class HelloClient {   static Hello helloImpl;

  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 = "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

i.c o

}

m

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

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.

v. Uygulamayı Çalıştırmak

dil

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 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: > javac HelloServer.java HelloApp/*.java 

va

Derleme işlemlerinden sonra, çalıştırma işlemlerine geçebiliriz: > orbd ­ORBInitialPort 1050 ­ORBInitialHost localhost & 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.

ww w. ja

Sunucuyu çalıştırmak için: >  java HelloServer ­ORBInitialPort 1050 ­ORBInitialHost localhost& İstemciyi çalıştırmak için: >  java HelloClient ­ORBInitialPort 1050 ­ORBInitialHost localhost komutunu kullanın. İstemci, konsola, Hello world!! yazacaktır. d) Örnek ­2 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 {     void ping(); }; Bu dosyayı derlemek için, idlj'yi kullanacağız. > idlj ­fall  Service.idl

9

m

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

i.c o

// 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; import org.omg.PortableServer.*; import org.omg.PortableServer.Servant;

public class INSServer {     public static void main( String args[] ) {         try {             Properties properties = System.getProperties( );                         properties.put( "com.sun.CORBA.POA.ORBPersistentServerPort",                 Integer.toString(1060) );

dil

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

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

va

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

ww w. ja

            System.out.println( "INS Server is Ready..." );                           orb.run( );         } catch ( Exception e ) {              System.err.println( "Error in setup : " + e );         }     }  } Hizmet verecek nesnemiz (servant) için aşağıdaki kodu ServiceImpl.java kütüğüne ekleyin:

// Hizmet verecek sınıf 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: 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

m

İstemci tarafında ise: “PingService” referansı ile nesneye ulaşıp, nesnenin “ping()” yordamını çağıracağız. Aşağıdaki kodu INSClient.java kütüğüne kaydedin: import org.omg.CORBA.ORB;

i.c o

public class INSClient {     public static void main( String args[] ) {         try {             ORB orb = ORB.init( args, null );             org.omg.CORBA.Object object =orb.resolve_initial_references(                 "PingService" );             Service insService = ServiceHelper.narrow( object );

dil

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

ww w. ja

va

Bütün kodu derlemek için: > javac *.java 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” Sunucu ekranında: “PingService.ping called...” yazdığını göreceksiniz. İstemci isteği yaptıktan sonra kapanırken, sunucuyu el ile kapatmanız gerekmektedir.

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ı, . 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

Ekler

m

5.

a) Açıklamalar

i.c o

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.  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. 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. 

dil

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. 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.

b) Sözlük

va

“naming service”, CORBA nesnelerinin isimlendirilmesini sağlayan CORBA servisi.

: arayüz : uzak arayüz : uygulamak : yordam : dağıtık : sınıf : nesne : nesne : ? : ? : istemci : sunucu : hizmetçi nesne : ? : ?

ww w. ja

interface remote interface implement method distributed class object instance skeleton stub client server servant register naming service

1

Java­IDL Eşleşmesi

IDL Type

Java Type package 

boolean

boolean

char, wchar

char

octet

byte

string, wstring

java.lang.String

short, unsigned short

short

long, unsigned long

int

long long, unsigned long long

long

float

float

dil

double

double

fixed

java.math.BigDecimal

enum, struct, union

class

array

va

sequence, array

interface (abstract)

i.c o

module

interface (non­abstract)

m

c)

signature interface, helper class, holder  class public interface

ww w. ja

constant (not within an interface)

signature interface and an operations  interface, helper class, holder class

constant (within an interface)

fields in the Java signature interface for  non­abstract, or the sole Java interface for  abstract

exception

class

Any

org.omg.CORBA.Any

type declarations nested within interfaces

"scoped" package

typedef

helper classes 

pseudo objects

pseudo interface

readonly attribute

accessor method

readwrite attribute

accessor and modifer methods

operation

method 

1

i.c o

  http://java.sun.com/j2se/1.4.2/docs/guide/idl/    http://www.corba.org/    http://en.wikipedia.org     http://www.omg.org/     http://www.omg.org/gettingstarted/corbafaq.htm   

ww w. ja

va

dil

1. 2. 3. 4. 5.

m

6. Kaynaklar :

1

Related Documents

Idl
November 2019 7
Idl
November 2019 8
Idl Outline.docx
August 2019 12