Les EJB sont construits sur RMI. Les deux impliquent des clients et des beans Java. Si vos clients doivent être écrits dans quelque chose d'autre (par exemple, .NET, PHP, etc.), optez pour des services web ou autre chose qui parle un protocole de communication 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'application Java EE EJB. Vous devez garder les JVM client et serveur en synchronisation ; vous ne pouvez pas mettre à niveau le client sans mettre à niveau le serveur. Vous devez écrire tous les services que le serveur d'application EJB fournit pour vous (par exemple, le pooling de connexions, les services de nommage et d'annuaire, le pooling, l'attente de requêtes, les transactions, etc.).
RMI est très bas niveau quand on y pense. Pourquoi redescendriez-vous jusqu'à CORBA ?
Un meilleur choix est EJB 3.0 par rapport à Spring. Cela dépend si vous aimez le développement POJO, si vous voulez un choix de technologies relationnelles autre que ORM et JPA, entre autres choses.
Vous pouvez payer pour un serveur d'application Java EE (par exemple, WebLogic, WebSphere) ou utiliser un open source (JBOSS, Glassfish et OpenEJB et ActiveMQ), ou vous pouvez rester sur Spring et déployer sur Tomcat, Jetty, Resin ou tout autre moteur servlet/JSP.
Spring offre beaucoup de choix en étant agnostique en termes de technologie : persistance (Hibernate, iBatis, JDBC, JDO, JPA, TopLink), communication distante (HTTP, Hessian, Burlap, RMI, service web SOAP), etc.
EJB 3.0 est une spécification avec de nombreux fournisseurs ; Spring ne peut être obtenu que chez Spring Source.
Je recommanderais Spring. C'est très solide, a beaucoup de traction, et ne va nulle part. Cela laisse toutes vos options ouvertes.
Les services web sont excellents en théorie, mais il y a des pièges auxquels vous devez faire attention :
- Latence. La première loi des objets distribués de Fowler : "Ne le faites pas !" Une architecture consistant en beaucoup de services SOAP distribués granulaires sera élégante, belle et lente comme la mélasse. Réfléchissez bien avant de distribuer.
- La sérialisation de l'XML en objets et vice versa consomme des cycles CPU qui ne fournissent aucune valeur commerciale en dehors de permettre à vos clients de parler un protocole agnostique de la plate-forme.
- SOAP est une norme qui devient de plus en plus gonflée et complexe chaque jour, mais elle bénéficie de beaucoup de support d'outils. Les fournisseurs l'aiment car cela aide à stimuler les ventes d'ESB. REST est simple mais moins bien compris. Il n'est pas pris en charge par les outils.
Le module de services web de Spring est très bon, mais faites attention au choix de déployer de cette manière. Écrivez en termes d'interfaces de service POJO. Celles-ci vous permettront d'obtenir l'isolation conceptuelle que vous souhaitez, de reporter le choix du déploiement jusqu'au dernier moment et de changer d'avis si la première réflexion ne fonctionne pas bien.