2012-04-17 12 views
11

Esto puede sonar similar a this, pero no lo es.¿Todavía es útil implementar EJB con RMI cuando puede implementar servicios web (SOA/REST)?

Entiendo por qué EJB y RMI, y he estado trabajando con servicios web bajo SOA por un tiempo. Quiero saber por qué es útil trabajar usando EJB exponiendo interfaces remotas bajo RMI en lugar de publicar servicios web (SOA/REST, pero principalmente SOA). No estoy preguntando cuál es mejor, solo quiero saber una muy buena razón de por qué debería preferir implementar EJB con interfaces remotas a través de los servicios web.

He revisado muchas páginas web, pero todas parecían obsoletas. Hasta ahora, lo que tengo es que EJB expone las interfaces remotas solo es mejor que WS cuando se integra con el sistema heredado de Java. Si quiero administrar transacciones, podría implementar EJB con interfaces locales. Además, no creo que elegir EJB sobre RMI sea más eficiente que una interfaz de servicio web.

¿Estoy en lo cierto? ¿Se me escapa algo?

Realmente gracias de antemano.

Respuesta

21

EJB son mejores si

  • necesita realizar número de llamadas que deben hacerse en una transacción (en teoría tenemos servicios web transaccionales, pero no cada aplicación le ofrezca), (estado) Los EJB brillan cuando se trata de la gestión de transacciones. Casi siempre que necesite estado EJB sería mejor que el servicio web;
  • necesita funcionamiento - Web Los servicios son lentos: utilizan XML/JSON empujado a través de HTTP, RMI sobre El protocolo IIOP utilizado por EJB es mucho más eficiente;
  • necesita conectarse a algún sistema heredado que utiliza especificaciones desactualizadas para Java Web Services (cosas desagradables de Axis 1.0, no compatibles con JAX-WS) puede ser una pesadilla conectar todo con servicios web, tratar con definiciones de WSDL no compatibles , extraños sobres SOAP. Los EJB son compatibles con versiones anteriores, el antiguo EJB 2 podría conectarse sin ningún problema con EJB 3.1;
  • EJB modernos (3.X EJB) puede exponer su interfaz como un servicio JAX-WS SOAP/WSDL o servicio REST JAX-RS mediante la adición de dos o tres anotaciones simples

por qué los servicios web (REST) ​​están tan popular entonces? Los EJB pueden conectarse solo a otra aplicación Java. La mayoría de las modernas aplicaciones de Internet enriquecidas están escritas en JavaScript, por lo que la única forma de conectarlas con cualquier back-end es usar algún tipo de servicio web (generalmente REST + JSON). Para tales aplicaciones, los EJB son bastante inútiles.

+0

Gracias, pero antes de marcarlo como respondido, el primero no sería una razón válida, porque puedo implementar un servicio web con un EJB exponiendo una interfaz local ¿verdad? Entonces la transacción sería la misma. –

+2

Es cierto que el problema comienza cuando necesita hacer una serie de llamadas separadas en una transacción. Los servicios web generalmente no tienen estado, y uno tiene que administrar las transacciones "a mano", lo que puede ser engorroso. Stateful EJB daría eso gratis. –

+0

Bueno, también puede tener servicios web con estado, incluso utilizando la última razón que dio antes. Así que iré por la segunda y tercera razón, la eficiencia (un poco, supongo) y el legado. ¡Gracias! –

6

Tanto el cliente como el servicio deben estar escritos en Java si usa RMI como protocolo de conexión.

SOAP utiliza XML a través de HTTP, y REST usa HTTP pura para la comunicación entre el cliente y el servicio. Cualquiera de los extremos de la conversación puede escribirse en cualquier idioma que pueda enviar solicitudes apropiadas a través de HTTP, lo cual es mucho menos restrictivo.

Creo que esta es una razón por la que los servicios web a través de HTTP se han ganado a través de RMI. Victoria simple y abierta, todo el tiempo.

+0

¿Ya no es digno seguir aprendiendo EJB con interfaces remotas? Como si quisiera aprender Smalltalk (sería solo por diversión y aprendizaje, pero no útil)? –

+0

No llegaría tan lejos. La respuesta a esa pregunta depende de tus circunstancias. – duffymo

+0

Ok, pero la única circunstancia en la que será útil hoy en día sería la integración con los sistemas heredados de Java, ¿verdad? –

6

Son cosas diferentes para diferentes propósitos.

EJB son para usar dentro de un N -tier sistema que está estrechamente acoplado y usted tiene el control de todos los elementos.Ofrecen codificación directa en el idioma utilizando lo que parecen ser llamadas a métodos ordinarios, y rendimiento de tipo LAN a través de IIOP o cualquier otro protocolo que el proveedor de EE haya implementado.

SOAP/REST es la mejor opción para su uso a través de Internet, o en B2B u otras situaciones en las que no tiene el control de ambos extremos y necesita un acoplamiento flexible. Obtienes un rendimiento mucho más lento debido a todo el XML, pero también obtienes un protocolo estándar de la industria en el medio que le da a ambos extremos protección contra problemas de abastecimiento único.

+0

Esta podría ser otra pregunta, pero es posible adaptar fácilmente el EJB para exponer su interfaz como un servicio web, por lo tanto, podría iniciar la primera arquitectura que defina y si en el futuro necesita ampliarla puede exponerla a través de servicios web, ¿o no? –

+0

@ChristianVielma Esa es otra pregunta, de acuerdo, y no obtendrás respuesta de mí ;-) Hazlo como pregunta. – EJP

Cuestiones relacionadas