Question

J'ai un tomcat 6,20 instance en cours d'exécution, et que vous souhaitez envoyer un e-mail via un fil d'arrière-plan pour empêcher la fonction d'envoi de courrier électronique de bloquer la demande.

Est-il possible que je peux exécuter le fil en arrière-plan, tout en permettant l'écoulement normal de la page se produire.

L'application est écrite en ICEfaces.

Merci.

Était-ce utile?

La solution

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

Ceci effectuera l'envoi en arrière-plan. Rappelez-vous de créer un seul Exécuteur au démarrage, et de partager à travers toutes les demandes; ne pas créer une nouvelle Exécuteur chaque fois (vous pouvez, mais ce serait un peu lent et gaspillage).

Autres conseils

Mettez votre e-mail envoyer à la place de Thread.sleep(). Mettez votre sortie à la place de sendRedirect().

public void doUrlRequest(HttpServletRequest request, HttpServletResponse response) {
    try {
        response.sendRedirect("/home");
    } catch (IOException e) {
        CustomLogger.info(TAG, "doUrlRequest", "doUrlRequest(): "+e.getMessage());
    }
    (new Thread() {
        public void run() {
            try {
                Thread.sleep(9000);
                System.out.println("Awoken!");
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }).start();

Je l'ai trouvé un moyen de sortir. Ces balises

@PostConstruct()

et

@PreDestroy()

Créer 2 méthodes dans votre servlet qui renvoient vide et accepter aucun paramètre. placez le 1er étiquette immédiatement au-dessus de la première méthode et la 2e balise ci-dessus deuxième balise.

Essense des tags

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

La méthode de @PreDestroy est appelée par le conteneur avant le point final est retiré de fonctionnement.

dans le procédé après la construction () créer votre fil en utilisant l'interface exécutable et le faire tourner dans une boucle infinie à moins que la valeur d'une certaine variable booléenne est fausse.

utiliser la méthode PreDestroy () pour définir la variable booléenne à faux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top