Jak mówi Daff, sama Java RMI jest tylko odpowiednia dla komunikacji Java-to-Java. Pod względem łatwości rozwoju w dzisiejszych czasach stopień kodowania z punktu widzenia dostawcy usług jest dość podobny.
Oprócz problemów związanych z wydajnością, w których luka między usługami WebServices i RMI jest dość zmienna (w przypadku niektórych rozmiarów komunikatów może występować pomijalna różnica), należy rozważyć jeszcze jeden aspekt: odporność.
Zwykle RMI jest łatwy do skonfigurowania, gdy jeden klient rozmawia z jednym serwerem, a Ty nie masz nic przeciwko dostępności klienta do połączenia z pojedynczym serwerem. Serwer w dół, klient w dół, takie jest życie.
W przypadku usługi sieciowej można dość łatwo wdrożyć usługę do klastra serwerów, a biorąc pod uwagę, że wywołujesz usługę sieci Web za pośrednictwem protokołu HTTP, możesz z łatwością wykorzystać wszystkie standardowe metody routingu i natryskiwania używane w większej skali. witryny internetowe. Nie wymaga specjalnego kodowania na serwerze lub kliencie.
Teraz można uzyskać ten sam poziom odporności na RMI, ale wymaga to nieco lepszej infrastruktury świadczenia usług i właśnie tam do gry wchodzi model programowania EJB Java EE (lub frameworków takich jak Spring). EJB używa RMI przez IIOP, protokół, który pozwala na elastyczne wywoływanie do instancji serwera, w sposób przejrzysty radząc sobie z awariami serwerów. [Robi to o wiele więcej, takie jak secutiry i transakcje, ale tak samo może być z usługami sieciowymi. Interesujące, ale nie będące częścią tej dyskusji.]
Konkluzja: W przypadku świadczenia usług o jakości produkcji zwykle rozpoczynam od utworzenia obiektu usługi. Używam Java EE EJB 3, inni używają Springa. Możesz odsłonić ten obiekt usługi jako serwis internetowy lub jako RMI/IIOP z bardzo prostą konfiguracją/adnotacją. To bardzo mały wysiłek, aby wybrać jedną lub obie. Mój świat staje się ważny w interopie, więc mam tendencję do ujawniania usług sieciowych. Jeśli masz tylko Java do rozważenia, może to poprawić wydajność korzystania z RMI/IIOP, ale nie jest to gwarantowane, musisz zmierzyć perfromance, aby mieć pewność.
Czy chodziło Ci o RMI vs usług internetowych? RPC jest rozwiązaniem niezależnym od języka. Interesuję się Javą przy użyciu RPC (nie RMI/REST/etc.), Ale to może nie być to, co miałeś na myśli. –