Page d'accueil
 Accueil
Qu'est-ce ?
Besoins
Fonctionnalités
 JSP
Principe
Avantages
 Panorama
Comparatif
Compatibilté
Pérénité
Richesse fonc.
Coût
 Divers
Glossaire
Liens
  Accueil
  Qu'est-ce ?     Besoins     Fonctionnalités    

  Les grandes fonctions du serveur d'applications



Le support des plates-formes

Le support des principales plates-formes du marché est une qualité première attendue chez ce type d'outil. Tout l'enjeu de cette fonctionnalité est de désolidariser la technologie applicative de la machine hébergeant l'application afin d'offrir davantage de liberté et d'évolutivité. Pour ce faire, le serveur d'applications doit implémenter un ensemble d'API propre à chacun des nombreux systèmes d'exploitation.

A titre d'exemple, lorsqu'une application fait appel à des fonctions dites système telles que l'ouverture, l'écriture, la lecture ou la suppression de fichiers, le serveur d'applications doit être en mesure de les exécuter indépendamment de la plate-forme utilisée.


Répartition de charges

Un des devoirs du serveur d'applications est d'assurer la fiabilité et les performances de l'application. Dans ce contexte, la fonctionnalité de répartition de charges joue un rôle essentiel. D'un point de vue technique, cette approche se traduit généralement par l'exécution de plusieurs instances (ou process) qu'il est possible de répartir sur différentes machines serveur. Cette architecture permet également de scinder l'application en modules différents, sans avoir l'obligation de reproduire sur chacun des serveurs la totalité d'une application. Ainsi, un module fréquemment sollicité peut être isolé sur un seul serveur afin d'absorber plus facilement la charge.

A ce niveau, les solutions basées sur les technologies objet disposent d'atouts certains pour la mise en place d'architectures complexes. La distribution des objets permet en effet de répartir plus simplement différents modules sur différents serveurs.


La disponibilité

Dans une configuration où l'application est répliquée sur plusieurs serveurs physiques, il est plus facile de mettre en place la fonctionnalité de reprise sur incident. En cas de " plantage " au niveau applicatif ou serveur, la requête utilisateur est redirigée vers un serveur disponible de manière transparente. La tolérance aux pannes à ce niveau permet d'offrir la disponibilité au niveau application puisqu'il existe toujours un module actif pouvant être invoqué par les utilisateurs.

Toutefois, le serveur d'applications doit être également capable de maintenir l'ensemble des opérations effectuées par l'utilisateur. Pour éviter des désagréments néfastes, il doit donc prévoir la sauvegarde du contexte utilisateur. Cela implique la réplication des sessions utilisateur sur une autre machine. A ce niveau, cette réplication se fait soit en base de données, soit sur disque, soit en mémoire. Les serveurs d'applications les plus avancés automatisent la gestion de reprise sur incident au niveau session.


Le pooling de connexions

En architecture web, l'ensemble des utilisateurs accède à la base de données depuis le serveur d'applications. Cette connexion peut être ponctuelle, mais les temps de réponse deviennent alors catastrophiques. La solution la plus couramment retenue consiste à passer par un pool de connexions. Ceci consiste à démarrer un nombre prédéfini de connexions vers un SGBDR. Le serveur d'applications dirige ensuite les demandes utilisateur en répartissant les différentes requêtes sur les connexions disponibles. Ceci permet d'avoir la maîtrise du nombre de connexions maximales ouvertes et d'éviter le goulet d'étranglement à ce niveau.

Dans un contexte où l'application est répartie sur plusieurs serveurs, une autre fonctionnalité attendue est la gestion des connexions dans un mode multi-instances. Le paramétrage d'un pool de connexions s'effectuant la plupart du temps au niveau application, chaque instance applique naturellement la formule retenue en terme d'ouverture de connexions. Le serveur d'applications doit à ce niveau répartir les différentes connexions entre les différentes instances.


L'ouverture vers l'existant, le respect des standards

En architecture web transactionnelle, la reconnaissance des serveurs HTTP et l'accès aux principales bases de données relationnelles du marché par le serveur d'applications est une condition " sine qua non ". Ces ponts ne se révèlent cependant pas suffisants dans la plupart des contextes, tout d'abord parce que peu d'applications fonctionnent de manière isolée. En effet, les entreprises possèdent généralement un existant auquel il faut s'interfacer. Ainsi, l'ouverture vers les protocoles de communication, les principaux ERP et les mainframes est indispensable pour ne pas limiter fonctionnellement l'application. Ensuite, dans la même optique, l'évolutivité et la pérennité de l'application dépendent en partie de la capacité du serveur d'applications à respecter les standards tels que Java, XML et à intégrer les nouvelles technologies.


La gestion de contexte

Aujourd'hui, il n'est pas imaginable de réaliser des sites transactionnels sans mettre à profit les capacités de gestion de contexte. Le principe de gestion de contexte consiste à conserver le temps d'une session les données propres à l'utilisateur contrairement aux variables d'application qui ne sont rien d'autre que des variables globales. Toutefois, les variables de session spécifiques à un utilisateur ne sont envisageables que si l'utilisateur peut être identifié. Une des fonctionnalités de base du serveur d'applications est de gérer automatiquement cette identification, suivant une des trois méthodes : le cookie, l'URL long et la variable cachée. Ceci permet au serveur d'applications de créer un espace mémoire dédié à chaque utilisateur. C'est à ce niveau, généralement dans un objet session, que vont être stockées les informations spécifiques à chacun des utilisateurs.

Un serveur d'applications particulièrement étoffé sera celui qui proposera nativement tout un ensemble de fonctions permettant de gérer le plus finement possible ces sessions utilisateur : définition d'un time-out, lancement d'un événement en fin de session, etc.


La sécurité

Si la sécurité au niveau HTTP n'est pas une fonctionnalité qui concerne directement le serveur d'applications, ce dernier se doit de faciliter sa mise en place. En effet, il est important de noter que la phase de cryptage/décryptage des pages est particulièrement coûteuse en temps, et peut considérablement pénaliser les performances. Cette problématique de dégradation des performances est donc importante. Pour cela, et étant donné que l'ensemble des pages d'une application n'a pas à être sécurisé (ou exceptionnellement), il est important de pouvoir déployer des applications utilisant à la fois les services sécurisés et également les services non sécurisés. C'est à ce niveau qu'interviendra le serveur d'applications, qui doit permettre de déployer une même application s'adressant à deux ports HTTP différents. Enfin, à ce niveau, l'outil de développement peut également offrir des facilités pour mettre en place une même application à deux niveaux. Dans le cas idéal, les outils de développement possèdent dans les propriétés de chacune des pages HTML dynamiques une case à cocher précisant si la page doit être sécurisée ou non. L'atelier de développement propose également de saisir les ports de chacun des deux modes afin de réduire au maximum cette tâche lors de la phase de déploiement. Au-delà de la gestion de la sécurité par cryptage des informations, les outils doivent également proposer un système d'authentification. Cela passe généralement par une validation côté serveur, avec contrôles effectués dans des annuaires LDAP, des SGBDR, ou tout autre source de données permettant d'identifier les utilisateurs.


L'administration

Tout serveur d'applications de bonne facture est livré avec un outil d'administration qui se présente sous la forme d'une interface web ou d'une console. En laissant de côté les fonctionnalités élémentaires de cet outil, il doit favoriser le réglage du serveur d'applications. Ce réglage est nécessaire afin d'adapter et d'ajuster les points sensibles de l'application en cas de montée en charge importante. Dans le cadre d'une architecture multi-serveurs, l'outil d'administration doit proposer un paramétrage avancé au niveau du répartiteur de charges comme le choix de l'algorithme de répartition par exemple. Concernant la fonctionnalité de disponibilité applicative au niveau session, là encore l'outil doit fournir une interface proposant différentes solutions de sauvegarde. Au niveau du pooling de connexions, un outil d'administration doit permettre de dimensionner l'accès à la base de données en spécifiant par exemple un nombre de connexions au démarrage, le nombre maximum de connexions ouvertes en tout, etc.

Si l'application repose sur une technologie objet, le déploiement des composants dans le serveur d'applications s'opère également depuis cette interface. Enfin, la présence d'un outil de statistique est toujours une fonctionnalité intéressante. En effet, la génération de graphes d'utilisation à partir des logs HTTP, SQL ou d'échange entre instances d'objet offre un premier retour sur la sollicitation des différents modules de l'application.


La productivité

En phase de développement, la productivité est étroitement liée à la maturité de l'outil de développement, mais aussi à la qualité de l'interface entre ce dernier et le serveur d'applications. Ainsi, l'atelier de développement doit offrir aux développeurs le moyen de réaliser des applications web fiables dans un minimum de temps et d'effort.

Pour ce faire, un atelier de développement incomplet doit au moins pouvoir s'interfacer de la manière la plus transparente possible avec les autres outils de production. Le développement d'une application étant rarement le travail d'une seule personne, une interface avec les outils de gestion des développements en équipe tels que PVCS ou VSS s'imposent. De la même manière, dans le cadre d'un projet utilisant la technologie objet, un pont vers les outils de modélisation tels que PowerAMC ou Rational Rose est de rigueur.

A partir de là, les équipes de développement possèdent une bonne base d'outils pour démarrer leur projet. Pour revenir à l'atelier de développement à proprement parler, une des fonctionnalités couramment utilisées lors de la réalisation d'un site web concerne l'éditeur HTML WYSIWYG qui permet la génération des interfaces graphiques. Sa présence évite l'écriture simple mais fastidieuse du code HTML.

Tout au long de la phase de développement, l'atelier doit fournir des fonctionnalités simplifiant la tâche de l'utilisateur et augmentant la productivité du projet. Ainsi, comme toute application web transactionnelle se connecte forcément à une base de données, une manière de répondre au besoin précédent est d'offrir des assistants capables de se greffer au SGBDR et de permettre la saisie de requêtes dynamiques, la saisie de jointures ou encore la sélection de procédures stockées. De plus, l'intégration d'un éditeur SQL dans l'atelier de développement offre le moyen de tester les requêtes en temps réel.

Enfin, l'outil doit envisager des fonctionnalités avancées en terme de débogage. Effectivement, la possibilité d'effectuer du pas à pas sur le code applicatif, de poser des points d'arrêt, d'entrer ou non à l'intérieur du code des fonctions ou des méthodes exécutées, d'interroger et/ou de modifier les valeurs des variables en temps réel procure un gain de temps considérable en phase de développement.