session.MailSenderTimerSessionBean.java Source code

Java tutorial

Introduction

Here is the source code for session.MailSenderTimerSessionBean.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package session;

import conf.Effectuer;
import conf.FaitReference;
import conf.FileMail;
import conf.Search;
import conf.Searchresults;
import conf.User;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.List;
import javax.ejb.LocalBean;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.inject.Inject;
import javax.mail.MessagingException;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;

/**
 *
 * @author JOHN
 */
@Singleton
@LocalBean
public class MailSenderTimerSessionBean {

    @Inject
    MailManager mailManager;
    @Inject
    UserManager userManager;
    @Inject
    EffectuerManager effectuerManager;
    private final int DAILY_LIMIT = 200;
    private int count = 0;

    //toute les 30 sec
    @Schedule(dayOfWeek = "*", month = "*", hour = "*", dayOfMonth = "*", year = "*", minute = "*", second = "*/30")

    public void myTimer() throws MessagingException, EmailException, ClassNotFoundException, SQLException {
        System.out.println("Vous etes dans le timer, il est: " + new Date());

        if (count < DAILY_LIMIT) {
            List<FaitReference> listReferences;
            listReferences = mailManager.getMailsNonDistributed();
            if (listReferences.size() > 0) {
                FaitReference faitReference = listReferences.get(0);

                //Pour envoyer des mails et mettre  jour 
                sendMessage(faitReference);
                updateMailSend(faitReference);
                count++;
            }

            System.out.println("Nombre de mail envoy: " + count);
        } else {
            System.out.println("La limite de " + DAILY_LIMIT + " de mail a t ateinte");
        }
    }

    public void sendMessage(FaitReference faitReference) throws EmailException {

        //String recipient = faitReference.getIdSearchResult().getEmailResult();
        String recipient = "kevjosteph@gmail.com";

        String mailSendFrom = null;
        Searchresults searchResult = faitReference.getIdSearchResult();
        Search search = searchResult.getIdSearch();

        List<Effectuer> listEffectuer;
        listEffectuer = effectuerManager.getAllEffectuer();

        for (Effectuer effectuer : listEffectuer) {
            if (effectuer.getIdSearch().getIdSearch() == search.getIdSearch()) {
                User user = userManager.getUserById(effectuer.getIdUser().getIdUser());
                mailSendFrom = user.getEmail();
            }
        }

        String subject = faitReference.getIdMail().getObjet();
        String message = faitReference.getIdMail().getMessage();

        MultiPartEmail email = new MultiPartEmail();
        email.setHostName("smtp.googlemail.com");
        email.setSmtpPort(465);
        email.setAuthenticator(new DefaultAuthenticator("kevjosteph@gmail.com", "abcd4ABCD"));
        email.setSSLOnConnect(true);
        email.setFrom(mailSendFrom);
        email.setSubject(subject);
        email.setMsg(message);
        email.addTo(recipient);

        if (mailManager.getAllFiles(faitReference) != null) {
            List<FileMail> listFile;
            listFile = mailManager.getAllFiles(faitReference);
            for (FileMail fileMail : listFile) {
                EmailAttachment attachment = new EmailAttachment();

                attachment.setPath(fileMail.getPath());
                attachment.setDisposition(EmailAttachment.ATTACHMENT);
                attachment.setDescription("Picture of John");
                attachment.setName("John");
                email.attach(attachment);
            }
        }
        email.send();

        System.out.println("Le mail a t envoy  : " + recipient);
        System.out.println("avec le sujet : " + subject);
        System.out.println("et le corps du message est : " + message);
    }

    private void updateMailSend(FaitReference faitReference) throws ClassNotFoundException, SQLException {
        // JDBC driver name and database URL
        String JDBC_DRIVER = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource";
        String DB_URL = "jdbc:mysql://localhost:3306/tuveuxquoi?useUnicode=true&characterEncoding=UTF-8";

        //  Database credentials
        String USER = "root";
        String PASS = "abcd4ABCD";

        Connection conn = null;
        Statement stmt = null;
        //STEP 2: Register JDBC driver
        Class.forName("com.mysql.jdbc.Driver");

        //STEP 3: Open a connection
        System.out.println("Connecting to a selected database...");
        conn = DriverManager.getConnection(DB_URL, USER, PASS);
        System.out.println("Connected database successfully...");

        //STEP 4: Execute a query
        System.out.println("Creating statement...");
        stmt = conn.createStatement();
        String sql = "UPDATE fait_reference " + "SET DISTRIBUTED = 1 WHERE ID_ROW_RESULT =  "
                + faitReference.getIdRowResult();
        stmt.executeUpdate(sql);

    }

    //Tous les jours a 00h on reinitialise le compteur a 0
    @Schedule(dayOfWeek = "*", month = "*", hour = "00", dayOfMonth = "*", year = "*", minute = "00", second = "00")
    public void resetCount() {
        System.out.println("RESET");
        count = 0;
    }
}