2009-07-28 10 views
1

J'ai une instance de tomcat 6.20 en cours d'exécution, et je voudrais envoyer un email via un thread d'arrière-plan pour empêcher la fonction d'envoi de courrier électronique de bloquer la demande.fils de fond tomcat

Y at-il un moyen d'exécuter le thread en arrière-plan, tout en permettant un flux de page normal.

L'application est écrite dans ICEfaces.

Merci.

Répondre

3
  1. Créer un Executor en utilisant java.util.concurrent.Executors.newCachedThreadPool (ou l'une des autres méthodes d'usine) dans la méthode d'initialisation de votre contrôleur/servlet.
  2. Lorsqu'une demande arrive, Enveloppez la logique l'envoi du courrier dans un java.lang.Runnable
  3. Soumettre le Runnable au Executor

Ceci effectuera l'envoi en arrière-plan. N'oubliez pas de créer un seul Executor au démarrage et de partager toutes les demandes; ne créez pas un nouvel Executor à chaque fois (vous pourriez, mais ce serait un peu lent et inutile).

+0

cela devrait être j.u.c.Executors.newCachedThreadPool (avec un s), mais à part cela: convenu – WMR

+0

oups, merci. fixé. – skaffman

+0

merci pour le conseil. Avez-vous un exemple de mise en œuvre? – RaelG

0

J'ai trouvé un moyen de sortir. Ces balises

@PostConstruct() 

et

@PreDestroy() 

Créer 2 méthodes dans votre servlet qui renvoient vide et acceptent aucun paramètre. Placez la première étiquette immédiatement au-dessus de la première méthode et la deuxième étiquette au-dessus de la deuxième étiquette.

Essense des étiquettes

La méthode @PostConstruct est appelée par le conteneur avant la classe implémentant commence répondre aux clients de services Web.

La méthode @PreDestroy est appelée par le conteneur avant que l'extrémité ne soit retirée de l'opération.

Dans la méthode PostConstruction(), créez votre thread à l'aide de l'interface runnable et exécutez-le dans une boucle infinie sauf si la valeur d'une variable booléenne donnée est false.

Utilisez la méthode PreDestroy() pour définir la variable booléenne sur false.