m i.c o
ww w. ja
va
dil
JAVA IDL
Araştırma Konusu Öğrenci No Öğrencinin Adı Öğrencinin Soyadı ePosta
: 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” (idltojava) 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 InterORB Protokol teknolojisi ("RMIIIOP") ise IIOP üzerine Java RMI arayüzü ile program geliştirmek isteyen Java programcıları için daha uygundur. RMIIIOP, 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 InterORB 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) 19962002 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) 19962002 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 InterORB Protocol”ün kısaltması olup, CORBA'nın önemli bir parçasıdır. GIOP'nin TCP/IP eşleştirmelerine sahiptir. GIOP, “General InterORB 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, nesneyönelimli yazılım geliştirme konusunda standartları oluşturmaya çalışan kuruluş. Üyeleri içinde platform üreticileri, nesneyö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
JavaIDL 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 (nonabstract)
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 nonabstract, 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