Ada-95 --- przetwarzanie rozproszone ==================================== Przed startem programu należy uruchomić usługę nazewniczą:: po_cos_naming Usługa ta zwróci IOR, który należy ustawić jako wartość zmiennej środowiskowej ``POLYORB_DSA_NAME_SERVICE``, np.:: export POLYORB_DSA_NAME_SERVICE=corbaloc:iiop:1.2@150.254.30.38:40941/NameService/000000024fF0000000080000000 Przykład zdalnego prodprogramu ------------------------------ Specyfikacja pakietu (`rci.ads <./Ada/RCI_1/rci.ads>`_): .. include:: ./Ada/RCI_1/rci.ads :literal: Implementacja pakietu (`rci.adb <./Ada/RCI_1/rci.adb>`_): .. include:: ./Ada/RCI_1/rci.adb :literal: Przykład wywołania zdalnej procedury (`rcall.adb <./Ada/RCI_1/rcall.adb>`_): .. include:: ./Ada/RCI_1/rcall.adb :literal: Opis konfiguracji (`conf1.cfg <./Ada/RCI_1/conf1.cfg>`_): .. include:: ./Ada/RCI_1/conf1.cfg :literal: Sposób kompilacji:: gnatdist conf1.cfg **Uwaga:** nazwa pliku musi być taka sama jak nazwa opisanej w nim konfiguracji. Pytania +++++++ #. Czy można utworzyć 2 partycje udostępniacjące zdalnie pakiet RCI? #. Czy można uruchomić 2 razy partycję ``server``? Wyodrębnienie pakietu z opisem struktur danych ---------------------------------------------- Pakiet zawiera tylko specyfikację i musi być skategoryzowany jako ``Pure`` (`types.ads <./Ada/RCI_2/types.ads>`_). .. include:: ./Ada/RCI_2/types.ads :literal: Proszę zwrócić uwagę na obsługę wyjątków, np. wywołując procedurę zdalną z jakąś dużą wartością w polu numer rekordu-parametru (`rcall.adb --- wersja 2 <./Ada/RCI_3/rcall.adb>`_): .. include:: ./Ada/RCI_3/rcall.adb :literal: Przykład procedury asynchronicznej ---------------------------------- Różnica jest w kodzie występuje tylko w specyfikacji (`rci.ads --- wersja asynchroniczna <./Ada/RCI_3/rci.ads>`_): .. include:: ./Ada/RCI_3/rci.ads :literal: Pytania +++++++ #. Czy tym razem przekazywany jest wyjątek? Przykład procedury zwrotnej --------------------------- Dodatkowy pakiet kategorii ``Remote_Call_Interface`` (`callback.ads <./Ada/RCI_4/callback.ads>`_) .. include:: ./Ada/RCI_4/callback.ads :literal: i jego przykładowa implementacja `callback.adb <./Ada/RCI_4/callback.adb>`_. W przypadku poniższego wywołania procedura zwrotna wiązana jest statycznie, tzn. indentyfikowana jest jednoznacznie już w kodzie źródłowym i znana kompilatorowi (`rci.adb --- wersja z wywołaniem zwrotnym <./Ada/RCI_4/rci.adb>`_): .. include:: ./Ada/RCI_4/rci.adb :literal: W opisie konfiguracji pakiet procedur zwrotnych jest w partycji klienta (`conf6.cfg <./Ada/RCI_4/conf6.cfg>`_): .. include:: ./Ada/RCI_4/conf6.cfg :literal: Przykład wiązania dynamicznego ------------------------------ Do procedury zdalnej przekazywany jest wskaźnik (zdalny) na procedurę zwrotną. Typ wskaźnikowy musi być zdefiniowany w jednostce kategorii ``Remote_Call_Interface`` (`callback.ads --- def. zdal. wsk. na proc. <./Ada/RCI_5/callback.ads>`_) .. include:: ./Ada/RCI_5/callback.ads :literal: Przykład wywołania procedury zdalnej (`rcall.adb --- przekazanie wsk. na proc. zwrotną <./Ada/RCI_5/rcall.adb>`_): .. include:: ./Ada/RCI_5/rcall.adb :literal: Przykład wywołania procedury zwrotnej (`rci.adb --- wywołanie z wiąz. dynamicz. <./Ada/RCI_5/rci.adb>`_): .. include:: ./Ada/RCI_5/rci.adb :literal: Pytania +++++++ #. Czy można utworzyć 2 partycje typu `klient`? #. Czy można uruchomić kilka razy partycję ``klient``? Przykład zdalnego obiektu ------------------------- Przykład definicji zdalnego obiektu (`remote_key.ads <./Ada/RCI_6/remote_key.ads>`_): .. include:: ./Ada/RCI_6/remote_key.ads :literal: Implementacja procedury ``Return_key`` sprowadza się do podstawienia wartości parametru w odpowiednie pole rekordu i wyświetlenia komunikatu (`remote_key.adb <./Ada/RCI_6/remote_key.adb>`_) Definicja typu ``Remote_Key_Type`` oparta jest na definicji rekordu znakowanego ``Key_Type`` w pakiecie ``Types`` (`types.ads z typem znakowanym <./Ada/RCI_6/types.ads>`_, `types.adb <./Ada/RCI_6/types.adb>`_). Sam obiekt typu ``Remote_Key_Type`` tworzony jest w normalnym pakiecie ``Remote_Object`` (`remote_object.ads <./Ada/RCI_6/remote_object.ads>`_). Przykłady użycia obiektu zdalnego są w plikach (`rcall.adb z przkaz. wsk. na zdal. obiekt <./Ada/RCI_6/rcall.adb>`_ , `rci.ads z odniesieniem do zdal. obiektu <./Ada/RCI_6/rci.ads>`_, `rci.adb z odniesieniem do zdal. obiektu <./Ada/RCI_6/rci.adb>`_) Konfiguracja uwzględnia fakt, że może być wielu klientów. Wyodrebnione zostały 2 rodzaje partycji ``client`` --- jedna z zasadniczą procedurą główną (i tym samym `boot serwerem`), a druga z alternatywną procedurą główną (`conf7.cfg <./Ada/RCI_6/conf7.cfg>`_): .. include:: ./Ada/RCI_6/conf7.cfg :literal: