Ma question est autour de la performance des applications J2EE. Je voudrais qu'on m'éclaircice les apports en terme de performance que peut apporter une architecture MVC 2, comparativement à une architecture JSP/Servlets.
Centraliser toutles les requêtes vers une seule et unique servlet ne nuit-il pas à la performance de l'application?
Pourriez-vous décrire un peu plus votre raisonnement ? A ce que je sache tout framework qui utilise le modèle MVC ne consiste pas uniquement en une seule et unique servlet . Certes , on déclare une servlet controller pour le framework mais la dessous , une transformation s'effectue pour exploder tout ca en plusieurs servlets.
L'avantage que l'on a avec ce modèle est qu'il ne faut pas pour chaque servlet réecrire le code pour les méthodes doGet et doPost , elles sont transparentes mais toujours existantes. Le seul gain que j'y vois est en terme de développement.
Je tenterai de vous répondre plus précisément après précision de votre part.
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
Après avoir "striké" le tas de bétise que j'ai écrit hier soir après une grosse guindaille ( bonjour le côté sérieux ) , je vais tenter de décoder tout cela de manière plus pertinente.
La servlet controller permet de dispatcher les actions et la redirection de page ( notamment grâce à des fichiers de configuration xml), le traitement de chaque action s'effectuera dans une classe Action - DispatchAction - etc dans le cas de Struts. Cette classe appelera la BL etc ...
A défault d'écrire plusieurs servlets ici on en implémente qu'une seule ( soit on crée sa propre servlet Controller , soit on utilise celle d'un framework). Il n'y a pas vraiment de différence de performance dans le sens où une servlet est multithread . Que l'on appelle toujours la même ou non , c'est à chaque fois une thread qui se lance.
Le gain que l'on y trouve se retrouve au niveau du temps de développement et de la structure du projet qui me parait plus propre.
J'espère avoir répondu au mieux à votre question.
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
D'abord, je vous remercie pour votre reponse.
Comme tu dis, une servlet est monothreadée, c'est à dire qu'elle n'est instanciée qu'en un seul exemplaire par le serveur d'application.
Ce qui m'a poussé à poser ma question c'est l'interrogation suivante : l'utilisation d'une seule servlet implique le traitement de toutes les requêtes en provenance du client par celle ci. Ce qui n'est pas le cas si on en utilise plusieurs.
Ex : pour la gestion des comptes j'appelerai la servlet GestionCompteServlet.java, ainsi toutes requêtes visant le traitement de l'entité Compte sera transférée vers cette servlet là uniquement. Pour une autre entité j'aurai une autre servlet et ainsi de suite. alors qu'en MVC 2, toute requête passera par une seule et unique servlet ce qui vraisemblablement pourrais nuir à la performance.
Cependant, le fait qu'en MVC 2, les traitement sont relayés aux Actions peut avoir des effets bénéfiques sur la performance de l'appli.
Mais enfin, je ne sais quelle approche est la plus performante.
mrjeronimo dit : Pour une autre entité j'aurai une autre servlet et ainsi de suite. alors qu'en MVC 2, toute requête passera par une seule et unique servlet ce qui vraisemblablement pourrais nuir à la performance.
Non puisque comme dit précédemment , la servlet est multi thread donc pas de lock sur les processus. Une seule classe , une seule instance mais plusieurs processus.
mrjeronimo dit : Cependant, le fait qu'en MVC 2, les traitement sont relayés aux Actions peut avoir des effets bénéfiques sur la performance de l'appli.
On parle de dispatcher les actions vers les controlleurs adéquats grâce au(x) fichier(s) de configuration ( le mappings ).
mrjeronimo dit : Mais enfin, je ne sais quelle approche est la plus performante.
En terme de développement et surtout de maintenance , je n'ai aucun doute en disant que c'est la méthode la plus performante dans un projet de grande envergure.En terme de performance "process" , je n'y vois pas de différence.
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
j'y vois plus clair mtn , je vous en remercie
pour récapituler, je dirai que d'un point de vue performance, il n'y a pas vraiment de gagnant, les servlets étant multi-thread, le fait d'en avoir une avec une classe d'action par thread ou plusieurs avec une seule méthode doit être très proche.
toutefois, une question me revient, si au niveau de la méthode init() d'une servlet j'instancie un objet d'une classe X, cet objet là sera-t-il crée autant de fois que le nombre de thread lancé?
a ce que je sache, si la servlet est crée en un seul exemplaire par le serveur d'application, sa méthode init() est éxécutée à chaque appel.
Ça sera une information à vérifier , mais si je ne me trompe pas , lorsqu'on deploy une application web , les servlets sont load une seule fois ( web.xml ) et l'appel à la méthode init() ne s'effectue qu'une et une seule fois ( il n'y pas vraiment de notion de constructeur dans une servlet ).
Je vais me renseigner un peu plus en détails , ce sont des aspects techniques auxquels j'avoue ne plus tenir compte au cours de mes développements . On remercie les frameworks de nous fournir une totale abstraction de ce qu'il se passe derrière tout ce petit monde.
__________________________
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...
C'est vrai que ce sont des détails dont on se préoccupe pas trop. Si je cherche à m'informer dessus, c'est parce que je cherche à définir les point faibles d'une application que je dois migrer vers une nouvelle architecture.
Je vous remercie infiniment pour le temps que vous m'avez consacré.