IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Envoyer un mail dans executor de Quartz


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 32
    Points : 28
    Points
    28
    Par défaut Envoyer un mail dans executor de Quartz
    Bonjour à tous je suis confronté à une difficulté avec Quartz.
    En effet j'aimerais utiliser cette librairie pour envoyer des mails aux participants d'une tâche.
    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    package scheduler;
     
    import java.io.IOException;
    import java.util.List;
    import java.util.Properties;
     
    import javax.ejb.EJB;
    import javax.ejb.Stateless;
    import javax.enterprise.context.SessionScoped;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.RequestScoped;
    import javax.mail.Address;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
     
    import org.quartz.Job;
    import org.quartz.JobDetail;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.impl.StdSchedulerFactory;
     
    import gct.dao.ParticipationDao;
    import gct.dao.ParticipationTacheDao;
    import gct.entities.ParticipationTache;
    import gct.validators.GMailAuthenticator;
     
    public class SchedulerJob implements Job{
    	@EJB
    	private ParticipationTacheDao participationTacheDao;
    	public void envoyerEmail() throws AddressException, MessagingException {
    		List<ParticipationTache> participantTache=participationTacheDao.listeParticipantTacheNonAvertiParMail();
    		for(ParticipationTache participant:participantTache){
    			String sujetEmail="Tâches";
    			String messageSent="Vous êtes informé que vous participez à la réalisation de la tâche "+participant.getTache().getNom()+" du "+participant.getTache().getDateDbt()+" au "+participant.getTache().getDateFin()+". Description:"
    					+ participant.getTache().getDescription();
    			String destinataireEnvoyer=participant.getUtilisateur().getEmail();
    			System.out.println("Initialisation d'envoi de mail... ");
    			try {
    			final String username="myemail@gmail.com";
    			final String password="mypassword";
    			String host = "smtp.gmail.com";
    			String from = "myemail@gmail.com";
    			String pass = "mypassword";
    			Properties props = System.getProperties();
    			props.put("mail.smtp.starttls.enable", "true");
    			props.put("mail.smtp.host", host);
    			props.put("mail.smtp.user", from);
    			props.put("mail.smtp.password", pass);
    			props.put("mail.smtp.port", "587");
    			props.put("mail.smtp.auth", "true");
    			props.put("mail.smtp.ssl.enable", "false");
    			props.put("mail.debug", "true");
     
    			Session session =  Session.getInstance(props, new GMailAuthenticator(username, password));
    			MimeMessage message = new MimeMessage(session);
    			Address fromAddress = new InternetAddress(from);
    			Address toAddress = new InternetAddress(destinataireEnvoyer);
     
    			message.setFrom(fromAddress);
    			message.setRecipient(Message.RecipientType.TO, toAddress);
     
    			message.setSubject(sujetEmail);
    			message.setText(messageSent);
    			Transport transport = session.getTransport("smtp");
    			transport.connect(host, from, pass);
    			message.saveChanges();
    			Transport.send(message);
    			transport.close();
     
          }catch(Exception ex){
     
    			System.out.println("<html><head></head><body>");
    			System.out.println("ERROR: " + ex);
    			System.out.println("</body></html>");
          }	
     
    			System.out.println("Email envoyé avec succès au participant "+participant.getUtilisateur().getPrenom());
    		}
    	}
    	@Override
    	public void execute(JobExecutionContext arg0) throws JobExecutionException {
    		try {
    			envoyerEmail();
    		} catch (MessagingException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Le problème est quand je teste ce code rien ne s'affiche mais par exemple quand j'écris la méthode execute comme ci dessous tout marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
    		System.out.println("Quartz marche très bien");
    	}

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    C'est sensé tourner dans quel conteneur ?
    Parce que l'annotation @EJB nécessite un conteneur qui fait de l'injection... et très certainement un paramétrage particulier...
    Tu n'as pas d'erreur dans la log ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    Merci pour la réponse j'utilise Glassfish et EJB que j'utilise c'est pour interagir avec la base de données afin de recueillir la liste des personnes dont je dois alerter par mail
    mais ça ne marche pas.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Quartz ce n'est pas ton conteneur J2EE, il n'y a pas d'injection d'EJB, CDI ou autre dans les jobs, ce sont juste des pojo instanciés par quartz. Soit tu récupéère ton ejb avec jndi avant de l'utiliser, soit tu déplace ton code dans un ejb et tu utilise le EJB3InvokerJob de quartz qui appelera une méthode sur un ejb.

    M'enfin vu le job, je plus simple serait plutot d'utiliser le scheduler J2EE à la place de quartz, il fait très bien son boulot
    https://docs.oracle.com/cd/E19226-01...qlg/index.html

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    Merci tchize_ pour la réponse je vais tester la piste que tu m'as donnée voir.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    Je cherche toujours mais j'y arrive pas, toute proposition serait la bienvenue. D'avance merci!

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Dans ta classe, plutôt que d'utiliser l'annotation @EJB qui ne fonctionne qu'avec certains conteneur, utilise un lookup JNDI.
    Ça ressemblera à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Context ctx = new InitialContext();
    ConstrFacadeLocal facade = (ConstrFacadeLocal)ctx.lookup("java:global/FKComponent/FKComponentEJB/ConstrFacade");
    Pour le nom à utiliser dans le lookup, tu auras ces informations dans la log au démarrage du serveur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 12
    Dernier message: 14/05/2011, 13h28
  2. [Batch] Envoyer un mail dans un script
    Par el_pedro dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 14/09/2010, 18h06
  3. Envoye de mail dans une doc lib
    Par neuneu1 dans le forum Configuration
    Réponses: 1
    Dernier message: 04/02/2010, 18h49
  4. Envoyer un mail dans une boucle WHILE
    Par tjoce dans le forum Langage
    Réponses: 6
    Dernier message: 19/12/2008, 12h21
  5. [debutant] Envoyer un mail dans programme java.
    Par smillingbandit dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 07/03/2008, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo