181 votes

Que signifie la valeur 0 (zéro) de la servlet <load-on-startup> ?

Je m'y perds un peu. Dans notre application, nous avons défini quelques servlets. Voici l'extrait de la web.xml pour l'une des servlets :

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.cisco.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

D'après ce que j'ai compris, la valeur de la <load-on-startup> doit être un nombre entier positif pour qu'il soit chargé automatiquement. J'ai cherché sur google mais les réponses que j'ai trouvées n'ont fait qu'ajouter à ma confusion.

193voto

Eddie Points 27755

Bien que je pense que Cletus a raison dans sa réponse, Résine semble documenter quelque chose de différent :

load-on-startup peut spécifier une valeur entière (facultative). Si la valeur est égale ou supérieure à 0 elle indique un ordre de chargement des servlets, les servlets dont le nombre est le plus élevé sont sont chargées après les servlets dont le nombre est inférieur.

Ainsi, vous voudrez probablement vérifier non seulement le spec mais aussi la documentation de votre conteneur web.

133voto

Réponse courte valeur >= 0 : la servlet est chargée lorsque la web-app est déployée ou lorsque le serveur démarre. valeur < 0 : la servlet est chargée quand le conteneur en a envie.

Réponse longue (d'après la spécification) :

L'élément load-on-startup indique que cette servlet doit être chargée (instanciée et que son son init() appelé) au démarrage de l'application web web. Le contenu facultatif de cet élément doit être un nombre entier indiquant l'ordre dans lequel la servlet dans lequel la servlet doit être chargée. Si la valeur est un nombre entier négatif, ou si l'élément n'est pas présent, le conteneur est libre de charger la servlet. quand il le souhaite. Si la valeur est un entier positif 128 ou 0, le conteneur doit charger et initialiser la servlet initialiser la servlet lorsque l'application est déployée. Le conteneur doit garantir que les servlets marquées par des nombres entiers inférieurs sont chargées avant les servlets marquées par des nombres entiers supérieurs. Le conteneur conteneur peut choisir l'ordre de chargement des servlets ayant la même valeur de chargement au démarrage.

11voto

cletus Points 276888

Il indique que la servlet ne sera pas lancée tant qu'une requête n'essaiera pas d'y accéder.

Si la valeur de load-on-startup est supérieure à zéro, le conteneur démarrera cette servlet dans l'ordre croissant de la valeur de load-on-startup que vous avez indiquée (c'est-à-dire 1 puis 2 puis 5 puis 10 et ainsi de suite).

9voto

sourcerebels Points 2872

Cycle de vie des servlets

Le cycle de vie d'une servlet est contrôlé par le conteneur dans lequel la servlet a été déployée. Lorsqu'une demande est mise en correspondance avec une servlet, le conteneur effectue les étapes suivantes.

  1. Si une instance de la servlet n'existe pas, le conteneur Web

    1.1. Charge la classe de la servlet.

    1.2. Crée une instance de la classe servlet.

    1.3. Initialise l'instance de servlet en appelant la méthode init. L'initialisation est traitée dans la section Initialisation d'une servlet.

  2. Appelle la méthode du service, en passant un objet de demande et de réponse. Les méthodes de service sont abordées dans la section Rédaction des méthodes de service.

Une valeur de 0 pour load-on-startup signifie que le point 1 est exécuté lorsqu'une requête arrive sur cette servlet. Les autres valeurs signifient que le point 1 est exécuté au démarrage du conteneur.

1voto

Suresh Pradhan Points 11

Comme indiqué dans d'autres réponses et dans celle-ci article sur le chargement au démarrage zéro est acceptable et en l'absence de toute autre servlet, celle-ci sera prioritaire au chargement et chargée pendant le déploiement. La meilleure utilisation de load-on statup est de charger les servlets qui prennent plus de temps à s'initialiser bien avant que la première demande n'arrive, comme les servlets qui créent un pool de connexion, font des appels réseau ou retiennent des ressources volumineuses, ce qui réduira significativement le temps de réponse pour les premières demandes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X