/**
* 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/>.
*/
/*
* Created on Sep 16, 2004
*/
package org.squale.jraf.initializer.struts;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import org.squale.jraf.bootstrap.ApplicationContextFactoryInitializer;
import org.squale.jraf.bootstrap.initializer.InitializableHelper;
import org.squale.jraf.bootstrap.initializer.Initializer;
import org.squale.jraf.commons.exception.JrafConfigException;
import org.squale.jraf.spi.bootstrap.IBootstrapConstants;
import org.squale.jraf.spi.bootstrap.IBootstrapProvider;
import org.squale.jraf.spi.initializer.IInitializable;
import org.springframework.context.ApplicationContext;
/**
* <p>Title : StrutsInitializer.java</p>
* <p>Description : Initialisateur d'une application JRAF
* sous la forme d'un plugin struts.
* Cette classe est utile pour initialiser JRAF dans des applications
* deployees sur des plate-formes WAS4 (J2EE 1.2).
* Si le niveau J2EE est >= 1.3 il est preconise d'utiliser la classe
* org.squale.jraf.initializer.web.WebInitializer.</p>
* <p>Copyright : Copyright (c) 2004</p>
*
* MODIFICATION : Mai 2006
* @author DIAKITE Tidiani
* <p>Copyright : Copyright (c) 2006</p>
*/
public class StrutsInitializer implements PlugIn {
/** logger */
private static final Log log = LogFactory.getLog(StrutsInitializer.class);
private Initializer initializer = null;
private Map lc_Map = null;
/* (non-Javadoc)
* @see org.apache.struts.action.PlugIn#destroy()
*/
public void destroy() {
// rien n'est effectue
}
/* (non-Javadoc)
* @see org.apache.struts.action.PlugIn#init(org.apache.struts.action.ActionServlet, org.apache.struts.config.ModuleConfig)
*/
public void init(
ActionServlet in_actionServlet,
ModuleConfig in_moduleConfig)
throws ServletException {
// initializer
IInitializable lc_initialize = null;
// map des parametres
Map lc_paramMap = null;
// context
ServletContext lc_context = in_actionServlet.getServletContext();
ServletConfig lc_config = in_actionServlet.getServletConfig();
// log
log.info("Debut de l'initialisation de l'application Jraf...");
// repertoire racine
String lc_rootPath = lc_context.getRealPath("");
// Initialisation
lc_context.log("INIT Ok - Recup�ration du Bean initializer ... ");
ApplicationContextFactoryInitializer.init(
lc_context.getInitParameter(
IBootstrapConstants.SPRING_CONTEXT_CONFIG));
// R�cup�ration du bean initialize.
initializer =(Initializer)ApplicationContextFactoryInitializer.
getApplicationContext().getBean("initialize");
lc_context.log("Provider config file = " + initializer.getConfigFile());
// classe d'initialisation
String lc_initClassName = initializer.getClass().getName();
// fichier de configuration d'un provider
String lc_providerConfigFile = initializer.getConfigFile();
// bind jndi
String lc_isJndi =Boolean.toString(initializer.isJndi());
try {
// test des parametres recuperees
if (lc_rootPath == null
|| lc_rootPath.equals("")
|| lc_providerConfigFile == null
|| lc_providerConfigFile.equals("")) {
// affiche une erreur de configuration
String lc_error =
"Pb de configuration : le chemin du contexte racine est vide ou le fichier de configuration des plugins n'est pas specifie.";
log.fatal(lc_error);
throw new JrafConfigException(lc_error);
} else {
// les parametres ont bien ete recuperes
// creation de l'initializer
lc_initialize =
InitializableHelper.instanciateInitializable(
lc_initClassName);
// recuperation/creation des parametres
lc_paramMap = new HashMap();
lc_paramMap.put(IBootstrapConstants.ROOT_PATH_KEY, lc_rootPath);
lc_paramMap.put(
IBootstrapConstants.PROVIDER_CONFIG_KEY,
lc_providerConfigFile);
// si le bind jndi est positionne
if (lc_isJndi != null) {
lc_paramMap.put(IBootstrapConstants.JNDI_BIND, lc_isJndi);
}
// execution de la methode d'initialisation
IBootstrapProvider lc_bootstrapProvider =
(IBootstrapProvider) lc_initialize.initialize(lc_paramMap);
// log de succes
log.info("L'application s'est initialisee avec succes");
log.info(
"Les providers suivants ont ete initialises:"
+ lc_bootstrapProvider.getProviders());
}
} catch (JrafConfigException e) {
// log
log.fatal(
"Probleme lors de l'intialisation de l'application : ",
e);
throw new ServletException(
"Probleme lors de l'intialisation de l'application : ",
e);
} catch (RuntimeException e) {
// log
log.fatal(
"Probleme lors de l'intialisation de l'application : ",
e);
throw new ServletException(
"Probleme lors de l'intialisation de l'application : ",
e);
}
}
}