Pregunta

Soy nuevo tanto en Servicios Web y de RMI y me pregunto cual es el mejor camino para hacer de la comunicación remota entre diferentes aplicaciones web, cuando estas aplicaciones están escritas en Java, que es cuando los diferentes lenguajes de programación no importa (lo cual sería la ventaja de derecho por el LR).

Mientras que por un lado me imagino que hay una sobrecarga de rendimiento cuando se utilizan los servicios web (¿alguien tiene algunos números para demostrar que?), por otro lado, me parece que los servicios web son mucho más débilmente acoplados y puede ser usado para implementar un servicio de arquitectura orientada a servicios (SOA) (la cual no es posible con RMI, ¿verdad?).

Aunque esta es una pregunta general, ¿cuál es tu opinión?

Gracias

¿Fue útil?

Solución

Los servicios web permiten un acoplamiento flexible arquitectura.Con RMI, usted tiene que asegurarse de que las definiciones de clase permanecer en sincronización en todas las instancias de la aplicación, lo que significa que siempre tiene que implementar todos ellos al mismo tiempo, incluso si sólo uno de ellos es cambiado (no necesariamente, pero es necesario muy a menudo debido a que el Uuid de serie y otras cosas)

También no es muy escalable, lo que podría ser un problema si usted quiere tener los equilibradores de carga.

En mi mente RMI funciona mejor para los más pequeños, aplicaciones locales, que no están relacionados con internet, pero todavía tienen que estar desconectados.Lo he utilizado para tener una aplicación java que se encarga de las comunicaciones electrónicas y yo estaba bastante satisfecho con los resultados.Para otras aplicaciones que requieren más complejos de implementación y de trabajo a través de internet, prefiero el uso de servicios web.

Otros consejos

Ya sea que usted utilice los Servicios Web o una más "nativo" enfoque depende del ambiente así.Si usted tiene que pasar a través de un proxy o algún firewall corporativo(s), los Servicios Web son más propensos a trabajar, ya que dependen de sólo HTTP.RMI requiere abrir otro puerto para su aplicación que puede ser difícil (no técnicamente, aunque en algunos entornos...

Si usted sabe que este problema no es un problema, usted debe considerar el uso de RMI.SOA no depende de la tecnología tanto como en el diseño de servicios.Si usted tiene un contenedor EJB, usted puede llamar beans de sesión a través de RMI y, además, exponer como servicios web, si usted realmente necesita, por el camino.

El rendimiento depende de los datos que usted está planeando para el intercambio.Si desea enviar un objeto complejo redes de una aplicación a otra, es probablemente más rápido con RMI, ya que se transfiere en un formato binario (por lo general).Si usted tiene algún tipo de texto/XML contenido de todos modos, los servicios web pueden ser equivalentes o incluso más rápido, ya que entonces no sería necesario para convertir cualquier cosa en absoluto (por comunicación).

HTH,
Martin

Una cosa que favorece a derecho por el LR sobre RMI es que WS funciona a través de HTTP puerto 80/443 que normalmente no están bloqueados en el cortafuegos , puede trabajar detrás de NAT, etc.RMI tiene un complejo protocolo de red subyacente que requiere que usted abra RMI puertos, y también podría no funcionar si el cliente es NATTED.En segundo lugar, con RMI están limitando su slef para JAVA-JAVA comunicación, mientras que con Webservies no hay tal limitación.Es mucho más fácil de depurar Webservices sobre el alambre, como los datos se SOAP/HTTP , que puede ser fácilmente capturada a través de oler herramientas para la depuración.No sé de una manera fácil de hacer esto a través de RMI.Además de RMI es realmente muy viejo y no ha recibido mucha atención durante los últimos años.Fue grande en los días cuando los CORBA era grande , y tanto RMI, CORBA son realmente anticuado tecnologías.La mejor opción es DESCANSAR estilo de Webservices.

Mi experiencia con RMI y Servicios Web refleja su conjetura anterior.En general, el RMI rendimiento excede web de servicios, pero la especificación de la interfaz explícitamente para los Servicios Web.

Tenga en cuenta que ninguno de estos protocolos requiere que las aplicaciones en ambos lados, sean de Java.Yo tendería a utilizar los Servicios Web cuando tenía uno o más socios externos que se implemente la interfaz, pero RMI si estaba en el control de ambos extremos de la conexión.

RMI puede ser la mejor dirección en el caso de que usted necesita para mantener complejo estado.

@Martin Klinke

"El rendimiento depende de los datos que usted está planeando para el intercambio.Si desea enviar un objeto complejo redes de una aplicación a otra, es probablemente más rápido con RMI, ya que se transfiere en un formato binario (por lo general).Si usted tiene algún tipo de texto/XML contenido de todos modos, los servicios web pueden ser equivalentes o incluso más rápido, ya que entonces no sería necesario para convertir cualquier cosa en absoluto (por comunicación)."

Que yo sepa el problema de rendimiento que hace la diferencia durante la serialización-deserialización en otras palabras, el cálculo de referencias-demarshalling proceso.No estoy seguro de que estos dos términos son los mismos btw En programación distribuida,no estoy hablando sobre el proceso que ocurre en la misma JVM,es acerca de cómo copiar datos.Es pasar por valor o pasar por referencia.Formato binario corresponde a paso por valor lo que significa que la copia de un objeto de servidor remoto en archivos binarios.Si usted tiene alguna duda, hasta ahora, me gustaría escuchar

¿cuál es la diferencia entre el envío en formato binario y de texto/xml contenido en términos de clasificación-demarshalling o serialización-deserialización?

Sólo estoy guessin.No depende de qué tipo de datos que usted envía.Independientemente del tipo de datos que usted envíe será parte de la clasificación-demarshalling proceso y al final se enviarán en archivos binarios de derecho?

saludos Hakki

¿Qué acerca de Spring Remoting.Combina el RESTO-como el protocolo HTTP con el formato binario de la RMI.Funciona a la perfección para mí.

Como un Muelle, un intolerante y un exponente de SOA para muchos años te aconsejo Spring remoting.Este sabor de servicio exportador de hacer el truco para RMI.

org.springframework.remoting.rmi.RmiServiceExporter

Otros medios de transportes disponibles.La seriación cosa es bastante manejable si la versión de interfaces (puntos finales) y DTOs sensatez y gestionar la seriación Uuid correctamente.Nos postfix 'Alfa', 'Bravo' a nuestras interfaces y objetos y de incremento, decremento & reinventar cuando y donde sea necesario.También hemos de fijar nuestra seriación Uuid a 1 y asegurar que los cambios son sólo addative, de lo contrario vamos a pasar de decir, 'Bravo' a 'Charlie'.Todos manejable en una Empresa de instalación.

Para la Primavera de comunicación Remota (supuse que te refieres HTTP Invoker), ambos lados deben utilizar la Primavera, si es el caso que puede ser discutido.

Para un Java para aplicaciones Java RMI es una buena solutionö, JAX-RPC o JAX-WS para Java-para-Java comunicación debe ser evitado si los clientes no están bajo su control o puede mover a otra plataforma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top