Я бы вряд ли назвал RMI «спецификацией». Это довольно реализационная реализация сериализации Java; и всякая реализация соответствует версии JRE, в которой вы работаете. Я бы посоветовал не случайным образом смешивать и сопоставлять версии JRE между клиентом и сервером при использовании RMI. Я также не советую сериализовать POJO, используя экзотические функции, которых нет в старых VM.
Хотя он не «указан», у меня есть обратная конструкция, почти полностью выполненная реализация RMI для C# раньше (для использования с серверами на основе Spring/Hibernate из WPF), но я не знаю никого, кто использует такие не-JRE-реализации в реальном мире. В некоторых случаях вы застреваете с RMI, чтобы общаться с системами J2EE. Но, если это вообще возможно, вы должны использовать что-то более разумное, например ProtocolBuffers/Thrift/Avro/Hessian/Parqet и т. Д. У них есть настоящие «спецификации» с версиями протоколов и IDL-компиляторами для нескольких платформ; что было совсем не так в то время, когда я это делал для RMI.
У RMI есть другие проблемы, которые я бы назвал вопросами безопасности (т. Е. Вы указали имя класса в потоке сериализации, и оно вызовет конструктор no-arg для создания класса этого имени). Его дизайн также не очень хорош для ситуаций, когда графы объектов могут стать большими. (В частности, вы можете сделать стек очень большим во время десериализации.)
В отличие от XML API, в котором есть хотя бы два известных поставщика услуг SPI, RMI встроен. С помощью метода remote-method-invokation вы сами пишете клиент и сервер. Один экземпляр означает один порт, один сокет. Нет высокой архитектуры. –