Class SimulationService

java.lang.Object
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$ Last update : $Date$ By : $Author$
Author:
poussin
  • Field Details

    • SIMULATION_LAUNCHER

      public static final String SIMULATION_LAUNCHER
      See Also:
    • MAX_PLAN_SIMULATION

      public static final int MAX_PLAN_SIMULATION
      nombre maximal de simulation autoriser pour un plan
      See Also:
    • 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

      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 Details

    • SimulationService

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

    • 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()
      Retour les lanceurs ayant un executor.
      Returns:
      les SimulatorLauncher
    • 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(SimulationJob job)
      Permet de mettre en attente les threads de simulation si l'utilisateur a suspendu la queue
      Parameters:
      job - le job pour lequel on vu savoir s'il faut l'executer ou non
    • 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
    • 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)
      This method must be call in thread simulation 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

      public File prepareSimulationZipFile(SimulationParameter param, File outputZilFile, SimulationControl control, String xmlDesignPlan, SensitivityScenarios sensitivityScenarios) throws SimulationException
      Prepare les fichiers qui seront utilsé à la simulation:
      • scripts
      • rules
      • resultinfos
      • exports
      • simulators
      • optimisations
      • objectives
      • 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:
      param - les paramètre de la simulation
      outputZilFile - output zip file containing simulation (can be null, temp file will be created)
      control - le controleur (can be null)
      xmlDesignPlan - contenu xml des design plan (can be null)
      sensitivityScenarios - used to add some extra files (such as rules) (can be null)
      Returns:
      un zip de simulation pour une simulation pret a être faite
      Throws:
      SimulationException - pour tout problème rencontré (IO,Topia,Script compilation...)
    • compileAllFile

      protected void compileAllFile(SimulationControl control, File directory) throws IOException
      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 (can be null)
      directory - le répertoire où compiler
      Throws:
      IOException