RMI(Remote Method Invocation)
Wykorzystywane w obiektowych systemach rozproszonych. Pozwala tworzyć kod zorientowany obiektowo(RMI), a nie zorientowany „komunikacyjnie”(RPC). Zasada działania RMI jest podobna do RPC. Lokalny obiekt stub zarządza wywołaniami zdalnego obiektu. Mechanizmy dziedziczenia, polimorfizmu i dynamicznego wiązania wymuszają nieco inne podejście niż w RPC. Jednakże RMI jak i RPC z natury jest synchroniczne. Wywołania RMI jak i RPC są obsługiwane przez serwer w sposób przeźroczysty(Transparentny). RMI obsługuje wyjątki, RPC zwracało kod błędu.
Aby umożliwić zdalne wywołanie metod obiektu jakieś klasy, należy utworzyć interfejs dla tej klasy. Będzie on określał, które metody będą mogły być wywoływane zdalnie(będą dostępne dla klienta). Następnie odpowiednim programem należy wygenerować z kodu bajtowego danej klasy dwie nowe klasy: stub i skeleton. Serwer musi zarejestrować się przy pomocy obiektu „registry”, któremu „mówi” że udostępnia usługi pod zadaną nazwą. Klient aby „być w interakcji” ze zdalnym obiektem serwera, musi się najpierw powiązać z tym obiektem- w efekcie zwracany jest do klienta obiekt stub. Klient przypisuje do zdefiniowanego przez serwer interfejsu do obiektu stub, od tej pory może używać tego interfejsu do wywoływania metod na obiekcie stub. Obiekt stub znajduje się u klienta i przekazuje wszystkie wywołania od niego do zdalnego obiektu serwera. Kiedy metod obiektu stub jest wywoływana stub wykonuje:
Inicjuje połączenie z serwerem zwierającym zdalny obiekt
Pakuje i wysyła parametry do serwera
Czeka na wynik wywołanej metody
Odczytuje i rozpakowuje zwróconą wartość lub wyjątek i
Zwraca wartość do miejsca wywołania
Obiekt stub ukrywa serializację parametrów oraz poziom siecowej komunikacji.
Obiekt skeleton po otrzymaniu wywołania metody wykonuj:
Odczytuje i rozpakowuje parametry metody
Wywołuje metode na obiekcie serwera
Pakuje i wysyla rezultat