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 la methode submit(java.lang.String, fr.ifremer.isisfish.simulator.SimulationParameter, fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher, int).

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: 3124 $ Last update : $Date: 2010-11-29 19:14:09 +0100 (lun., 29 nov. 2010) $ By : $Author: chatellier $
Author:
poussin

Nested Class Summary
static class SimulationService.PrepareSimulationJob
          Permet de genere les sous simulations d'un plan d'analyse.
 
Field Summary
protected  boolean autoLaunch
           
protected  Map<SimulatorLauncher,SimulationExecutor> executors
          Tous les types de SimulatorLauncher disponibles, et leur executors associe
protected  freemarker.template.Configuration freemarkerConfiguration
          Freemarker configuration used to get prescripts content.
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.lang.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
protected static String SENSITIVITY_PRE_SCRIPT
          Freemarker pre script template.
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.
protected  void convertAllFile(SimulationControl control, File directory)
          Convertit tous les fichiers du répertoire directory en UTF-8, pour eviter les erreurs d'encodage du la compilation sur un autre systeme ne supportant pas l'encodage courant.
 boolean exists(String id)
           
protected  void fireStartEvent(SimulationJob job)
          Ajoute le job au job en cours previent s'il n'etait pas deja present les listener SimulationServiceListener.simulationStart(fr.ifremer.isisfish.simulator.launcher.SimulationService, fr.ifremer.isisfish.simulator.launcher.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 d'analyse).
protected  String generatePreScript(Scenario scenario)
          Generate prescript to set factor values before simulation start.
protected  freemarker.template.Configuration getFreemarkerConfiguration()
          Get freemarker configuration.
 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, boolean compile)
          Prepare les fichiers qui seront utilsé à la simulation: scripts rules exports simulators export de la database de la region analyseplan 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).
 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, SensitivityCalculator sensitivitycalculator, 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

freemarkerConfiguration

protected freemarker.template.Configuration freemarkerConfiguration
Freemarker configuration used to get prescripts content.


SENSITIVITY_PRE_SCRIPT

protected static final String SENSITIVITY_PRE_SCRIPT
Freemarker pre script template.

See Also:
Constant Field Values

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.lang.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 listener SimulationServiceListener.simulationStart(fr.ifremer.isisfish.simulator.launcher.SimulationService, fr.ifremer.isisfish.simulator.launcher.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 d'analyse). Les listener sont prevenu par la methode SimulationServiceListener.simulationStop(fr.ifremer.isisfish.simulator.launcher.SimulationService, fr.ifremer.isisfish.simulator.launcher.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,
                   SensitivityCalculator sensitivitycalculator,
                   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
sensitivitycalculator - l'implementation du calculateur de sensibilite
designPlan - le design plan qui contient les facteurs

getFreemarkerConfiguration

protected freemarker.template.Configuration getFreemarkerConfiguration()
Get freemarker configuration.


generatePreScript

protected String generatePreScript(Scenario scenario)
                            throws IOException,
                                   freemarker.template.TemplateException
Generate prescript to set factor values before simulation start.

Parameters:
scenario -
Returns:
simulation pre script with correct values
Throws:
IOException - if pre script can't be made
freemarker.template.TemplateException - if pre script can't be made

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,
                                        boolean compile)
                                 throws SimulationException
Prepare les fichiers qui seront utilsé à la simulation:
  • scripts
  • rules
  • exports
  • simulators
  • export de la database de la region
  • analyseplan

    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
    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 d'analyse
    Returns:
    un zip de simulation pour une simulation pret a être faite
    Throws:
    SimulationException - pour tout problème rencontré (IO,Topia...)

  • convertAllFile

    protected void convertAllFile(SimulationControl control,
                                  File directory)
    Convertit tous les fichiers du répertoire directory en UTF-8, pour eviter les erreurs d'encodage du la compilation sur un autre systeme ne supportant pas l'encodage courant.

    Parameters:
    control - le controleur
    directory - le répertoire a convertir

    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-2011 CodeLutin. All Rights Reserved.