usar tipos servicios servicio saber otro ejemplo cuando crear consumir como web-services remoting jax-ws rmi

web services - tipos - RMI vs. Servicios web. ¿Qué es lo mejor para Java2Java remotamente?



web service pdf (9)

Soy nuevo en ambos servicios web y RMI y me pregunto cuál es la mejor manera de hacer la comunicación remota entre diferentes aplicaciones web, cuando todas estas aplicaciones están escritas en Java, que es cuando los diferentes lenguajes de programación no importan (que sería el ventaja de WS).

Si bien, por un lado, supongo que hay una sobrecarga de rendimiento al usar servicios web (¿alguien tiene algunos números para probar eso?), Por otro lado, me parece que los servicios web están mucho más débilmente acoplados y se pueden usar para implementar una arquitectura más orientada a servicios (SOA) (que no es posible con RMI, ¿verdad?).

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

Gracias


¿Qué hay de Spring Remoting? Combina el protocolo HTTP de tipo REST con el formato binario de RMI. Funciona perfectamente para mi


@Martin Klinke

"El rendimiento depende de los datos que planea intercambiar. Si desea enviar redes objeto complejas 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 tiene algún tipo de de contenido textual / XML de todos modos, los servicios web pueden ser equivalentes o incluso más rápidos, ya que entonces no necesitarías convertir nada en absoluto (para la comunicación) ".

Por lo que sé, el problema de rendimiento hace la diferencia durante la serialización-deserialización, es decir, el proceso de ordenamiento-demarshalling. No estoy seguro de que ambos términos sean los mismos. En programación distribuida, no estoy hablando del proceso que ocurre en la misma JVM, se trata de cómo se copian los datos. Se pasa por valor o se pasa por referencia. El formato binario corresponde a pasar por valor, lo que significa copiar un objeto al servidor remoto en binarios. Si tiene alguna duda hasta ahora, me gustaría escuchar

¿Cuál es la diferencia entre enviar en formato binario y contenido textual / xml en términos de marshalling-demarshalling o serialization-deserialization?

Solo estoy adivinando. No depende del tipo de datos que envíe. Sea cual sea el tipo de datos que envíe, formará parte del proceso de clasificación y demarcación y al final se enviará en binarios, ¿no?

aplausos Hakki


Como fanático de Spring y exponente de SOA por muchos años, recomendaría Spring remoting. Este sabor del exportador de servicios hará el truco para RMI.

org.springframework.remoting.rmi.RmiServiceExporter

Otros transportes están por supuesto disponibles. La serialización es bastante manejable si la versión de sus interfaces (puntos finales) y DTOs de manera sensata y administrar los UUID de serialización correctamente. Postfixamos ''Alpha'', ''Bravo'' en nuestras interfaces y objetos e incrementamos, disminuimos y reinventamos dónde y cuándo sea necesario. También reparamos nuestros UUID de serialización a 1 y aseguramos que los cambios sean solo addativos, de lo contrario pasamos de decir, ''Bravo'' a ''Charlie''. Todo manejable en una configuración Enterprise.


Los servicios web permiten una arquitectura débilmente acoplada. Con RMI, debe asegurarse de que las definiciones de clase permanecen sincronizadas en todas las instancias de la aplicación, lo que significa que siempre debe implementarlas todas al mismo tiempo, incluso si solo se cambia una de ellas (no necesariamente, pero es requerido bastante a menudo debido a los UUID de serie y otras cosas)

Además, no es muy escalable, lo que podría ser un problema si desea tener balanceadores de carga.

En mi opinión, RMI funciona mejor para aplicaciones locales más pequeñas, que no están relacionadas con Internet pero que aún deben estar desacopladas. Lo he usado para tener una aplicación Java que maneja las comunicaciones electrónicas y estaba bastante satisfecho con los resultados. Para otras aplicaciones que requieren una implementación más compleja y trabajo en Internet, prefiero usar servicios web.


Mi experiencia con RMI y Web Services refleja sus suposiciones anteriores. En general, el rendimiento de RMI supera con creces los servicios web, pero la especificación de interfaz se establece explícitamente para los servicios web.

Tenga en cuenta que ninguno de estos protocolos requiere que las aplicaciones en ambos lados sean Java. Yo tendería a usar los servicios web cuando tenía uno o más socios externos que estaban implementando la interfaz, pero RMI si tenía el control de ambos extremos de la conexión.


Para Spring Remoting (supongo que te refieres a HTTP Invoker), ambos lados deberían usar Spring, si es el caso, se puede discutir.

Para una aplicación de Java a Java, RMI es una buena solución, JAX-RPC o JAX-WS para comunicación Java-to-Java deben evitarse si los clientes no están bajo su control o pueden moverse a otra plataforma.


RMI puede ser la mejor dirección si necesita mantener un estado complejo.


Si utiliza servicios web o un enfoque más "nativo" también depende del medio ambiente. Si tiene que pasar por un proxy o algún firewall corporativo, es más probable que los Web Services funcionen, ya que dependen solo de HTTP. RMI requiere que abra otro puerto para su aplicación que puede ser difícil (aunque no técnicamente) en algunos entornos ...

Si sabe que este problema no es un problema, debería considerar usar RMI. SOA no depende tanto de la tecnología como del buen diseño del servicio. Si tiene un contenedor EJB, puede llamar beans de sesión a través de RMI y exponerlos como servicios web, si es que realmente lo necesita, por cierto.

El rendimiento depende de los datos que planea intercambiar. Si desea enviar redes objeto complejas de una aplicación a otra, probablemente sea más rápido con RMI, ya que se transfiere en un formato binario (generalmente). Si tiene algún tipo de contenido textual / XML de todos modos, los servicios web pueden ser equivalentes o incluso más rápidos, ya que entonces no necesitaría convertir nada en absoluto (para la comunicación).

HTH,
Martín


Una cosa que favorece a WS sobre RMI es que WS funciona a través del puerto HTTP 80/443 que normalmente no están bloqueados en los firewalls, pueden funcionar detrás de NAT, etc. RMI tiene un protocolo de red subyacente muy complejo que requiere abrir puertos RMI, y también podría no funcionar si el cliente está NATTED. En segundo lugar, con RMI está limitando su control a la comunicación JAVA-JAVA, mientras que con Webservies no existe tal limitación. Es mucho más fácil depurar los servicios web a través del cable ya que los datos son SOAP / HTTP, que se pueden capturar fácilmente a través de herramientas de rastreo para la depuración. No sé de una manera fácil de hacer esto a través de RMI. Además RMI es realmente muy viejo y no ha recibido mucha atención en los últimos años. Fue grande en los días en que CORBA era grande, y tanto RMI CORBA son tecnologías realmente anticuadas. La mejor opción son los servicios web de estilo REST.