2010-11-22 21 views
1

Résumé QuestionQuelle est la meilleure pratique pour démarrer des threads ou charger des ressources partagées dans un serveur d'applications Java en dehors de l'invocation de Servlet?

Quelle est la meilleure façon de charger des ressources en mémoire qui sera partagée entre les servlets dans un serveur d'applications Java?

Ce que je suis en train de faire

Je veux créer un thread démon qui surveille une file d'attente. Cette file d'attente peut avoir des objets ajoutés à partir des threads de servlet. Le thread attendrait jusqu'à une période définie et vérifierait la file d'attente pour voir s'il contenait des éléments, si c'est le cas, il les traiterait et les supprimerait. Ce fil devrait être commencé quelque part à un moment donné. Je pensais qu'une servlet avec seulement la méthode init implémentée fonctionnerait pour cette tâche ou y a-t-il un meilleur endroit pour mettre le code de démarrage comme ceci dans un serveur d'application? Est-ce que je m'approche du problème tout foutu?

Mises à jour

J'ai trouvé this question et la réponse acceptée était d'utiliser le LifeCycle Listener. Est-ce une façon portable de faire les choses ou mon code va-t-il être lié à un seul serveur d'application? Un peu plus d'enquête m'a conduit à trouver quelques messages sur les forums en disant que je pouvais le faire dans une implémentation ServletContextListener.

Répondre

2

Je commence généralement ces types de threads de travail indirectement à partir d'une servlet en utilisant la méthode que vous décrivez (généralement ils existent dans un autre objet qui effectue l'extraction de la file d'attente et contrôle le traitement). Pour extraire des objets du thread, vous n'avez pas besoin de le faire en fonction de l'heure, vous pouvez avoir votre thread wait() sur l'objet file d'attente et lorsqu'un objet est placé dans la file d'attente par un autre thread, Le thread appellera notify() sur la file d'attente pour libérer le thread 'worker' en train de regarder.

Le thread de travail Java de Java attend notifier 'pour de nombreux exemples.

+0

Merci pour le conseil sur attendre/notifier. – Elijah