54 votes

Services Web vs EJB vs RMI, avantages et inconvénients?

Mon serveur Web serait surchargé rapidement si tout le travail y était effectué. Je vais mettre un deuxième serveur derrière, pour traiter les données.

Quel est l'avantage des EJB par rapport à RMI ou inversement?

Qu'en est-il des services Web (SOAP, REST)?

116voto

duffymo Points 188155

Les ejb sont construites au-dessus du RMI. Les deux impliquent des clients Java et les haricots. Si vos clients ont besoin d'être écrite dans quelque chose d'autre (par exemple, .NET, PHP, etc.) aller avec des services web ou quelque chose d'autre qui parle de la plate-forme agnostique fil de protocole comme HTTP ou XML via HTTP ou SOAP.

Si vous choisissez RMI, vous n'avez pas besoin de Java EE les EJB serveur d'application. Vous devez garder le client et le serveur de machines virtuelles dans le synch; vous ne pouvez pas mettre à niveau le client, sans mise à niveau du serveur. Vous devez écrire tous les services que l'EJB serveur d'application fournit pour vous (par exemple, le regroupement de connexions, de nommage et d'annuaire de services, la mise en commun, demander de files d'attente, les transactions, etc.).

RMI est assez faible, niveau de quand vous pensez à ce sujet. Pourquoi laisseriez-vous tout le chemin du retour vers CORBA?

Un meilleur choix est d'EJB 3.0 ou au Printemps. Cela dépend si vous aimez POJO développement, veulent un choix de technologies relationnelles en plus de l'ORM et JPA, entre autres choses.

Vous pouvez payer pour un serveur d'application Java EE (par exemple, WebLogic, WebSphere) ou l'utilisation d'un open source (JBOSS, Glassfish, Tomcat et OpenEJB et ActiveMQ), ou vous pouvez coller à Ressort et déploiement sur Tomcat, Jetty, de la Résine ou tout autre moteur de servlet/JSP.

Le printemps offre beaucoup de choix en étant une technologie donnée: (persistance Hibernate, iBatis, JDBC, JDO, JPA, TopLink), l'accès à distance (HTTP, de Hesse, de la toile de Jute, RMI, web service SOAP), etc.

EJB 3.0 est un spec avec de nombreux fournisseurs; Ressort ne peut être eu de Source.

Je recommande Printemps. Il est très solide, a beaucoup de traction, n'est-ce pas aller n'importe où. Il laisse toutes les options ouvertes.

Les services Web sont bien en théorie, mais il y a quelques pièges que vous avez besoin pour regarder dehors pour:

  1. Le temps de latence. Fowler première loi d'objets distribués: "Ne le fais pas!" Une architecture composée de beaucoup de fines distribué du SAVON services seront élégante, belle, et lent que la mélasse. Réfléchissez bien avant de les distribuer.
  2. Triage à partir de XML aux objets et à l'arrière consomme des cycles de CPU qui ne fournissent pas toute la valeur de l'entreprise en plus de permettre à vos clients de parler de la plate-forme agnostique protocole.
  3. Le SAVON est un standard qui est de plus en plus lourd et complexe tous les jours, mais il a beaucoup de support de l'outil. Les vendeurs l'aime parce qu'il aide à stimuler les ventes de l'ESBs. RESTE est simple mais pas aussi bien compris. Il n'est pas pris en charge par les outils.

Le printemps du web module de service est très bon, mais être prudent sur le choix de déploiement de cette façon. Écrire en termes de POJO des interfaces de service. Ces éléments vont vous permettre d'obtenir le conceptuel d'isolation que vous souhaitez, de retarder le déploiement de choix jusqu'au dernier moment, et de vous permettre de changer votre esprit si la première pensée ne fonctionne pas bien.

9voto

Eric Petroelje Points 40734

Entre EJB et RMI, EJB serait certainement mieux - il a tout le RMI a et beaucoup plus via le conteneur (mise en commun d'objets, la gestion des transactions, etc.)

Entre EJB et de services web, services web serait de vous donner plus de portabilité si vous voulez être en mesure de les appeler à partir de non-applications java dans le futur. EJB nouveau vous donne des choses comme la gestion des transactions et la mise en commun de ce que vous pourriez ne pas avoir de "out of the box" avec des services web.

Personnellement, si je devais le faire, je serais probablement utiliser des EJB ou à un objet distant framework (spring remoting vient à l'esprit). Si vous avez besoin d'avoir la possibilité d'appeler les objets à partir d'un non-application java, vous pouvez toujours à l'avant de votre Ejb avec le service web simple, les procurations nécessaires.

3voto

crowne Points 6002

Re: web services (SOAP, REST) Si vos serveurs ne sont pas va être exposée au public, alors vous n'êtes pas d'avoir un quelconque avantage de l'utilisation de plate-forme indépendante des interfaces de service web, tels que SOAP/REST.
En fait, vous serez encourir une peine avec tous les frais généraux ajouté par les balises XML emballage des données à travers un appel à distance, pour ne pas mentionner le coup vous allez prendre du rassemblement et de l'unmarshalling le fichier XML en objets java.
Bien que tout appel distribué à va nécessiter un certain niveau de sérialisation - même RMI/EJB, mais le prix est plus élevé lors de la sérialisation de XML lisible par l'homme.

Vous ne pouvez pas besoin de code à distance des appels en java à tous, vous pouvez avant de votre service, avec une plaine apache httpd exemple, qui est configuré de manière à équilibrer la charge entre plusieurs serveurs java à l'aide de mod_jk ou mod_proxy.
Ces modules peuvent être utilisés pour équilibrer la charge entre des conteneurs de servlet comme tomcat/jetty, ou les conteneurs ejb comme jboss/glassfish.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X