2008-09-23 9 views
10

Lors du développement d'applications distribuées, toutes écrites en Java par la même société, choisiriez-vous Web Services ou RMI? Quels sont les avantages et les inconvénients en termes de performance, de couplage lâche, de facilité d'utilisation, ...? Est-ce que quelqu'un choisirait WS? Pouvez-vous construire une architecture orientée services avec RMI?Quels sont les avantages et les inconvénients des services Web et RMI dans un environnement Java uniquement?

Répondre

9

Je vais essayer d'y penser de cette façon:

Vous partez pour des services indépendants en cours d'exécution sous l'autre, et ces services sont accessibles par des applications non-java un peu de temps à l'avenir? Ensuite, allez pour les services Web.

Voulez-vous simplement diffuser des parties d'une application (attention au singulier) sur plusieurs serveurs? Alors optez pour RMI et vous n'aurez pas à quitter l'univers Java pour que tout fonctionne en étroite collaboration.

+0

Bonne approche pour y penser. N'oubliez pas non plus la complexité et les problèmes supplémentaires liés à l'exécution d'un registre RMI pour la recherche de services. C'est à tout le moins un port d'addition ouvert et au pire des problèmes d'hébergement de ce registre. –

6

Je choisirais WS.

  • Il est peu probable que WS/RMI soit votre goulot d'étranglement.
  • Pourquoi fermer la porte à d'autres technologies possibles à l'avenir?
  • RMI peut rencontrer des problèmes si la version des classes sur le client/serveur n'est pas synchronisée.

Et ... Je choisirais très probablement des services REST.

+1

Vous ne pouvez pas dire si c'est improbable tant que vous n'avez pas mesuré. –

1

mes choix sont:

sérialisation standard java - pros: offre IMHO les meilleures performances, simple à mettre en œuvre (j'utilise Spring pour exposer l'interface locale comme une seule télécommande); contre: sérialisation ne fonctionne pas entre les différentes versions jvm

sérialisation binaire (par exemple la toile de jute de la jetée) - pros: mêmes performances qu'avec sérialisation Java et fonctionne entre les différentes versions jvm

WS: que s'il y a une besoin d'interopérabilité entre différentes plates-formes Java +. Net, sinon il est trop lourd.

1

RMI est un grand transport de développement rapide, mais je déconseille de l'utiliser dans un environnement de production. Le problème de compatibilité de sérialisation peut rendre les choses difficiles, vous devez coordonner vos déploiements avec beaucoup de soin.

WebServices sont inefficaces, oui, mais seulement par le biais du matériel. Vous pouvez également utiliser XML-sur-HTTP simple et léger, plutôt que SOAP/WSDL complet.

2

Si vous n'en avez pas besoin (interop avec Java), et vous ne l'avez probablement pas, RMI va être meilleur; moins de code, moins de configuration, moins de temps système de bande passante.

Une option si vous avez peur que vous en ayez besoin C'est d'utiliser EJB3; il utilise RMI, est très facile à installer et à déployer, mais vous permet également de transformer vos appels en services Web facilement si vous en avez besoin.

Quoi que vous fassiez, faites et non créez votre propre objet; s'en tenir à une norme.

+0

Les applications peuvent ne pas être en cours d'exécution dans un environnement prenant en charge les EJB –

Questions connexes