r2599 - in isis-fish/trunk/src/main/java/fr/ifremer/isisfish: aspect simulator/launcher util
Author: chatellier Date: 2009-09-11 10:13:35 +0000 (Fri, 11 Sep 2009) New Revision: 2599 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java Log: Give a common trace object for both aspects (Cache/Trace) Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java 2009-09-11 09:27:55 UTC (rev 2598) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Cache.java 2009-09-11 10:13:35 UTC (rev 2599) @@ -39,6 +39,8 @@ import org.codehaus.aspectwerkz.joinpoint.MethodRtti; import org.codehaus.aspectwerkz.joinpoint.MethodSignature; +import fr.ifremer.isisfish.simulator.SimulationContext; + /** * Cache aspect. * @@ -71,6 +73,19 @@ instances.add(this); } + /** + * Return trace object from context. + * + * @return trace object from context + */ + protected fr.ifremer.isisfish.util.Trace getTrace() { + SimulationContext context = SimulationContext.get(); + + fr.ifremer.isisfish.util.Trace result = (fr.ifremer.isisfish.util.Trace) context + .getValue(fr.ifremer.isisfish.util.Trace.class.getName()); + return result; + } + // @Before("scriptsMethod") // public void traceBeforeExecute (JoinPoint jp) { // System.out.println("before !!!"); @@ -94,9 +109,10 @@ Object result = cache.get(key); if (result == null) { - // FIXME computation increment (/ by 0) + // computation increment (/ by 0) + // FIXME need to be called, but fail with empty stack //Method method = ((MethodSignature)jp.getSignature()).getMethod(); - //trace.traceAfterComputation(method); + //getTrace().traceAfterComputation(method); result = realCall(jp); // addListenerFor(key); // pas necessaire car on a la date et pour une date donnée rien ne peut changer Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java 2009-09-11 09:27:55 UTC (rev 2598) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/aspect/Trace.java 2009-09-11 10:13:35 UTC (rev 2599) @@ -34,6 +34,8 @@ import org.codehaus.aspectwerkz.joinpoint.JoinPoint; import org.codehaus.aspectwerkz.joinpoint.MethodSignature; +import fr.ifremer.isisfish.simulator.SimulationContext; + /** * Permet de tracer les appels aux methodes utilisateur ainsi que l'execution * a ces methodes. La difference entre les deux est lors de l'utilisation du @@ -53,53 +55,61 @@ /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory.getLog(Trace.class); - + static private List<Trace> instances = new ArrayList<Trace>(); - - protected fr.ifremer.isisfish.util.Trace trace = new fr.ifremer.isisfish.util.Trace(""); - - @Expression( - "execution(* scripts..*(..))" + - " || execution(* simulators..*(..))" + - " || execution(* rules..*(..)) " + - " || execution(* analyseplans..*(..)) " + - " || execution(* formules..*(..))" - ) + + @Expression("execution(* scripts..*(..))" + + " || execution(* simulators..*(..))" + + " || execution(* rules..*(..)) " + + " || execution(* analyseplans..*(..)) " + + " || execution(* formules..*(..))") Pointcut executeMethod; - + public Trace() { instances.add(this); } - + + /** + * Return trace object from context. + * + * @return trace object from context + */ + protected fr.ifremer.isisfish.util.Trace getTrace() { + SimulationContext context = SimulationContext.get(); + + fr.ifremer.isisfish.util.Trace result = (fr.ifremer.isisfish.util.Trace) context + .getValue(fr.ifremer.isisfish.util.Trace.class.getName()); + return result; + } + @Before("executeMethod") - public void traceBeforeExecute (JoinPoint jp) { - trace.traceBefore(); + public void traceBeforeExecute(JoinPoint jp) { + getTrace().traceBefore(); } - - @AfterThrowing(type="Exception",pointcut="executeMethod") - public void traceAfterThrowingExecute (JoinPoint jp) { + + @AfterThrowing(type = "Exception", pointcut = "executeMethod") + public void traceAfterThrowingExecute(JoinPoint jp) { // si une exeption est leve, il faut faire la meme chose traceAfterExecute(jp); } - + @After("executeMethod") - public void traceAfterExecute (JoinPoint jp) { - Method method = ((MethodSignature)jp.getSignature()).getMethod(); - trace.traceAfterCall(method); + public void traceAfterExecute(JoinPoint jp) { + Method method = ((MethodSignature) jp.getSignature()).getMethod(); + getTrace().traceAfterCall(method); } /** * Affiche les statistiques * + * @return statistics as string */ - static public String printStatistiqueAndClear() { + public static String printStatistiqueAndClear() { StringBuffer result = new StringBuffer(); for (Trace trace : instances) { - result.append(trace.trace.printStatisticAndClear()); + result.append(trace.getTrace().printStatisticAndClear()); } instances.clear(); return result.toString(); } } - - Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2009-09-11 09:27:55 UTC (rev 2598) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/InProcessSimulatorLauncher.java 2009-09-11 10:13:35 UTC (rev 2599) @@ -344,15 +344,23 @@ // // Activation de l'OAP demandée // - if (parameters.getUseStatistic()) { - message(control, _("isisfish.message.setting.trace.aspects")); - classLoader.deploy(Trace.class); + if (parameters.getUseStatistic() || parameters.getUseOptimization()) { + + // il est necessaire de passer un object trace/cache + // commun, donc on le met dans le context + // pas moyen de le passer autrement plus simplement + fr.ifremer.isisfish.util.Trace traceObject = new fr.ifremer.isisfish.util.Trace(""); + context.setValue(fr.ifremer.isisfish.util.Trace.class.getName(), traceObject); + + if (parameters.getUseStatistic()) { + message(control, _("isisfish.message.setting.trace.aspects")); + classLoader.deploy(Trace.class); + } + if (parameters.getUseOptimization()) { + message(control, _("isisfish.message.setting.cache.aspects")); + classLoader.deploy(Cache.class); + } } - if (parameters.getUseOptimization()) { - message(control, _("isisfish.message.setting.cache.aspects")); - classLoader.deploy(Cache.class); - } - // recherche du simulateur a utiliser String simulatorName = parameters.getSimulatorName(); @@ -440,8 +448,6 @@ } } - SimulationContext.remove(); - // // Affichage des statistiques // @@ -459,6 +465,8 @@ simulation.getInformation().setOptimizationUsage(cache); } + // context is used in Trace.printStatistiqueAndClear() + SimulationContext.remove(); } return result; } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java 2009-09-11 09:27:55 UTC (rev 2598) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/util/Trace.java 2009-09-11 10:13:35 UTC (rev 2599) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002-2009 Code Lutin, Benjamin Poussin + * Copyright (C) 2002-2009 Ifremer, Code Lutin, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -95,10 +95,10 @@ callStack.push(stackItem); } - public void traceAfterCall (Object e) { + public void traceAfterCall(Object e) { traceAfter(e, false); } - public void traceAfterComputation (Object e) { + public void traceAfterComputation(Object e) { traceAfter(e, true); } @@ -166,7 +166,7 @@ long[] stat = getStatistics(e); // fix / by zero - // FIXME need to be fixed in aspect !!! + // if Cache aspect has not been selected if (stat[STAT_COMPUTATION] == 0) { stat[STAT_COMPUTATION] = stat[STAT_CALL]; }
participants (1)
-
chatellier@users.labs.libre-entreprise.org