SYSTEMY ROZPROSZONE CORBA wprowadzenie DSRG 2005 CORBA1 WPROWADZENIE
SYSTEMY ROZPROSZONE CORBA - wprowadzenie © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Plan zajęć • • 2 Krótki opis technologii CORBA Interface Definition Language (IDL) Portable Object Adapter (POA) Przykłady, zadania, . . . © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE CORBA. . . • . . . to skrót od CORBA-1 WPROWADZENIE DO CORBA Common Object Request Broker Architecture (architektura wspólnego brokera żądań obiektów) • . . . to standard zdefiniowany przez Object Management Group (OMG) • . . . to środowisko budowy aplikacji rozproszonych • . . . pozwala na zdalny dostęp do obiektów • . . . posiada wiele serwisów dedykowanych dla rozproszonych aplikacji obiektowych • . . . nie jest związana z żadną platformą ani językiem programowania 3 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE CORBA-1 WPROWADZENIE DO CORBA • Podstawowym elementem architektury CORBA jest ORB (Object Request Broker) • Różne instancje ORB komunikują się za pomocą IIOP (Internet Inter-ORB Protocol) aplikacja JAVA Java ORB 4 © DSRG 2005 IIOP aplikacja C++ Sieć IIOP C++ ORB http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Komunikacja w środowisku CORBA interfejs ORB Client stub Server skeleton rdzeń ORB (IIOP) CORBA-1 WPROWADZENIE DO CORBA skeleton Object adapter 5 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Stub i Skeleton klient serwer wywołanie metody „servant” (sługa) 1 5 1 0 6 stub 9 skeleton 2 4 7 3 ORB 8 6 © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Object Request Broker CORBA-1 WPROWADZENIE DO CORBA • Służy do lokalizowania obiektów w sieci • Pozwala aplikacji na odnajdowanie i wykorzystywanie serwisów CORBA • Wykorzystuje adapter obiektów (ang. object adapter) do zarządzania obiektami na serwerze Istnieje wiele implementacji ORB – – – 7 Orbix, ORBacus (IONA) Borland Enterprise Server, Visi. Broker Edition Java IDL ORB (Sun Microsystems) Open. ORB (Open Source, Java) Jac. ORB (Open Source, GLGPL Java) omni. ORB (Open Source, GPL/LGPL, C++, Python) © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Portable Object Adapter CORBA-1 WPROWADZENIE DO CORBA • Zbudowany na Basic Object Adapter (BOA) • Obsługuje przekazywanie wywołań do obiektów • Może być wykorzystany do wyszukiwania i aktywacji zdalnych obiektów • Pozwala aplikacjom CORBA wykorzystywać różne implementacje ORB; w tym sensie jest on adapterem przenośnych obiektów (portable) 8 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Jak działa POA • POA odbiera od ORB nadchodzące wywołania i przekazuje je do odpowiednich obiektów obiekt aktywny Sieć IIOP ORB POA obiekt nieaktywny 9 © DSRG 2005 obiekt aktywny CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE IIOP • Protokół komunikacji pomiędzy ORBami • Wykorzystuje TCP • Oparty na GIOP – General Inter-ORB Protocol CORBA-1 WPROWADZENIE DO CORBA – GIOP definiuje zbiór wiadomości, które mogą być przesłane pomiędzy ORBami, IIOP odworowuje te wiadomości na TCP • Definiuje format komunikatu • Połączenia są asymetryczne, tzn. : – klient może połączyć się do serwera, a serwer do klienta nie, – klient może wysyłać żądania, ale nie może ich otrzymywać 10 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Interface Definition Language • Zbiór reguł odnoszących się do definiowania interfejsów CORBA • Zawiera wyłącznie deklaracje CORBA-1 WPROWADZENIE DO CORBA module dictionary{ enum Language{ polish, english, suahili }; struct Message{ Language from. Lang; Language to. Lang; string text; }; interface Translator{ string translate( in Message text); string translate 2( in Language form. Lang, in Language to. Lang, in string text ); }; }; 11 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE IDL – typy danych Value Object Reference Constructed Value struct Basic Value union sequence CORBA-1 WPROWADZENIE DO CORBA array short long ushort ulong float double char string boolean octet enum any 12 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE IDL - przykład module Bank. Simple { typedef float Cash. Amount; interface Account { readonly attribute string owner; exception Insufficient. Funds { string reason; }; oneway void deposit(in Cash. Amount amount); void withdraw(in Cash. Amount amount, out Cash. Amount remained) raises(Insufficient. Funds); }; struct Limited. Accounts { unsigned long bank. Id; sequence<Account, 50> accounts; }; }; 13 © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE CORBA-1 WPROWADZENIE DO CORBA „Tłumaczenie” IDL na język programowania • Plik z definicją interfejsów to zwykły plik tekstowy • Odpowiedni kompilator generuje z tego pliku kod źródłowy • OMG definiuje standardy dotyczące translacji IDL na różne języki programowania – C++, Java, Smalltalk, COBOL, . . . • Implementacja aplikacji rozproszonych wykorzystujących CORBA może być dokonana w dowolnym języku (lub kombinacji języków) 14 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Java IDL ORB Klasa org. omg. CORBA. ORB: CORBA-1 WPROWADZENIE DO CORBA • Zapewnia minimalną funkcjonalność ORB • Zawiera implementację standardowych metod CORBA, np. : string_to_object , object_to_string , resolve_initial_references , list_initial_services 15 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Jak stworzyć aplikację CORBA (z wykorzystaniem JDK) 1. Zdefiniować interfejsy obiektów w IDL 2. Skompilować IDL za pomocą idlj 3. 4. 5. 6. 16 CORBA-1 WPROWADZENIE DO CORBA Zaimplementować obiekty zdalnie dostępne (servants) Zaimplementować aplikację serwera Zaimplementować aplikację klienta Odpowiednio porozmieszczać pliki i uruchomić aplikację © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Przykładowy IDL module sr { interface Text. Functions{ string to. Upper( in string text); }; }; ~rzepa/sr/corba. tar 17 © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Przykładowy IDL – tłumaczenie package sr; CORBA-1 WPROWADZENIE DO CORBA public interface Text. Functions module sr{ interface Text. Functions{ string to. Upper( in string text); }; }; String to. Upper (String text); 18 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Przykładowy IDL Kompilacja pliku IDL: idlj -fall corbatest. idlj -td generated corbatest. idl CORBA-1 WPROWADZENIE DO CORBA -fall: generuj wszystkie pliki (dla klienta i serwera) domyślnie: -fclient -td: określenie katalogu docelowego zamień moduł sr na. . . idlj –pkg. Translate sr org. dsrg. labs. corba. test. generated corbatest. idl make idlj 19 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Co generuje kompilator IDL 20 CORBA-1 WPROWADZENIE DO CORBA Plik Opis Text. Functions. java interfejs używany zarówno przez klienta, jak i serwer (rozszerza Text. Functions. Operations i kilka innych interfejsów) Text. Functions. Operations. java interfejs zawierający zdalne metody Text. Functions. POA. java klasa bazowa dla implementacji, definiuje metodę _invoke, która odczytuje parametry wywołania (wygenerowany kod) i wywołuje metody klasy potomnej, a następnie zapisuje wynik _Text. Functions. Stub. java stub dla klienta – odpowiednik Text. Functions. POA Text. Functions. Helper. java abstrakcyjna klasa dokonująca konwersji na zdalnie dostępnych obiektach (rzutowanie, zamiana na typ Any i z powrotem, odczyt i zapis do strumienia itp. ) Text. Functions. Holder. java klasa, która służy do odwzorowania parametrów typów „out” oraz „inout” w Java; zawiera publiczne pole podanego w IDL typu i kilka pomocniczych metod © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Implementacja obiektu „servant” package org. dsrg. labs. corba. test. server; import org. omg. CORBA. ORB; CORBA-1 WPROWADZENIE DO CORBA import org. dsrg. labs. corba. test. generated. Text. Functions. POA; /** * Implementation of a POA compatibile servant. */ class Text. Functions. Impl extends Text. Functions. POA { public String to. Upper(String text) { if ( text != null) { return text. to. Upper. Case(); } return null; } } 21 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Implementacja aplikacji serwera CORBA-1 WPROWADZENIE DO CORBA // utworzenie i inicjalizacja ORB orb = ORB. init( args, null ); // pobranie referencji do głównego POA i aktywacja tzw. POA manager POA rootpoa = POAHelper. narrow(orb. resolve_initial_references("Root. POA")); rootpoa. the_POAManager(). activate(); // utworzenie servanta Text. Functions. Impl functions. Impl = new Text. Functions. Impl(); // zarejestrowanie servanta w POA (wynik: zdalna referencja) org. omg. CORBA. Object ref = rootpoa. servant_to_reference( functions. Impl ); // zapisanie referencji w pliku Print. Writer pw = new Print. Writer(new File. Writer(„Test. IOR")); pw. print(orb. object_to_string(ref)); pw. close(); // wejście w pętlę obsługi zdarzeń orb. run(); 22 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Implementacja aplikacji serwera CORBA-1 WPROWADZENIE DO CORBA // utworzenie i inicjalizacja ORB orb = ORB. init( args, null ); // pobranie referencji do głównego POA i aktywacja tzw. POA manager POA rootpoa = POAHelper. narrow(orb. resolve_initial_references("Root. POA")); rootpoa. the_POAManager(). activate(); // utworzenie servanta Text. Functions. Impl functions. Impl = new Text. Functions. Impl(); // zarejestrowanie servanta w POA (wynik: zdalna referencja) org. omg. CORBA. Object ref = rootpoa. servant_to_reference( functions. Impl ); // zapisanie referencji w pliku Print. Writer pw = new Print. Writer(new File. Writer(„Test. IOR")); pw. print(orb. object_to_string(ref)); pw. close(); // wejście w pętlę obsługi zdarzeń orb. run(); 23 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Implementacja aplikacji serwera CORBA-1 WPROWADZENIE DO CORBA // utworzenie i inicjalizacja ORB orb = ORB. init( args, null ); // pobranie referencji do głównego POA i aktywacja tzw. POA manager POA rootpoa = POAHelper. narrow(orb. resolve_initial_references("Root. POA")); rootpoa. the_POAManager(). activate(); // utworzenie servanta Text. Functions. Impl functions. Impl = new Text. Functions. Impl(); // zarejestrowanie servanta w POA (wynik: zdalna referencja) org. omg. CORBA. Object ref = rootpoa. servant_to_reference( functions. Impl ); // zapisanie referencji w pliku Print. Writer pw = new Print. Writer(new File. Writer(„Test. IOR")); pw. print(orb. object_to_string(ref)); pw. close(); // wejście w pętlę obsługi zdarzeń orb. run(); 24 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Implementacja aplikacji serwera CORBA-1 WPROWADZENIE DO CORBA // utworzenie i inicjalizacja ORB orb = ORB. init( args, null ); // pobranie referencji do głównego POA i aktywacja tzw. POA manager POA rootpoa = POAHelper. narrow(orb. resolve_initial_references("Root. POA")); rootpoa. the_POAManager(). activate(); // utworzenie servanta Text. Functions. Impl functions. Impl = new Text. Functions. Impl(); // zarejestrowanie servanta w POA (wynik: zdalna referencja) org. omg. CORBA. Object ref = rootpoa. servant_to_reference( functions. Impl ); // zapisanie referencji w pliku Print. Writer pw = new Print. Writer(new File. Writer(„Test. IOR")); pw. print(orb. object_to_string(ref)); pw. close(); // wejście w pętlę obsługi zdarzeń orb. run(); 25 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Implementacja aplikacji serwera CORBA-1 WPROWADZENIE DO CORBA // utworzenie i inicjalizacja ORB orb = ORB. init( args, null ); // pobranie referencji do głównego POA i aktywacja tzw. POA manager POA rootpoa = POAHelper. narrow(orb. resolve_initial_references("Root. POA")); rootpoa. the_POAManager(). activate(); // utworzenie servanta Text. Functions. Impl functions. Impl = new Text. Functions. Impl(); // zarejestrowanie servanta w POA (wynik: zdalna referencja) org. omg. CORBA. Object ref = rootpoa. servant_to_reference( functions. Impl ); // zapisanie referencji w pliku Print. Writer pw = new Print. Writer(new File. Writer(„Test. IOR")); pw. print(orb. object_to_string(ref)); pw. close(); // wejście w pętlę obsługi zdarzeń orb. run(); 26 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Implementacja aplikacji klienta // utworzenie i inicjalizacja ORB orb = ORB. init( argv, null ); CORBA-1 WPROWADZENIE DO CORBA // odczytanie referencji serwera z pliku String ref = new Buffered. Reader(new File. Reader(„Test. IOR")). read. Line(); Text. Functions functions. Impl = Text. Functions. Helper. narrow( orb. string_to_object(ref) ); // wywołanie metody „to. Upper” na zdalnym obiekcie String test. String = "corba-test-string"; test. String = functions. Impl. to. Upper( test. String ); 27 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Kompilacja i uruchomienie w kompilacja: make javac w uruchomienie: w serwer CORBA-1 WPROWADZENIE DO CORBA java –classpath classes org. dsrg. labs. corba. test. server. Text. Functions. Server albo make run-server w klient java –classpath classes org. dsrg. labs. corba. test. client. Text. Functions. Client albo make run-client 28 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Naming Service © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Naming Service • Odwzorowuje nazwy do referencji obiektów CORBA-1 WPROWADZENIE DO CORBA – Przekazując nazwę otrzymujemy referencję obiektu (w drugą stronę nie działa ) • Zalety – klient nie musi używać referencji obiektu – korzysta ze zrozumiałej nazwy – zmieniając referencję obiektu wskazywaną przez określoną nazwę możemy podmienić implementację usługi – rozwiązuje problem wyszukiwania referencji obiektów aplikacji – eliminuje potrzebę korzystania z pliku, http itp. 30 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Graf nazw 1. główny kontekst (bez nazwy) mogą_obic zboje zbojcerze Nazwy wewnątrz jednego kontekstu są unikalne obiboki dziad_borowy woje borostwory hegemon lamignat oferma CORBA-1 WPROWADZENIE DO CORBA = kontekst spioch kajko kokosz = obiekt = powiązanie 31 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Graf nazw główny kontekst (bez nazwy) mogą_obic zboje zbojcerze 2. obiboki dziad_borowy Ta sama nazwa może się pojawić wielokrotnie ale w różnych kontekstach; nie musi się odnosić do tego samego obiektu woje borostwory hegemon lamignat oferma CORBA-1 WPROWADZENIE DO CORBA = kontekst spioch kajko kokosz = obiekt = powiązanie 32 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Graf nazw 3. główny kontekst (bez nazwy) mogą_obic zboje zbojcerze Obiekt może mieć wiele różnych nazw obiboki dziad_borowy woje borostwory hegemon lamignat oferma CORBA-1 WPROWADZENIE DO CORBA = kontekst spioch kajko kokosz = obiekt = powiązanie 33 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Graf nazw główny kontekst (bez nazwy) mogą_obic zboje zbojcerze 4. obiboki dziad_borowy Unikalnym identyfikatorem obiektu jest ścieżka od kontekstu początkowego do nazwy obiektu woje borostwory hegemon lamignat oferma CORBA-1 WPROWADZENIE DO CORBA = kontekst spioch kajko kokosz = obiekt = powiązanie 34 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE CORBA-1 WPROWADZENIE DO CORBA Naming Service też jest obiektem zdalnym //File: Cos. Naming. idl module Cos. Naming { //. . . interface Naming. Context { //. . . }; 35 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Nazwy obiektów module Cos. Naming {//. . . typedef string Istring; struct Name. Component { Istring id; Istring kind; }; typedef sequence<Name. Component> Name; }; • • • 36 CORBA-1 WPROWADZENIE DO CORBA Mapping do Java? – dowolnej długości ISO Latin-1 bez ASCII NUL Name. Component – pojedynczy krok w ścieżce; składa się z dwóch stringów kind – znaczenie podobne do rozszerzenia pliku; można zostawiać puste. Naming service w żaden sposób nie interpretuje tych wartości. Dwie Name są równe tylko jeśli wszystkie Name. Component są identyczne jeśli posiadają identyczne id i kind id, kind © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Nazwy obiektów • Jak przekazać nazwę obiektu do klienta? – id 1(kind 1)/id 2(kind 2)/id 3(kind 3) – id 1. kind 1/id 2. kind 2/id 3. kind 3 • Od wersji 1. 2 zestandaryzowane – Dowolnej długości ISO Latin-1 bez ASCII NUL – Znaki ‘/’, ‘’ mają znaczenie specjalne CORBA-1 WPROWADZENIE DO CORBA • / - rozdziela Name. Components • . – rozdziela id i kind • - znak wyłączający znaczenie specjalne znaków ‘/’ i ‘. ’ • Przykład – a. id/a. kind. a. id/a. kind 37 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Operacje w Naming. Context • Tworzenie naming graph CORBA-1 WPROWADZENIE DO CORBA – Tworzenie, kasowanie kontekstu – Dołączanie, odłączanie obiektu lub kontekstu od istniejącego kontekstu • Wyszukiwanie obiektu zarejestrowanego w Naming. Service 38 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Tworzenie naming graph interface Naming. Context {//. . . Naming. Context new_context(); Naming. Context bind_new_context(in Name n) raises( Not. Found, Cannot. Proceed, Invalid. Name, Already. Bound ); void destroy () raises (Not. Empty); void bind(in Name n, in Object obj) raises ( Not. Found, Cannot. Proceed, Invalid. Name, Already. Bound); void bind_context(in Name n, in Naming. Context nc) raises(Not. Found, Cannot. Proceed, Invalid. Name, Already. Bound); }; 40 © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Tworzenie naming graph - 2 interface Naming. Context {//. . . void rebind(in Name n, in Object obj) raises ( Not. Found, Cannot. Proceed, Invalid. Name); void rebind_context(in Name n, in Naming. Context nc) raises(Not. Found, Cannot. Proceed, Invalid. Name); void unbind(in Name n) raises ( Not. Found, Cannot. Proceed, Invalid. Name); }; 41 © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Rozwiązywanie nazw (resolving) interface Naming. Context {//. . . Object resolve(in Name n) raises ( Not. Found, Cannot. Proceed, Invalid. Name); }; • n może wskazywać na Naming. Context lub zwykły obiekt aplikacji CORBA-1 WPROWADZENIE DO CORBA • operacja resolve() zwykle jest wykorzystywana w każdej innej metodzie interfejsu Naming. Context ctx. op([c 1/c 2/c 3/. . /cn]) ctx. resolve([c 1]). op([c 2/c 3/. . /cn]); 42 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Uzyskanie Initial Naming Context interface CORBA {//PIDL typedef string Object. Id; exception Invalid. Name {}; Object resolve_initial_references (in Object. Id id) raises (Invalid. Name); }; Object. Id dla Naming Service to „Name. Service” 43 © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE CORBA-1 WPROWADZENIE DO CORBA Wykorzystanie Naming Service w serwerze ORB orb = ORB. init( args, null ); POA rootpoa = POAHelper. narrow(orb. resolve_initial_references("Root. POA")); rootpoa. the_POAManager(). activate(); Text. Functions. Impl functions. Impl = new Text. Functions. Impl(); org. omg. CORBA. Object ref = rootpoa. servant_to_reference( functions. Impl ); Text. Functions href = Text. Functions. Helper. narrow( ref ); // pobranie referencji korzenia drzewa nazw org. omg. CORBA. Object obj. Ref =orb. resolve_initial_references("Name. Service"); // dowiązanie do korzenia drzewa Naming. Context. Ext nc. Ref = Naming. Context. Ext. Helper. narrow( obj. Ref ); Name. Component path[] = nc. Ref. to_name(„Text. Functions. Server” ); nc. Ref. rebind( path, href ); // wait for invocations from clients orb. run(); 44 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE CORBA-1 WPROWADZENIE DO CORBA Wykorzystanie Naming Service w kliencie // create and initialize the ORB orb = ORB. init( argv, null ); // pobranie referencji do korzenia drzewa nazw org. omg. CORBA. Object obj. Ref =orb. resolve_initial_references("Name. Service"); // pobranie referencji do zdalnego obiektu Naming. Context. Ext nc. Ref = Naming. Context. Ext. Helper. narrow( obj. Ref ); Text. Functions functions. Impl = Text. Functions. Helper. narrow( nc. Ref. resolve_str( „Text. Functions. Server” ) ); // invoke to. Upper() on the remote object String test. String = "corba-test-string"; test. String = functions. Impl. to. Upper( test. String ); 45 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE CORBA-1 WPROWADZENIE DO CORBA Uruchamianie serwisów ORB/CORBA Naming Service jest uruchamiany poprzez orbd -ORBInitial. Port serverport Przykład orbd -ORBInitial. Port 3500 albo make run-orbd (zmienić wcześniej nr portu NS_PORT) 46 © DSRG 2005 http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE Uruchamianie serwera i klienta serwer: CORBA-1 WPROWADZENIE DO CORBA java –classpath classes org. dsrg. labs. corba. test. server. Text. Functions. Server –ORBInitial. Port 3500 –ORBInitial. Host localhost albo make run-ns-server (zmienić wcześniej nr portu NS_PORT) klient: java –classpath classes org. dsrg. labs. corba. test. client. Test. Client –ORBInitial. Port 3500 –ORBInitial. Host localhost albo make run-ns-client 47 © DSRG 2005 (zmienić wcześniej nr portu NS_PORT) http: //www. ics. agh. edu. pl
SYSTEMY ROZPROSZONE module logs { enum Log. Priority {LOG_DEBUG, LOG_WARNING, LOG_PANIC }; struct Log. Record { Log. Priority priority; long time; string message; }; interface Logger. Listener { void process. Log. Record( in Log. Record lr ); }; interface Logger { exception Already. Added {}; exception Not. Present {}; void log( inout Log. Record rec ); void add. Logger. Listener(in Logger. Listener ll, in Log. Priority priority) raises (Already. Added); void alter. Logger. Listener(in Logger. Listener ll, in Log. Priority priority) raises (Not. Present); void remove. Logger. Listener(in Logger. Listener ll) raises (Not. Present); }; }; 48 © DSRG 2005 CORBA-1 WPROWADZENIE DO CORBA Bardzo Ważne Zadanie Domowe http: //www. ics. agh. edu. pl
- Slides: 47