Je suis très nouveau sur Java EE et j'essaie de comprendre le concept d'interfaces locales et d'interfaces distantes.
Dans les versions initiales de la spécification EJB, les EJB étaient "supposés" être des composants distants et la seule façon de les appeler était de faire un appel distant, en utilisant la sémantique RMI et toute la surcharge que cela implique (un appel réseau et une sérialisation d'objets pour chaque appel de méthode). Les clients EJB ont dû payer cette pénalité de performances même lorsqu'ils étaient colocalisés dans la même machine virtuelle avec le conteneur EJB.
Plus tard, Sun a réalisé que la plupart des applications métier ne distribuaient en fait pas les EJB sur un niveau différent et ils ont corrigé la spécification (dans EJB 2.0) en introduisant le concept d'interfaces locales afin que les clients colocalisés dans la même machine virtuelle avec le conteneur EJB puissent appeler des EJB en utilisant invocation directe de méthode, contournant totalement la sémantique RMI (et la surcharge associée).
On m'a dit que l'un des grands avantages de Java EE est qu'il est facile à mettre à l'échelle (ce qui, je pense, signifie que vous pouvez déployer différents composants sur différents serveurs)
Java EE peut évoluer, mais cela ne signifie pas nécessairement distribuer des composants. Vous pouvez exécuter une application Web + EJB sur un cluster sans séparer le niveau Web et le niveau EJB.
Êtes-vous censé utiliser des interfaces distantes si vous vous attendez à ce que votre application ait différents composants sur différents serveurs? Et utiliser les interfaces locales si votre application ne résidera que sur un serveur?
Je le formulerais comme ceci: utilisez des interfaces distantes si le client n'est pas dans la même JVM (cela ne signifie pas utiliser un seul serveur / JVM).
(...) Commencez par utiliser les interfaces locales et effectuez une mise à niveau progressive vers les interfaces distantes le cas échéant?
Je commencerais probablement par utiliser les interfaces locales. Et comme déjà indiqué, le passage aux interfaces distantes n'est pas toujours obligatoire (vous pouvez regrouper une structure colocalisée ).
Je suggère de vérifier les ressources mentionnées ci-dessous (les 2 premières sont assez anciennes mais toujours pertinentes, les 2 autres sont plus récentes).
Ressources