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

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

Quel est l'avantage D'EJB sur RMI, ou vice versa?

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

54
demandé sur Dean J 2010-01-06 18:03:32

3 réponses

Les EJB sont construits au-dessus de RMI. Les deux impliquent des clients Java et des beans. Si vos clients ont besoin d'être écrits dans autre chose (par exemple,. net, PHP, etc.) allez avec des services web ou quelque chose d'autre qui parle d'un protocole de fil agnostique de la plate-forme, comme HTTP ou XML sur HTTP ou SOAP.

Si vous choisissez RMI, vous n'avez pas besoin D'un serveur D'applications Java EE EJB. Vous devez synchroniser les JVM client et serveur; vous ne pouvez pas mettre à niveau le client sans mettre à niveau le serveur. Vous devez écrire tous les services que le EJB app server vous fournit (par exemple, Mise en commun de connexions, services de nommage et d'annuaire, mise en commun, mise en file d'attente de demandes, transactions, etc.).

Le RMI est assez bas quand on y pense. Pourquoi tu retournerais à CORBA?

Un meilleur choix est EJB 3.0 versus Spring. Cela dépend si vous aimez le développement POJO, veulent un choix de technologies relationnelles en plus ORM et JPA, entre autres choses.

Vous pouvez payer pour un serveur D'applications Java EE (par exemple, WebLogic, WebSphere) ou utilisez un open source (JBoss, Glassfish et OpenEJB et ActiveMQ), ou vous pouvez vous en tenir à Spring et déployer sur Tomcat, Jetty, Resin ou tout autre moteur servlet/JSP.

Spring offre beaucoup de choix en étant agnostique de la technologie: persistance (Hibernate, iBatis, JDBC, JDO, JPA, TopLink), remoting (HTTP, Hessian, Burlap, RMI, service Web SOAP), etc.

EJB 3.0 est une spécification avec de nombreux fournisseurs; Spring ne peut être obtenu qu'à partir de la Source Spring.

Je recommande Printemps. Il est très solide, a beaucoup de traction, ne va nulle part. Il laisse toutes vos options ouvertes.

Les services Web sont excellents en théorie, mais il y a quelques pièges que vous devez surveiller:

  1. latence. La première loi de Fowler sur les objets distribués: "Non!"Une architecture composée de nombreux services de savon distribués à grain fin sera élégante, belle et lente comme de la mélasse. Réfléchissez bien avant de distribuer.
  2. Ordonnancement du XML aux objets et à l'arrière consomme des cycles CPU qui ne fournissent aucune valeur métier en plus de permettre à vos clients de parler d'un protocole indépendant de la plate-forme.
  3. SOAP est un standard qui devient de plus en plus gonflé et complexe chaque jour, mais il a beaucoup de support d'outils. Les fournisseurs l'aiment parce qu'il aide à stimuler les ventes D'ESB. Le repos est simple mais pas aussi bien compris. Ce n'est pas pris en charge par les outils.

Le module de service Web de Spring est très bon, mais faites attention à choisir de déployer de cette façon. Ecrire en termes D'interfaces de service POJO. Ceux-ci vous permettront d'obtenir l'isolement conceptuel que vous voulez, de reporter le choix de déploiement jusqu'au dernier moment et de vous laisser changer d'avis si la première pensée ne fonctionne pas bien.

115
répondu duffymo 2015-11-28 19:09:22

Entre EJB et RMI, EJB serait certainement mieux - il a tout ce que RMI A et beaucoup plus via le conteneur (pool d'objets, gestion des transactions, etc.)

Entre EJB et services web, les services web vous donneront plus de portabilité si vous voulez pouvoir les appeler à partir d'applications non java à l'avenir. EJB vous donne à nouveau des choses comme la gestion des transactions et la mise en commun que vous pourriez ne pas obtenir "hors de la boîte" avec les services web.

Personnellement, si je le faisais, je le ferais utilisez probablement EJB ou un framework d'objet distant similaire (spring remoting vient également à l'esprit). Si vous avez besoin de la possibilité d'appeler les objets à partir d'une application non java, vous pouvez toujours faire face à vos EJB avec des proxies de service web simples au besoin.

10
répondu Eric Petroelje 2010-01-06 15:11:50

Re: services web (SOAP, REST) Si vos serveurs dorsaux ne seront pas exposés publiquement, vous ne bénéficierez d'aucun avantage en utilisant des interfaces de service web indépendantes de la plate-forme telles que SOAP/REST.
En fait, vous encourrez une pénalité avec tous les frais généraux ajoutés par les balises XML enveloppant les données à travers un appel distant, sans parler du hit que vous prendrez de marshalling et unmarshalling le XML aux objets java.
Bien que tout appel distribué va nécessiter certains niveau de sérialisation - même RMI / EJB, mais le prix est plus élevé lors de la sérialisation en XML lisible par l'homme.

Vous n'avez peut-être pas besoin de coder des appels distants en java, vous pouvez gérer votre service avec une instance Apache httpd, configurée pour équilibrer la charge sur plusieurs serveurs java à l'aide de mod_jk ou mod_proxy.
Ces modules peuvent être utilisés pour équilibrer la charge sur des conteneurs de servlet tels que tomcat / jetty, ou des conteneurs ejb tels que JBoss/glassfish.

4
répondu crowne 2010-02-19 07:25:27