Если вам нужна гибкость, используйте Spring remoting , так как он абстрагирует слой удаленного взаимодействия, поэтому возможное изменение реализации сохраняет ваши руки в чистоте.
Я использую HTTP Invoker , потому что он легкий и использует сериализацию Java, так что это хороший выбор для клиента Java -> Связь с сервером Java.
Недостатком HTTP Invoker, в отличие от RMI, является то, что вы всегда получаете новые экземпляры объектов с сервера, поэтому, если объект, отправленный с клиента, изменяется на сервере, это изменение не будет отражено в экземпляр клиента.
Хорошая информация здесь: Соображения при выборе технологии