Jak przetrwać egzamin z RSO (CORBA)

1. Npisać plik IDL.

Tu największe znaczenie ma zrozumienie polecenia. Ni mniej ni więcej.

2. Wygenerować kod serwera.

po skończeniu pliku IDL należy na nim wykonać polecenie:

omniidl -bcxx -Wbexample plik.idl

Generuje ono parę plików, których nie powinno się tykać, z wyjątkiem takiego pliku z suffiksem _i.cc (np. dla pliku chat.idl będzie chat_i.cc). Ten plik to właśnie wygenerowany serwer. Najlepiej od razu zmienić jego nazwę na serwer.cc, to się będzie ładnie kleić z makefilem GWJa z jego pierwszego przykładu.

Zaglądając w ten plik serwera można zauważyć, że wszystkie definicje i deklaracje klas które się przesyła (a tak naprawdę klas po nich dziedziczących, zapewniających implementacje) są wszystkie w tym jednym pliku, razem z wszystkimi sygnaturami i pustymi ciałami metod. Jest tam więcej rzeczy, np. konstruktory puste itd., ale To, co koniecznie trzeba wypełnić, to puste ciała metod interfejsów z IDLa. Warto zauważyć, że w metodach zwracających wskaźnik wskaźnik do czegoś, dobrze jest użyć typu _var i potem skorzystać z jego metody _retn(), np.

DaneOUżytkownikach* Lolek_i::zwrocWskaznikDoDanych()
{
   DaneOUżytkownikach_var daneVar = new DaneOUżytkownikach();
   daneVar->length(jakaśLiczba);
   //jakieś wypełnianie itd.
   //...
   //...
 
   return daneVar._retn();
}

Teraz należy zmienić maina, bo ten wygenerowany jest nie poprawny (brakuje jakiegoś removeRef()). Najlepiej przekleić tego maina z server.cc z przykładu GWJa i dostosować sobie (chyba wystarczy zmienić wszędzie gdzie jest time na nazwę Twojej klasy, np. jeśli główny interfejs się nazywał Lolek, to trzeba zmienić Time_var na Lolek_var, Time na Lolek, Time_impl na Lolek_i, itd.). Poza tym ważne jest, żeby zmienić #include na samej górze pliku, np.

#include<Lolek.hh>

powinno być zastąpione następującym zapisem:

#include"Lolek.hh"

3. Klient.

Klient jest dosyć łatwy, bo wystarczy przekleić kod z przykładu GWJa, znowu zmieniając tylko nazwy z time na coś innego i wywalić ten fragment z wywoływaniem metod a zamiast niego dodać swój własny. Aha, trzeba też pamiętać, żeby dodać #include"Lolek.hh" i wywalić #include"time.hh". Warto też nazwać klienta client.cc - wtedy będzie się to ładnie kleić z makiem GWJa.

UWAGA: musisz pamiętać o tym, że wszystko co należy do CORBY jest zamieszczone w przestrzeni nazw CORBA, zatem np. typy wbudowane CORBY (takie jak String_var, Long itd.) należy poprzedzać przedrostkiem CORBA::. Alternatywą jest użycie na samym początku pliku polecenia using namespace CORBA; (mniej eleganckie, ale wygodniejsze (mniej pisania) i nie ma ryzyka, że się gdzieś zapomni dopisać tej przestrzeni (co może spowodować długie szukanie błędów)).

4. Makefile

Weź tego z przykładu GWJa i pozmianiaj OMNIHOME (na laboratorium jest inna wersja niż 4.0.0 - teraz chyba 4.0.3), oraz nazwy plików z końcówką SK, plik IDLa itd.

5. Odpalenie.

Nawet jeśli puste implementacje w serwerze nie są wypełnione, to powinno się już wszystko kompilować. Warto teraz dodać wywołania do klienta i implementacje do serwera, jeśli jeszcze ich nie ma.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-Share Alike 2.5 License.