Package engine

Source Code of engine.BackgroundTaskLauncher

package engine;

import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;

import dao.DaoGareUIC;
import dao.HibernateUtil;
import externaldata.gareSelection.GareSelection;
import externaldata.gareSelection.GareSelectionHelper;
import externaldata.gareUIC.GareUICHelper;
import externaldata.theoricaltimefile.TheoricalTrainData;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;


@WebListener
public class BackgroundTaskLauncher implements ServletContextListener {

  private Thread backgroundThread = null;
  private String configDirPath;
 
  /**
     * Lance un thread qui va checker r�guli�rement l'API SNCF pour obtenir nos informations
     * en temps r�el
     */
    public void contextInitialized(ServletContextEvent servCtxtEvent)  {
        
      System.out.println("Context initialized ...");
     
      // Chemin d'acc�s aux fichiers de donn�es
      configDirPath = servCtxtEvent.getServletContext().getRealPath("") + File.separator + "files_config" + File.separator;
     
      // Tu ne te rechargeras point, mon enfant !!!
      servCtxtEvent.getServletContext().setAttribute("reloadable", false);
     
        
        // ------------ INITIALISATION DE LA BD --------------------------

      HibernateUtil.getSessionFactory();
     
        // ------------ FIN DE L'INITIALISATION BD -----------------------
     
     
     
     
     
      // ------------ RECUPERATION DES INFOS GARES_UIC -----------------
     
      String filepath = configDirPath + "Gare_UIC.xml";
      DaoGareUIC daoGUIC= new DaoGareUIC();
      daoGUIC.saveAll(GareUICHelper.getGareUicDataFromSourceFile(filepath));
     
      // ------------ FIN DES INFOS GARES_UIC --------------------------
     
     
     
     
     
      // ------------ RECUPERATION DES INFOS GARES_SELECTIONNEES -------
     
      filepath = configDirPath + "Gare_selection.xml";
      // On r�cup�re ici une liste de type Vector (car elle sera partag�e entre plusieurs threads)
      List<GareSelection> gares_selection = new Vector<GareSelection>(GareSelectionHelper.getGareSelectionDataFromSourceFile(filepath));
     
      // ------------ FIN DES INFOS GARES_SELECTIONNEES ----------------
     
     
     
     
     
      // ------------ ENREGISTREMENT DES INFOS DANS LE CONTEXTE --------
     
      servCtxtEvent.getServletContext().setAttribute("gares_selection", gares_selection);
     
      Map<String, List<TheoricalTrainData>> paris_disponibles = new ConcurrentHashMap<String, List<TheoricalTrainData>>();
     
      for (GareSelection tmp_gare : gares_selection) {
        paris_disponibles.put(tmp_gare.UIC, new Vector<TheoricalTrainData>());
      }
     
      servCtxtEvent.getServletContext().setAttribute("paris_disponibles", paris_disponibles);
     
      // ------------ FIN DE L'ENREGISTREMENT DANS LE CONTEXTE ---------
     
     
     
     
      // ------------ LANCEMENT DU THREAD BACKGROUND -------------------
     
        backgroundThread = new Thread(new BackgroundTaskEngine(gares_selection, servCtxtEvent.getServletContext()));
        backgroundThread.start();
       
        // ------------ FIN DU LANCEMENT DE THREAD -----------------------
       
       
       
        System.out.println("Background task launched ...");
    }

    /**
     * Doit faire en sorte que le thread lanc� soit bien termin�
     */
    public void contextDestroyed(ServletContextEvent arg0) {
        
      System.out.println("Context detroyed ...");
     
      if (backgroundThread != null) {
        // On tue proprement le thread lanc� au d�marrage
        backgroundThread.interrupt();
       
        // Et on attend que le thread soit r�ellement termin� avant de continuer
        try {
        backgroundThread.join();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
       
        System.out.println("Background task stopped ...");
      }
     
     
      // Pour regler le probl�me de pool de thread qui ne s'�teind pas quand on �teind le serveur
      // Erreur dans hibernate 4.3.4 final, notre version
      StandardServiceRegistryBuilder.destroy(HibernateUtil.getSR());
    }
 
}
TOP

Related Classes of engine.BackgroundTaskLauncher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.