Professional Documents
Culture Documents
Java Idl Ykaragol Wwwjavadilicom
Java Idl Ykaragol Wwwjavadilicom
Java Idl Ykaragol Wwwjavadilicom
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
ePosta : 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”
(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.
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 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
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 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.
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) 19962002 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) 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;
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 InterORB 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 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.
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, 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.
“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) JavaIDL 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 (nonabstract) 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
nonabstract, 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