fr.ifremer.isisfish.simulator.launcher
Class SimulationService

java.lang.Object
  extended by fr.ifremer.isisfish.simulator.launcher.SimulationService

public class SimulationService
extends Object

Cette classe est responsable de conservation de toutes les simulations faites ou a faire. Pour ajouter une nouvelle simulation on appelle une des méthodes submit.

Cette classe sert aussi de modele pour le moniteur de queue

Il existe une instance unique pour toute l'application

Lors de l'instanciation de la classe, l'ensemble des SimulatorLauncher disponible est recherche dans la configuration et un executor est cree pour chaque.

Si un SimulatorLauncher genere trop d'erreur (RemoteException) Il est alors suspendu pour ne plus etre utilise pour les simulations.

Version:
$Revision: 3586 $ Last update : $Date: 2012-01-11 16:48:04 +0100 (Wed, 11 Jan 2012) $ By : $Author: echatellier $
Author:
poussin

Nested Class Summary
static class SimulationService.Counter
          Permet de manipuler un int entre plusieurs appele de methodes recursive.
static class SimulationService.PrepareSimulationJob
          Permet de genere les sous simulations d'un plan de simulation.
 
Field Summary
protected  boolean autoLaunch
           
protected  Map<SimulatorLauncher,SimulationExecutor> executors
          Tous les types de SimulatorLauncher disponibles, et leur executors associe
protected  Set<String> idJobs
          Contient les identifiants des simulations presentes dans jobs
protected static SimulationService instance
           
protected  Set<SimulationJob> jobDones
          La liste des jobs termines
protected  Set<SimulationJob> jobs
          La liste des jobs existant (queue + job demarre)
protected  Map<SimulatorLauncher,org.apache.commons.lang3.mutable.MutableInt> launcherError
          Le nombre d'erreur pour les SimulatorLauncher
protected  org.nuiton.util.ListenerSet<SimulationServiceListener> listeners
           
static int MAX_PLAN_SIMULATION
          nombre maximal de simulation autoriser pour un plan
protected  PropertyChangeSupport propertyListeners
           
protected  SimulationQueue queue
          La queue contenant toutes les simulations a faire
static String SIMULATION_LAUNCHER
           
protected  ExecutorService subSimulationComputationExecutor
          L'executor utilise pour creer toutes les sous simulations des plans independants
 
Constructor Summary
protected SimulationService()
          Cree une instance et initialise les executors ainsi que le launcherError
 
Method Summary
 void addPropertyChangeListener(PropertyChangeListener listener)
           
 void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
           
 void addSimulationLauncher(SimulatorLauncher sl)
          Permet d'ajouter un nouveau SimulatorLauncher.
 void addSimulationServiceListener(SimulationServiceListener l)
           
protected  boolean cancel(SimulationJob job)
          Supprime un job de la queue (annulation d'une simulation).
 void clearJobDone()
          Nettoie la liste des jobs faits
protected  void compileAllFile(SimulationControl control, File directory)
          Compile les fichiers présent dans le répertoire passé en parametre, ce répertoire est hiérarchisé en: rules, exports, simulators et scripts.
 boolean exists(String id)
           
protected  void fillDesignPlanNominalValue(org.nuiton.topia.TopiaContext context, DesignPlan designPlan)
          Explore design plan factor tree, and set factor nominal value for each factor.
protected  void fireStartEvent(SimulationJob job)
          Ajoute le job au job en cours previent s'il n'etait pas deja present les listeners SimulationServiceListener.simulationStart(SimulationService, SimulationJob).
protected  void fireStopEvent(SimulationJob job)
          Supprime le job de la liste des jobs en cours et l'ajoute le job si besoin a la liste des jobs faits (s'il y a une erreur ou qu'il ne sagit pas d'une simulation lancer par un plan de simulation).
protected  void generatePreScript(org.apache.commons.beanutils.ConvertUtilsBean beanUtils, StringBuffer buffer, SimulationService.Counter counter, Collection<Factor> factors)
          Generate prescript for a factor list that can be called recursively to manage factor group.
protected  String generatePreScript(Scenario scenario)
          Generate prescript to set factor values before simulation start.
 Set<SimulationJob> getJobDones()
           
 Set<SimulationJob> getJobs()
           
static SimulationService getService()
          Retourne l'instance du SimulationService a utiliser
 Collection<SimulationExecutor> getSimulationExecutors()
           
 List<SimulatorLauncher> getSimulationLaunchers()
           
protected  Set<SimulatorLauncher> getSimulatorLaunchers()
          Retourne la liste de tous les SimulatorLauncher disponible.
 boolean isAutoLaunch()
           
protected  File prepareSimulationZipFile(SimulationControl control, SimulationParameter param, String xmlDesignPlan, SensitivityScenarios sensitivityScenarios, boolean compile)
          Prepare les fichiers qui seront utilsé à la simulation: scripts rules exports simulators export de la database de la region simultionplan
 void removePropertyChangeListener(PropertyChangeListener listener)
           
 void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
           
 void removeSimulationServiceListener(SimulationServiceListener l)
           
protected  void reportError(SimulatorLauncher launcher, SimulationJob job)
          Report une erreur pour un launcher, on resoumet le job en supprimant le launcher utilise
 void restart(SimulationJob job)
          Restart a job.
protected  void resubmit(SimulationJob job)
          Permet de resoumettre un job qui a ete pris par un thread mais qu'il ne peut pas traiter.
 void setAutoLaunch(boolean autoLaunch)
           
protected  void submit(SimulationJob job)
           
 void submit(String id, SimulationParameter param, SimulatorLauncher launcher, int priority)
          Permet d'ajouter une nouvelle simulation a la queue.
 void submit(String id, SimulationParameter param, SimulatorLauncher launcher, int priority, SensitivityAnalysis sensitivityAnalysis, DesignPlan designPlan)
          Permet d'ajouter une simulation avec des factors a prendre en compte.
 void submitForCheckOnly(SimulationJob job)
          Resoumet une simulation qui a deja été démarrée, mais on ne faisant que du control de monitoring.
protected  void submitSubJob(SimulationJob job)
          Permet de soumettre a la queue un job provenant d'un plan.
protected  void waitAutoLaunch()
          Permet de mettre en attente les threads de simulation si l'utilisateur a suspendu la queue
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SIMULATION_LAUNCHER

public static final String SIMULATION_LAUNCHER
See Also:
Constant Field Values

MAX_PLAN_SIMULATION

public static final int MAX_PLAN_SIMULATION
nombre maximal de simulation autoriser pour un plan

See Also:
Constant Field Values

instance

protected static SimulationService instance

propertyListeners

protected PropertyChangeSupport propertyListeners

listeners

protected org.nuiton.util.ListenerSet<SimulationServiceListener> listeners

autoLaunch

protected boolean autoLaunch

subSimulationComputationExecutor

protected ExecutorService subSimulationComputationExecutor
L'executor utilise pour creer toutes les sous simulations des plans independants


executors

protected Map<SimulatorLauncher,SimulationExecutor> executors
Tous les types de SimulatorLauncher disponibles, et leur executors associe


launcherError

protected Map<SimulatorLauncher,org.apache.commons.lang3.mutable.MutableInt> launcherError
Le nombre d'erreur pour les SimulatorLauncher


queue

protected SimulationQueue queue
La queue contenant toutes les simulations a faire


idJobs

protected Set<String> idJobs
Contient les identifiants des simulations presentes dans jobs


jobs

protected Set<SimulationJob> jobs
La liste des jobs existant (queue + job demarre)


jobDones

protected Set<SimulationJob> jobDones
La liste des jobs termines

Constructor Detail

SimulationService

protected SimulationService()
Cree une instance et initialise les executors ainsi que le launcherError

Method Detail

getService

public static SimulationService getService()
Retourne l'instance du SimulationService a utiliser

Returns:
l'instance a utiliser

addSimulationLauncher

public void addSimulationLauncher(SimulatorLauncher sl)
Permet d'ajouter un nouveau SimulatorLauncher. Cela cree automatiquement un executor pour ce SimulatorLauncher. S'il y avait deja un SimulatorLauncher de ce type un nouveau est ajoute.

Parameters:
sl - le SimulatorLauncher a ajouter

getSimulationLaunchers

public List<SimulatorLauncher> getSimulationLaunchers()
Returns:
les SimulatorLauncher et leurs noms

getSimulationExecutors

public Collection<SimulationExecutor> getSimulationExecutors()

getJobs

public Set<SimulationJob> getJobs()

getJobDones

public Set<SimulationJob> getJobDones()

getSimulatorLaunchers

protected Set<SimulatorLauncher> getSimulatorLaunchers()
Retourne la liste de tous les SimulatorLauncher disponible.

Returns:
SimulatorLaunchers

addSimulationServiceListener

public void addSimulationServiceListener(SimulationServiceListener l)

removeSimulationServiceListener

public void removeSimulationServiceListener(SimulationServiceListener l)

addPropertyChangeListener

public void addPropertyChangeListener(PropertyChangeListener listener)

addPropertyChangeListener

public void addPropertyChangeListener(String propertyName,
                                      PropertyChangeListener listener)

removePropertyChangeListener

public void removePropertyChangeListener(PropertyChangeListener listener)

removePropertyChangeListener

public void removePropertyChangeListener(String propertyName,
                                         PropertyChangeListener listener)

fireStartEvent

protected void fireStartEvent(SimulationJob job)
Ajoute le job au job en cours previent s'il n'etait pas deja present les listeners SimulationServiceListener.simulationStart(SimulationService, SimulationJob).

Parameters:
job -

fireStopEvent

protected void fireStopEvent(SimulationJob job)
Supprime le job de la liste des jobs en cours et l'ajoute le job si besoin a la liste des jobs faits (s'il y a une erreur ou qu'il ne sagit pas d'une simulation lancer par un plan de simulation). Les listener sont prevenu par la méthode SimulationServiceListener.simulationStop(SimulationService, SimulationJob).

Parameters:
job -

clearJobDone

public void clearJobDone()
Nettoie la liste des jobs faits


isAutoLaunch

public boolean isAutoLaunch()
Returns:
Returns the autoLaunch.

setAutoLaunch

public void setAutoLaunch(boolean autoLaunch)
Parameters:
autoLaunch - The autoLaunch to set.

waitAutoLaunch

protected void waitAutoLaunch()
Permet de mettre en attente les threads de simulation si l'utilisateur a suspendu la queue


submit

public void submit(String id,
                   SimulationParameter param,
                   SimulatorLauncher launcher,
                   int priority)
Permet d'ajouter une nouvelle simulation a la queue. Si la simulation est simple ou avec un plan d'experience dependant, un nouveau job est cree et directement ajout a la queue de jobs. S'il la simulation est un plan ou les simulations sont independantes, toutes les simulations sont genere et toute ajoute a la queue de simulation. Mais dans ce cas seul la simulation de depart est ajoute au jobs en cours, les simulations generees seront ajoutees lors de leur reel execution

Parameters:
id - l'identifiant de la simulation
param - les parametres de la simulation
launcher - le launcher a utiliser pour lancer la simulation
priority - la priorite de la simulation

submit

public void submit(String id,
                   SimulationParameter param,
                   SimulatorLauncher launcher,
                   int priority,
                   SensitivityAnalysis sensitivityAnalysis,
                   DesignPlan designPlan)
Permet d'ajouter une simulation avec des factors a prendre en compte.

Parameters:
id - l'identifiant de la simulation
param - les parametres de la simulation
launcher - le launcher a utiliser pour lancer la simulation
priority - la priorite de la simulation
sensitivityAnalysis - l'implementation du calculateur de sensibilite
designPlan - le design plan qui contient les facteurs

fillDesignPlanNominalValue

protected void fillDesignPlanNominalValue(org.nuiton.topia.TopiaContext context,
                                          DesignPlan designPlan)
Explore design plan factor tree, and set factor nominal value for each factor. Also fix factor name for R (without special chars in name)

Parameters:
context - opened database context
designPlan - design plan

generatePreScript

protected String generatePreScript(Scenario scenario)
Generate prescript to set factor values before simulation start.

Parameters:
scenario - to generate prescript
Returns:
simulation pre script with correct values

generatePreScript

protected void generatePreScript(org.apache.commons.beanutils.ConvertUtilsBean beanUtils,
                                 StringBuffer buffer,
                                 SimulationService.Counter counter,
                                 Collection<Factor> factors)
Generate prescript for a factor list that can be called recursively to manage factor group.

Parameters:
beanUtils - beanUtils converter
buffer - buffer to fill
counter - call counter used to avoid variables name collision
factors - factor list to manage

submit

protected void submit(SimulationJob job)

resubmit

protected void resubmit(SimulationJob job)
Permet de resoumettre un job qui a ete pris par un thread mais qu'il ne peut pas traiter. Cela arrive lorsque l'executor est en pause, ou que le launcher de l'executor ne fonctionne plus (il se met en pause tout seul)

Parameters:
job - l'item a resoumettre

submitSubJob

protected void submitSubJob(SimulationJob job)
Permet de soumettre a la queue un job provenant d'un plan. Ce plan ne doit pas apparaitre dans la console de queue.

Parameters:
job -

submitForCheckOnly

public void submitForCheckOnly(SimulationJob job)
Resoumet une simulation qui a deja été démarrée, mais on ne faisant que du control de monitoring.

Parameters:
job - job to submit

restart

public void restart(SimulationJob job)
Restart a job. This method fire "start" event.

Parameters:
job - job to retstart

cancel

protected boolean cancel(SimulationJob job)
Supprime un job de la queue (annulation d'une simulation). Appele depuis SimulationJob.stop()

Parameters:
job - le job a annuler
Returns:
vrai si la simulation a pu etre annulee avant sont lancement (encore presente dans la queue), faux si la simulation a deja ete prise par un thread de simulation ou quelle est terminee

exists

public boolean exists(String id)

reportError

protected void reportError(SimulatorLauncher launcher,
                           SimulationJob job)
Report une erreur pour un launcher, on resoumet le job en supprimant le launcher utilise

Parameters:
launcher - le launcher posant probleme
job - le job qui n'a pas reussi a se faire

prepareSimulationZipFile

protected File prepareSimulationZipFile(SimulationControl control,
                                        SimulationParameter param,
                                        String xmlDesignPlan,
                                        SensitivityScenarios sensitivityScenarios,
                                        boolean compile)
                                 throws SimulationException
Prepare les fichiers qui seront utilsé à la simulation:
  • scripts
  • rules
  • exports
  • simulators
  • export de la database de la region
  • simultionplan

    Le tout est zippé et le zip est retourné, il peut-être directement importé dans le SimulationStorage (en le renommant comme il faut SimulationStorage.importAndRenameZip(File, String).

    Ce zip est automatiquement supprimé à la fin de l'application.

    Parameters:
    control - le controleur
    param - les parametre de la simulation
    xmlDesignPlan - contenu xml des design plan
    sensitivityScenarios - used to add some extra files (such as rules)
    compile - si vrai la version compile des fichiers Java est aussi mise dans le fichier zip. Cela peut servir pour les simulations locales pour ne pas recompiler pour chaque simulation avec plan de simulation
    Returns:
    un zip de simulation pour une simulation pret a être faite
    Throws:
    SimulationException - pour tout problème rencontré (IO,Topia...)

  • compileAllFile

    protected void compileAllFile(SimulationControl control,
                                  File directory)
    Compile les fichiers présent dans le répertoire passé en parametre, ce répertoire est hiérarchisé en: rules, exports, simulators et scripts. Seuls les fichiers des 3 premiers répertoires sont compilés les fichiers du dernier sont compilé par les dépendances qu'on les autres

    Il permet donc de compiler facilement tous les fichiers pour une simulation

    Parameters:
    control - le controleur
    directory - le répertoire où compiler


    Copyright © 1999-2012 CodeLutin. All Rights Reserved.