Розподілена об'єктна модель, що описує, яким чином здійснюється виклик віддалених методів, що працюють на іншій віртуальній машині Java.
При доступі до об'єктів на іншому комп'ютері, можна викликати методи цього об'єкту. Необхідно тільки доставити параметри методу на інший комп'ютер, повідомити об'єкт про необхідність виконання методу, а потім передати назад значення (якщо метод не void). Механізм RMI дає можливість організувати виконання всіх цих операцій.
У термінах RMI об'єкт, який викликає віддалений метод, називається клієнтським об'єктом, а віддалений об'єкт - серверним об'єктом. Комп'ютери виступають у ролі клієнта і сервера тільки для конкретного виклику. Цілком можливо, що при виконанні наступної операції ці комп'ютери поміняються ролями, тобто сервер може сам стати клієнтом при зверненні до об'єкту на іншому комп'ютері.
При виклику методу віддаленого об'єкту, насправді викликається звичайний Java метод, інкапсульований у спеціальному об'єкті-заглушці (stub), який є представником серверного об'єкту. Заглушка знаходиться на клієнтському комп'ютері, а не на сервері. Вона упаковує параметри віддаленого методу у блок байтів. Кожен параметр кодується за допомогою алгоритму, що забезпечує незалежність від апаратного забезпечення. Наприклад, числа завжди передаються в порядку, при якому спочатку передається старший байт (big-endian). При цьому об'єкти піддаються серіалізації. Процес кодування параметрів називається розгортанням параметрів (parameter marshaling). Основна мета розгортання параметрів - перетворення їх у формат, придатний для передачі параметрів від однієї віртуальної машини до іншої.
Метод, який належить заглушці, створює блок, до якого входять такі елементи:
витягування та розгортання значення яке повертається або виключення, згенерованого цим методом;
передача пакету, який складається із розгорнутих даних, які повертаються, об'єкту-заглушці на клієнтському комп'ютері.
Клієнтський об'єкт-заглушка згортає повернене значення або виключення, отримане із сервера. Результат згортання стає значенням методу заглушки. Якщо віддалений метод повертає виключення, то об'єкт-заглушка повторить його в середовищі об'єкту-клієнта.
importjava.rmi.Naming;importjava.rmi.registry.Registry;importjava.rmi.registry.LocateRegistry;importjava.rmi.RemoteException;importjava.rmi.NotBoundException;publicclassTest{publicstaticfinalStringSERVER_NAME="Server";// use : server <port> - start server// client <host> <port> - start clientpublicstaticvoidmain(String[]args)throwsException{if(args[0].equals("server")){Serverserver=newServer(args[1]);server.runServer();System.out.println("Server started on port "+args[1]);}else{StringlookupString="//"+args[1]+":"+args[2]+"/"+SERVER_NAME;Hellohello=(Hello)Naming.lookup(lookupString);System.out.println("RMI object found");System.out.println(hello.helloWorld());}}}