conteneur de servlets Java est effectivement un conteneur de code légèrement géré. Les servlets sont des composants avec un cycle de vie très bien défini, et il existe également un contrat très bien défini entre le conteneur et les composants (qui peuvent également inclure des filtres). Comme il est spécifié, une application Web est un système passif-réactif.
Il est passif, en ce sens qu'aucun thread défini par l'utilisateur n'est (strictement) autorisé. (Certains conteneurs ne peuvent pas appliquer cette restriction, mais en engendrant vos propres threads, vous êtes effectivement hors de la réservation, et des comportements potentiellement imprévisibles peuvent se produire.)
Il est réactif, en ce sens que l'activité sur le serveur (en votre base de code) se produit en réponse à des demandes, et ce pour les demandes HTTP typiques de l'application Servlet. Le ServletContext est le contexte partagé de tous les composants d'une application Web donnée dans le conteneur. Ce contexte est créé lorsque l'application Web est activée et détruite lorsqu'elle est désactivée. Vous pouvez utiliser un composant ServletContextListener pour vous connecter à ce cycle de vie et recevoir des rappels de notification concernant les événements du cycle de vie.
Si vous êtes prêt à continuer sur le côté sauvage et se reproduire hors éléments actifs dans votre web-app, vous voudrez peut-être considérer les points suivants:
1 - Créez et enregistrez un composant ServletContextListner pour gérer l'actif Composants. Au démarrage/à l'activation de l'application web, vous recevrez un rappel du conteneur. Ici vous pouvez démarrer vos composants filetés. Comme ce composant sera passé une référence au ServletContext, vous pouvez transmettre cette référence aux composants filetés. 2 - Votre classe de composants filetés (que ce soit une extension de Thread ou une implémentation de Runnable) doit être gérable, dans le sens où vous devez fournir les moyens d'arrêter proprement le thread lorsque votre ServletContextListener reçoit le rappel d'arrêt de contexte. Si vous êtes prêt à formaliser les tâches exécutables, le ExecutorService vous offre les fonctionnalités dont vous avez besoin pour ne pas avoir à réinventer la roue. Cela dit, vous voudrez peut-être revoir vos exigences et donc la conception et la plate-forme de conteneur Web que vous avez choisie. Il se peut que vous ayez vraiment besoin d'une pile dorsale plus sophistiquée.
La "bonne façon" dépend de ce que ces threads sont censés faire. De quoi avez-vous besoin pour le 'ServletContext'? – BalusC
Salut BalusC, merci pour votre commentaire. Le ServletContex a été utilisé comme une sorte de référentiel central de données. – Ittai