Package it.unina.seclab.jafimon

Source Code of it.unina.seclab.jafimon.Activator

package it.unina.seclab.jafimon;

import org.apache.log4j.Logger;

import it.unina.seclab.jafimon.activators.IPhysicalActivator;
import it.unina.seclab.jafimon.exceptions.CannotIstantiatePhysicalActivatorException;
import it.unina.seclab.jafimon.exceptions.CannotPrepareSystemException;
import it.unina.seclab.jafimon.interfaces.IActivator;

/**
* L'<code>Activator</code> si fa carico di instanziare lo specifico attivatore
* fisico per il sistema oggetto. L'uso di questa classe realizza in effetti la
* separazione tra il comportamento generale di un attivatore di sistema e lo
* specifico attivatore proprio del sistema da testare secondo il pattern di
* progettazione utilizzato.
*
* @author   Mauro Iorio
*
*/
public class Activator implements IActivator {

  private static final Logger logger = Logger.getRootLogger();
 
  /**
   * La reference all'istanza corrente del <code>PhysicalActivator</code>
   */
  private IPhysicalActivator physicalActivator;
 
  /**
   * La reference alla <code>Configuration</code> utilizzata durante il test
   */
  private Configuration theCfg = null;
 
  /**
   * La reference al <code>MonitoredDataManager</code> utilizzato durenta il test
   */
  private MonitoredDataManager theDataMgr = null;

  /**
   * Crea il <code>PhysicalActivator</code> corrispondente al sistema da testare e gli delega
   * il compito di preparare ed avviare il sistema.
   * Questo metodo e' basato sull'assunto che il <code>PhysicalActivator</code> desiderato
   * esporti un costruttore pubblico a zero operandi (es. public Tomcat5Activator() ). In
   * tal modo puo' ottenere una istanza del costruttore della classe e da questo una istanza
   * della classe stessa tramite reflection.
   *
   * @param sysName il nome del sistema da avviare. Esso consente di istanziare correttamente il <code>PhysicalActivator</code>
   * @param cfg la configurazione da utilizzare
   * @param dataMgr il <code>MonitoredDataManager</code> da utilizzare per il log degli eventi di monitoraggio.
   * NOTA: l'oggetto identificato dal parametro deve essere agganciato all'istanza della classe <code>Monitor</code>
   * che si occupa di caricare la main class del sistema in test.
   *
   * @throws CannotIstantiatePhysicalActivatorException
   */
  public void startSystem(String sysName, Configuration cfg, MonitoredDataManager dataMgr) throws CannotIstantiatePhysicalActivatorException {
   
    String paName = "it.unina.seclab.jafimon.activators." + sysName + "Activator";

    logger.info("Preparing " + sysName + " activation");
   
    theCfg = cfg;
    theDataMgr = dataMgr;
   
    try {
      physicalActivator = (IPhysicalActivator) Class.forName(paName).getConstructor(new Class[0]).newInstance(new Object[0]);
      physicalActivator.prepareSystem(theCfg,theDataMgr);
      physicalActivator.startSystem(theCfg,theDataMgr);

    } catch (CannotPrepareSystemException e) {
      logger.error(e.getLocalizedMessage());
      throw new CannotIstantiatePhysicalActivatorException(e.getLocalizedMessage());
     
    } catch (Exception e) {
      logger.error("Unable to create an instance of " + sysName + "Activator. The message is \"" + e.getClass().getName() + ": " + e.getLocalizedMessage() + "\"");
      throw new CannotIstantiatePhysicalActivatorException(sysName, e.getClass().getName() + ": " + e.getLocalizedMessage());

    }

    logger.info(sysName + " activated and started");
  }

  public void stopSystem() {
    logger.info("Stopping " + physicalActivator.getSystemName() + " ...");

    try {
      physicalActivator.stopSystem();
      physicalActivator.restoreSystem(theCfg, theDataMgr);
      theCfg = null;
      theDataMgr= null;
    } catch (Exception e) {
      logger.error(e.getLocalizedMessage());
      // TODO Propago l'eccezione
    }

    logger.info(physicalActivator.getSystemName() + " stopped");
  }

}
TOP

Related Classes of it.unina.seclab.jafimon.Activator

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.