les pratiques se sont améliorées et que le NoSQL apporte des réponses.
Les EJBs sont un moyen de packager des groupes de fonctionnalités dans un artefact en exposant une façade normée sous forme de services. L’idée était de permettre de développer des applications complexes en composants des briques élémentaires bien séparées avec des appels transactionnels entre elles tout en permettant de masquer la localisation. C’était l’équivalent des annuaires de services qu’on retrouve aujourd’hui dans les microservices. Lorsque les EJBs étaient déployés ensemble, les appels se faisaient localement, ce qui permettait d’économiser la latence réseau en conservant l’isolation.
Pourquoi ça ne fonctionnait pas ?
Aujourd’hui : les microservices vont dans la même direction en s’appuyant sur d’autres protocoles. Les avancées dans les pratiques de découpage métier comme DDD, ou l’approche REST qui consiste à exposer uniquement des ressources, peuvent faire en sorte que les résultats soient meilleurs.
JAAS est la partie sécurité de J2EE, elle permet de faire du contrôle d’accès au niveau des services, par annotations ou à l’aide de XML. Cela permet de gérer la sécurité de manière déclarative.
Pourquoi ça ne fonctionnait pas ?
Aujourd’hui : JAAS est remplacé par des frameworks plus léger comme Spring Security, qui peuvent s’appuyer sur JAAS suivant les cas mais qui en masquent les limites.
La JVM était lente à démarrer, les applications lentes à déployer, et J2EE rendait difficile d’écrire du code facile à tester hors du serveur. Pour accélérer le cycle le développement, l’idée était de permettre un redéploiement à chaud de l’application sans avoir à tout recharger pour que le·a développeur·se ne soit pas interrompu·e dans son travail.
Pourquoi ça ne fonctionnait pas ?
Au final, la meilleure approche était de s’en passer, quitte à ajouter des couches d’indirections pour isoler artificiellement le code.
Aujourd’hui, la JVM et les serveurs d’applications ont été optimisés et les processeurs vont beaucoup plus vite. JEE de son côté a pris en compte ces problèmes et permet aujourd’hui de tester hors serveur.
Les alternatives à JEE tels que DropWizard ou Spring sont d’ailleurs encore plus rapides.
Les limites qui ont causé la nécessité d’avoir cette fonctionnalité ayant disparues, elle est désormais inutile.
Cette revue permet de dégager deux choses :
Beaucoup d’idées ont échoué pour cause de maturité autant, voire plus, que pour des raisons techniques.
Ensuite, les serveurs d’applications essayaient de résoudre beaucoup de problèmes tout seuls. Aujourd’hui, les solutions sont réparties à différents niveaux de la stack : de l’OS à la configuration réseau. Les causes sont multiples : nouvelles technologies, normalisation de l’utilisation de plusieurs langages, baisses des prix des serveurs … Cela permet de diminuer la complexité de ce qui est demandé aux stack applicatives et donc de faciliter l’adoption de nouvelles technologies. Cela veut aussi dire que les serveurs d’applications à l’ancienne sont désormais un poids mort dans un SI.
Les principales raisons de les conserver aujourd’hui sont le coût de la migration, les questions de licences et de support, et potentiellement l’intégration avec le reste de l’écosystème de l’éditeur.
Avec le temps qui passe et le mûrissement des alternatives plus légère comme Spring ou DropWizard, la force de ces arguments diminue petit à petit. En attendant que le serverless ou une autre approche les rendent à leur tour obsolètes.
Espérons que les serveurs d’applications pourront bientôt profiter de leur retraite bien méritée.