Interface | Description |
---|---|
SimulationJob.PostAction |
Interface permettant d'implanter des actions a faire apres la simulation.
|
SimulationServiceListener |
Ecouteur sur les evenenements de changement d'états des simulations.
|
SimulationServiceTableModel.AbstractJobListener | |
SimulatorLauncher |
Interface devant etre implantée par les classes souhaitants etre utilisees
comme plugin de simulation (InProcess, SubProcess, Datarmor, ...)
|
Class | Description |
---|---|
InProcessSimulatorLauncher |
Fait une simulation dans la meme jvm.
|
InProcessSimulatorLauncher.ObjectCreationListener | |
JDKPriorityBlockingQueue<E> |
It's based on PriorityBlockingQueue code,
because PriorityBlockingQueue use private field for ReentrantLock :(
|
OptimizationPrepareJob |
Permet de generer l'enchainement des simulations d'optimisation.
|
SimulationExecutor |
Un executor qui utilise un certain type de
SimulatorLauncher pour
executer les jobs soumis dans la queue de SimulationService
Les fonctionnalites en plus par rapport a un ThreadPoolExecutor sont:
la possibilite de suspendre l'executor puis ensuite de le relancer
l'utilisation de beforeExecute pour fixer le SimulatorLauncher
du job
Il est aussi possible d'ecoute l'etat de l'attribut pause |
SimulationItem |
Objet representant une simulation qui doit être faite.
|
SimulationJob |
Classe responsable de la simulation d'un
SimulationItem . |
SimulationMonitor |
Moniteur singleton pour pouvoir sauvegarder localement la liste des
simulations démarrées et permettre de continuer le monitoring au
relancemenent d'Isis.
|
SimulationPlanPrepareJob |
Permet de genere les sous simulations d'un plan de simulation.
|
SimulationQueue |
Multi tail PriorityBlockingQueue.
|
SimulationService |
Cette classe est responsable de conservation de toutes les simulations faites
ou a faire.
|
SimulationServiceTableModel |
Model de table pour suivre l'evolution des differentes simulations en cours.
|
SSHSimulatorLauncher |
Use a remote simulation server.
|
SSHSimulatorLauncher.ControlProgressMonitor |
Redefine a custom progress monitor that update control.
|
SubProcessSimulationLauncher |
Lanceur de simulation dans un sous processus.
|
Les simulations sont soumises au SimulationService
via sa methode
submit. Un objet SimulationJob
est alors cree et ajoute a la liste
des simulations presentes (SimulationService.getJobs()
). Si la
simulation est une simple simulation ou une simulation avec plan de simulation
dependant, elle est alors directement ajoutee a la queue de simulation
(simulation a faire). Si
la simulation utilise un plan de simulation independant, un thread est
specialement utilise pour generer toutes les simulations du plan, celles-ci
sont alors ajoutee a la queue, mais n'apparaitront dans la liste des
simulations qu'au moment ou un thread de simulation executera reellement le
job.
Lorsqu'un thread recupere un job dans la queue, il leve un event SimulationServiceListener.simulationStart(SimulationService, SimulationJob)
,
la simulation est alors ajoutee a la liste des simulations visibles si elle
ne l'etait pas encore.
Une fois terminees, les simulations finissent dans la liste des simulations terminees.
Le SimulationService.autoLaunch
permet d'indique si le service est
actif ou non. S'il n'est pas actif, il accepte les simulations mais ne les
execute pas (elles sont en attente). S'il est actif alors les differents
SimulationExecutor
) prenent les jobs de la queue pour faire les
simulations.
Lors de sa creation le SimulationService
a initialise different
SimulationExecutor
en fonction de la configuration. Ces SimulationExecutor
sont responsable de l'execution des simulations de la
queue. Chaque SimulationExecutor
a un
SimulatorLauncher
qu'il utilise
si la simulation n'a pas encore de SimulatorLauncher
d'assigne.
Un SimulationExecutor
peut etre
mis en pause puis relance. Lorsqu'il est en pause, il termine les simulations
en cours mais n'en reprend pas de nouvelle. Cela permet d'arrete un
SimulationExecutor
particulier
sans devoir arreter tout le service de simulation.
Si un SimulationExecutor
prend un job ayant deja un SimulatorLauncher
d'assigne, il utilise alors ce launcher plutot que le sien. Ce choix est derangeant
lorsque l'on souhaite utilise un nombre de thread limite pour un launcher particulier,
mais il est le plus raisonnable car l'autre possibilite est que le job soit
resoumis au SimulationService
jusqu'a ce que le bon SimulationExecutor
le
prenne pour l'executer. On risque dans ce cas d'arriver a une forte
consommation CPU si le seul SimulationExecutor
disponible ne gere pas les jobs en queue.
Le simulation Job encapsule l'appel pour que les implantantations des SimulatorLauncher
soit la plus simple
possible. Il gere les simulations avec plan dependant, les exports depandes
par l'utilisateur, ainsi que l'effacement des simulations si seul les exports
interessait l'utilisateur.
Si le job n'arrive pas a utilise le SimulatorLauncher
il en notifie le SimulationService
qui resoumet le job dans la queue pour qu'un autre SimulationExecutor
prenne ce job. Si trop d'erreurs sont notifiees pour un meme SimulatorLauncher
,
le SimulationService
prend alors la decision d'arreter l'executor associe.
Pour les simulations ou l'utilisateur avait fixe un SimulatorLauncher
particulier en cas
de notification d'erreur au SimulationService
ce SimulatorLauncher
n'est plus pris en compte et
n'importe quel SimulatorLauncher
peut faire cette simulation.
Copyright © 1999–2020 CodeLutin. All rights reserved.