java web-services remoting rmi

¿Cuáles son los pros y los contras de los servicios web y RMI en un entorno solo de Java?



web-services remoting (5)

RMI es un gran transporte de desarrollo rápido, pero desaconsejaría usarlo en un entorno de producción. El problema de compatibilidad de serialización puede hacer que las cosas sean incómodas, debe coordinar sus implementaciones con mucho cuidado.

Los servicios web son ineficientes, sí, pero solo a través de hardware. Alternativamente, utilice XML simple, ligero XML-over-HTTP, en lugar de SOAP / WSDL completo.

Al desarrollar aplicaciones distribuidas, todas escritas en Java por la misma compañía, ¿elegiría servicios web o RMI? ¿Cuáles son los pros y contras en términos de rendimiento, acoplamiento flexible, facilidad de uso, ...? ¿Alguien elegiría WS? ¿Puedes construir una arquitectura orientada a servicios con RMI?


Si no lo va a necesitar (interopera con alguien que no es Java), y probablemente no lo sea, RMI va a ser mejor; menos código, menos configuración, menos sobrecarga de ancho de banda.

Una opción si tiene miedo de que vaya a necesitarlo es usar EJB3; usa RMI, es muy fácil de configurar e implementar, pero también le permite convertir sus llamadas en servicios web fácilmente si los necesita.

Hagas lo que hagas, no crees lo tuyo; apegarse a un estándar.


Trataría de pensarlo de esta manera:

¿Va en busca de servicios independientes que funcionen uno debajo de otro, y esos servicios pueden ser accedidos por aplicaciones que no son de Java en algún momento en el futuro? Luego, vaya a los servicios web.

¿Desea distribuir partes de una aplicación (mente en singular) en varios servidores? Luego opta por RMI y no tendrás que abandonar el universo Java para que todo funcione bien unido.


Yo elegiría WS.

  • Es poco probable que WS / RMI sea su cuello de botella.
  • ¿Por qué cerrar la puerta a otras tecnologías posibles en el futuro?
  • RMI puede tener problemas si la versión de las clases en el cliente / servidor no se sincroniza.

Y ... lo más probable es que elija los servicios REST.


mis elecciones son:

serialización estándar de java - pros: imho ofrece el máximo rendimiento, es fácil de implementar (estoy usando Spring para exponer la interfaz local como remota); contras: la serialización no funciona entre diferentes versiones de jvm

serialización binaria (por ejemplo, hessian from jetty) - pros: el mismo rendimiento que con la serialización java y funciona entre diferentes versiones jvm

WS: solo si existe una necesidad de interoperabilidad entre las diferentes plataformas java + .net, de lo contrario solo tiene peso suficiente.