Author: bpoussin Date: 2014-07-29 12:03:58 +0200 (Tue, 29 Jul 2014) New Revision: 4071 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4071 Log: fixes #3953: When stop simulation, no end date and no statistics in log Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-07-29 08:15:06 UTC (rev 4070) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2014-07-29 10:03:58 UTC (rev 4071) @@ -89,9 +89,7 @@ protected SimulationStorage simulation; - /** - * {@inheritDoc} - */ + @Override public void simulate(SimulationService simulationService, SimulationItem simulationItem) throws RemoteException { @@ -355,8 +353,9 @@ // SimulationContext context = SimulationContext.get(); - context.setSimulationControl(control != null ? control - : new SimulationControl(simulation.getName())); + control = control != null ? control + : new SimulationControl(simulation.getName()); + context.setSimulationControl(control); // make compile directory outside getCompileDirectory() to improve performance File compileDirectory = IsisFish.config.getCompileDirectory(); @@ -437,6 +436,11 @@ simulation.getInformation().addInformation( context.getTimeStepStat().exportText(null).toString()); + // on ajoute les info sur le resultStorage avant les exports qui + // peuvent changer les stats + ResultStorage resultStorage = simulation.getResultStorage(); + simulation.getInformation().addInformation(resultStorage.getInfo()); + // // Ajout des nouveaux objets créés durant la simulation // @@ -457,22 +461,12 @@ // context.fireAfterSimulation(); - message(control, t("isisfish.message.simulation.ended")); - - simulation.getInformation().setSimulationEnd(new java.util.Date()); - - // la simulation est termine on avance la progress au dernier cran - // attention on utilise ca aussi pour detecter la fin d'une simulation - // quand date =progressMax - control.setProgress(control.getProgress() + 1); - // suppression des résultats si l'utilisateur a demande à ne conserver // que les resultats de seulement la première simulation d'une AS - ResultStorage resultStorage = simulation.getResultStorage(); if (parameters.isSensitivityAnalysisOnlyKeepFirst() && !control.getId().endsWith("_0")) { resultStorage.delete(); } - simulation.getInformation().addInformation(resultStorage.getInfo()); + resultStorage.close(); } catch (OutOfMemoryError eee) { @@ -535,6 +529,17 @@ } FileUtils.deleteQuietly(simulationBuildDirectory); + + simulation.getInformation().setSimulationEnd(new java.util.Date()); + + // la simulation est termine on avance la progress au dernier cran + // attention on utilise ca aussi pour detecter la fin d'une simulation + // quand date =progressMax + control.setProgress(control.getProgress() + 1); + + message(control, t("isisfish.message.simulation.ended")); + control.stopSimulation(); + // context is used in TraceAspect.printStatistiqueAndClear() SimulationContext.remove(); } Modified: trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2014-07-29 08:15:06 UTC (rev 4070) +++ trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2014-07-29 10:03:58 UTC (rev 4071) @@ -633,6 +633,11 @@ } try { + // FIXME poussin 20140729 je pense que ca pose probleme qu'un + // thread autre que le thread de simulation ferme les storages + // surtout que la condition est stopRequest (simulation pas forcement fini) + // ca ne poserait pas de probleme si la condition etait isRunning() == false + // Et surtout c'est tres bizarre que ce soit le travail d'un Monitor :( simulation.closeStorage(); simulation.closeMemStorage(); } catch (TopiaException ex) {