/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ //Source file: D:\\cc_views\\squale_v0_0_act\\squale\\src\\squalix\\src\\org\\squale\\squalix\\core\\Squalix.java package org.squale.squalix.core; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.impl.StdSchedulerFactory; import org.squale.jraf.bootstrap.initializer.Initializer; import org.squale.squalix.core.quartz.QuartzSqualixScheduler; import org.squale.squalix.messages.Messages; /** * Lance l'application Squalix. <br /> Ceci consiste en quelques op�rations simples : * <ul> * <li>initialisation du socle JRAF,</li> * <li>lecture des param�tres de lancement,</li> * <li>instanciation d'un scheduler si l'ex�cution peut-�tre lanc�e.</li> * </ul> * <br /> Le lancement du scheduler est synchrone, ce qui bloque l'application tant que le scheduler tourne. <br /> Pour * plus de renseignements sur le fonctionnement du moteur de t�ches, reportez-vous � la javadoc des classes * <code>Scheduler</code> et <code>ResourcesManager</code>. * * @see org.squale.squalix.core.Scheduler * @see org.squale.squalix.core.ResourcesManager * @author m400842 * @version 1.0 */ public class Squalix { /** * Logger */ private static Log mLOGGER; /** * Cl� du site h�bergeant l'application */ private static String mSite; /** * Chemin du fichier de configuration */ private static String mConfigFile; /** * Cl� de p�riodicit� pour le lancement de l'application Squalix */ private static String mCron = ""; /** * Boolean permettant de savoir la mani�re de lancer le batch Squalix */ private static boolean mQuartzActive; /** * Options de lancement de la tache Squalix */ private static Options optionsDemarage = new Options(); /** * Option -s pass�e en param�tre */ private static Option optionSite = new Option( Messages.getString( "main.site_option" ), "site", true, "site principale sur lequel tourne l'application squalix" ); /** * Option -f pass�e en param�tre */ private static Option optionFichierConf = new Option( Messages.getString( "main.configFile_option" ), "fichierConf", false, "Fichier de param�trage de la configuration de Squalix" ); /** * Option -cron pass�e en param�tre (utilisation de l'expression par d�faut) */ private static Option optionCron = new Option( Messages.getString( "main.configCron_option" ), "chronologique", false, "Si la t�che doit �tre lanc�e de mani�re asynchrone" ); /** * Option -cron pass�e en param�tre avec une expression */ private static Option optionCronExpression = new Option( Messages.getString( "main.configCronExpression_option" ), "chronologique", true, "Si la t�che doit �tre lanc�e de mani�re asynchrone" ); /** * Option -debug pass�e en param�tre ne sert � rien pour le lancement en mode Debug, mais doit figurer dans la liste * des options */ private static Option optionDebug = new Option( "debug", "debogage", false, "Indique si on a lanc� la t�che en mode DEBUG" ); /** * parser de la ligne de commande */ private static CommandLineParser parser = new PosixParser(); static { // Sp�cification du nom du param�tre de l'argument qui sera affich� dans l'aide optionSite.setArgName( Messages.getString( "main.site_option" ) ); optionFichierConf.setArgName( Messages.getString( "main.configFile_option" ) ); optionCron.setArgName( Messages.getString( "main.configCron_option" ) ); optionCronExpression.setArgName( Messages.getString( "main.configCron_option" ) ); optionDebug.setArgName( "debug" ); // Sp�cification du type d'object que retournera getValue optionSite.setType( String.class ); optionFichierConf.setType( String.class ); optionCron.setType( String.class ); optionCronExpression.setType( String.class ); // Oblige le param�tre d'�tre pr�sent lors de l'ex�cution optionSite.setRequired( true ); optionFichierConf.setRequired( false ); optionCron.setRequired( false ); optionCronExpression.setRequired( false ); optionDebug.setRequired( false ); // On ajout ensuite les "Option" dans la collection optionsDemarage.addOption( optionSite ); optionsDemarage.addOption( optionFichierConf ); optionsDemarage.addOption( optionCron ); optionsDemarage.addOption( optionCronExpression ); optionsDemarage.addOption( optionDebug ); } /** * M�thode main. * * @param pArgs arguments de lancement. * @roseuid 42918D3702A5 */ public static void main( final String[] pArgs ) { // lancement de l�initialisation JRAF String rootPath = pArgs[0]; String configFile = "/config/providers-config.xml"; Initializer init = new Initializer( rootPath, configFile ); init.initialize(); // Maintenant que le socle JRAF est initialis�, on peut cr�er un logger mLOGGER = LogFactory.getLog( Squalix.class ); if ( null != pArgs && pArgs.length > 0 ) { try { // On trie les param�tres getParameters( pArgs ); Scheduler scheduler = null; if ( null == mSite ) { // Si aucun site n'est sp�cifi�, on quitte l'application mLOGGER.fatal( Messages.getString( "main.missing_parameters" ) ); } else if ( mQuartzActive ) { QuartzSqualixScheduler qss = new QuartzSqualixScheduler( mSite, mCron ); qss.scheduleSqualix( new StdSchedulerFactory() ); } else { //Launch of the scheduler in a new thread scheduler = new Scheduler( new Long( mSite ).longValue(),true ); Thread schedulerThread = new Thread(scheduler); schedulerThread.start(); } } catch ( Exception e ) { // Si un probl�me appara�t dans la r�cup�ration de la configuration // ou des param�tres, on loggue et on quitte mLOGGER.fatal( "Fatal error", e ); } } else { mLOGGER.fatal( Messages.getString( "main.missing_parameters" ) ); } } /** * R�cup�re les param�tres de la ligne de commande * * @param pArgs liste des param�tres. * @throws ParseException * @roseuid 42CE4F340204 * @throws ParseException si la liste des arguments est mal interpr�t�e */ private static void getParameters( final String[] pArgs ) throws ParseException { CommandLine cmd = parser.parse( optionsDemarage, pArgs, false ); mSite = (String) cmd.getOptionObject( Messages.getString( "main.site_option" ) ); if ( cmd.hasOption( Messages.getString( "main.configFile_option" ) ) ) { mConfigFile = (String) cmd.getOptionObject( Messages.getString( "main.configFile_option" ) ); } if ( cmd.hasOption( Messages.getString( "main.configCronExpression_option" ) ) ) { mCron = (String) cmd.getOptionObject( Messages.getString( "main.configCronExpression_option" ) ); if ( mCron == null ) { mCron = ""; } mQuartzActive = true; } if ( cmd.hasOption( Messages.getString( "main.configCron_option" ) ) ) { mCron = ""; mQuartzActive = true; } } }