Java RMI - Wprowadzenie
RMI oznacza Remote Method Invocation. Jest to mechanizm, który umożliwia obiektowi znajdującemu się w jednym systemie (JVM) dostęp do obiektu działającego na innej maszynie JVM / wywołanie go.
RMI służy do tworzenia aplikacji rozproszonych; zapewnia zdalną komunikację między programami Java. Jest dostarczany w pakieciejava.rmi.
Architektura aplikacji RMI
W aplikacji RMI piszemy dwa programy, a server program (znajduje się na serwerze) i client program (rezyduje na kliencie).
W programie serwera tworzony jest zdalny obiekt, a referencja do niego jest udostępniana klientowi (za pomocą rejestru).
Program klienta żąda zdalnych obiektów na serwerze i próbuje wywołać swoje metody.
Poniższy diagram przedstawia architekturę aplikacji RMI.
Omówmy teraz składniki tej architektury.
Transport Layer- Ta warstwa łączy klienta i serwer. Zarządza istniejącym połączeniem, a także tworzy nowe połączenia.
Stub- Odcinek jest reprezentacją (proxy) zdalnego obiektu na kliencie. Znajduje się w systemie klienta; działa jako brama dla programu klienta.
Skeleton - To jest obiekt znajdujący się po stronie serwera. stub komunikuje się z tym szkieletem, aby przekazać żądanie do zdalnego obiektu.
RRL(Remote Reference Layer) - Jest to warstwa, która zarządza odwołaniami klienta do zdalnego obiektu.
Działanie aplikacji RMI
Poniższe punkty podsumowują sposób działania aplikacji RMI -
Kiedy klient wywołuje zdalny obiekt, jest ono odbierane przez kod pośredniczący, który ostatecznie przekazuje to żądanie do RRL.
Gdy RRL po stronie klienta odbiera żądanie, wywołuje metodę o nazwie invoke() obiektu remoteRef. Przekazuje żądanie do RRL po stronie serwera.
RRL po stronie serwera przekazuje żądanie do szkieletu (proxy na serwerze), który ostatecznie wywołuje wymagany obiekt na serwerze.
Wynik jest przekazywany z powrotem do klienta.
Marshalling i Unmarshalling
Za każdym razem, gdy klient wywołuje metodę, która akceptuje parametry na zdalnym obiekcie, parametry są pakowane w wiadomość przed wysłaniem przez sieć. Te parametry mogą być prymitywnym typem lub obiektami. W przypadku typu pierwotnego parametry są łączone i dołączany jest do nich nagłówek. W przypadku, gdy parametry są obiektami, są serializowane. Ten proces jest znany jakomarshalling.
Po stronie serwera spakowane parametry są uwalniane, a następnie wywoływana jest wymagana metoda. Ten proces jest znany jakounmarshalling.
Rejestr RMI
Rejestr RMI to przestrzeń nazw, w której umieszczane są wszystkie obiekty serwera. Za każdym razem, gdy serwer tworzy obiekt, rejestruje go w rejestrze RMI (przy użyciubind() lub reBind()metody). Są one rejestrowane przy użyciu unikalnej nazwy znanej jakobind name.
Aby wywołać obiekt zdalny, klient potrzebuje odwołania do tego obiektu. W tym czasie klient pobiera obiekt z rejestru przy użyciu jego nazwy powiązania (przy użyciulookup() metoda).
Poniższa ilustracja wyjaśnia cały proces -
Cele RMI
Oto cele RMI -
- Aby zminimalizować złożoność aplikacji.
- Aby zachować bezpieczeństwo typu.
- Rozproszone wyrzucanie elementów bezużytecznych.
- Zminimalizuj różnicę między pracą z obiektami lokalnymi i zdalnymi.