Введение

В вычислительной технике Java Remote Method Invocation (Java RMI) — это Java API, выполняющий удалённый вызов метода, объектно-ориентированный эквивалент удалённых вызовов процедур (RPC), с поддержкой прямой передачи сериализованных классов Java и распределённого сбора мусора. Изначальная реализация опирается на механизмы представления классов Java Virtual Machine (JVM) и, следовательно, поддерживает вызовы только между JVM. Протокол, лежащий в основе этой реализации, работающей только с Java, известен как Java Remote Method Protocol (JRMP). Для поддержки кода, выполняемого вне контекста JVM, программисты впоследствии разработали версию на основе CORBA. Использование термина RMI может относиться исключительно к программному интерфейсу или может подразумевать как API, так и JRMP, IIOP или другую реализацию, в то время как термин RMI IIOP (читается: RMI поверх IIOP) конкретно обозначает интерфейс RMI, делегирующий большую часть функциональности базовой реализации CORBA. Базовая идея Java RMI, протокол распределённого сбора мусора (DGC) и значительная часть архитектуры, лежащей в основе оригинальной реализации Sun, берут начало в функции "сетевых объектов" языка Modula 3.

Обобщенный код

Программисты оригинального RMI API несколько обобщили код для поддержки различных реализаций, таких как HTTP-транспорт. Кроме того, в CORBA была добавлена возможность передачи аргументов "по значению", чтобы обеспечить совместимость с интерфейсом RMI. Тем не менее, реализации RMI IIOP и JRMP не имеют полностью идентичных интерфейсов. Функциональность RMI предоставляется в пакете `java.rmi`, в то время как большая часть реализации Sun находится в пакете `sun.rmi`. Обратите внимание, что в версиях Java до 5.0 разработчикам требовалось компилировать RMI-заглушки в отдельный этап компиляции с помощью `rmic`. Начиная с версии Java 5.0, этот этап больше не требуется.

Версия Jini

Jini предлагает более продвинутую версию RMI в Java. Он функционирует схожим образом, но предоставляет расширенные возможности в области безопасности, обнаружения объектов и другие механизмы для распределенных объектных приложений.