You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2012/03/13 14:47:03 UTC

svn commit: r1300132 - in /myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src: main/java/rewrite/org/apache/myfaces/extensions/scripting/core/api/ main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/ main/j...

Author: werpu
Date: Tue Mar 13 13:47:02 2012
New Revision: 1300132

URL: http://svn.apache.org/viewvc?rev=1300132&view=rev
Log:
EXTSCRIPT-154: Code Rewrite/Refactoring,cleaning up the compiler interface ongoing works on the components

Added:
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponent.java
      - copied, changed from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponentRenderer.java
      - copied, changed from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/RendererConst.java
      - copied, changed from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/RendererConst.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistory.java
      - copied, changed from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistory.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistoryRenderer.java
      - copied, changed from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistoryRenderer.java
Modified:
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/api/Compiler.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompiler.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/java/rewrite/org/apache/myfaces/extensions/scripting/scanningcore/engine/compiler/JavaCompilerTest.java

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/api/WeavingContext.java Tue Mar 13 13:47:02 2012
@@ -23,6 +23,7 @@ import rewrite.org.apache.myfaces.extens
 import rewrite.org.apache.myfaces.extensions.scripting.core.common.util.ReflectUtil;
 import rewrite.org.apache.myfaces.extensions.scripting.core.engine.FactoryEngines;
 import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.ClassScanner;
+import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
 import rewrite.org.apache.myfaces.extensions.scripting.core.loader.ThrowAwayClassloader;
 import rewrite.org.apache.myfaces.extensions.scripting.core.monitor.ClassResource;
@@ -34,10 +35,7 @@ import rewrite.org.apache.myfaces.extens
 import java.io.IOException;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Logger;
@@ -51,23 +49,90 @@ import java.util.logging.Logger;
 
 public class WeavingContext
 {
+    static final Logger log = Logger.getLogger(WeavingContext.class.getName());
+
     /**
      * lock var which can be used for recompilation
      */
     public AtomicBoolean recompileLock = new AtomicBoolean(false);
+    /**
+     * configuration which stores all external configuration entries
+     */
     protected Configuration configuration = new Configuration();
 
     //ClassDependencies _dependencyMap = new ClassDependencies();
-
+    /**
+     * Service provider for the implementation under which this extension
+     * runs
+     */
     ImplementationSPI _implementation = null;
+    /**
+     * the collection of reloading strategies depending on their artifact type
+     */
     GlobalReloadingStrategy _reloadingStrategy = new GlobalReloadingStrategy();
+    /**
+     * the annotation scanning reference
+     */
     ClassScanner _annotationScanner = null;
-    Logger log = Logger.getLogger(this.getClass().getName());
+
+    /**
+     * true only if the startup has performed without errors
+     */
     boolean _scriptingEnabled = true;
 
-    /*holder for various operations within our lifecycle*/
+    /**
+     * holder for various operations within our lifecycle
+     */
     ConcurrentHashMap<String, Long> lifecycleRegistry = new ConcurrentHashMap<String, Long>();
 
+    /**
+     * This is a log which keeps track of the taints
+     * over time, we need that mostly for bean refreshes
+     * in multiuser surroundings, because only tainted beans need
+     * to be refreshed.
+     * Now if a user misses multiple updates he has to get a full
+     * set of changed classes to be able to drop all personal scoped beans tainted
+     * since the he refreshed last! Hence we have to move away from our
+     * two dimensional &lt;class, taint&gt; to a three dimensional &lt;class, taint, time&gt;
+     * view of things
+     */
+    private List<TaintingHistoryEntry> _taintLog = Collections.synchronizedList(new LinkedList<TaintingHistoryEntry>());
+
+    /**
+     * compilation results holder for the compiler listeners (components etc...)
+     */
+    private static final Map<Integer, CompilationResult> _compilationResults = new ConcurrentHashMap<Integer, CompilationResult>();
+
+    /**
+     * we keep a 10 minutes timeout period to keep the performance in place
+     */
+    private final long TAINT_HISTORY_TIMEOUT = 10 * 60 * 1000;
+
+    /**
+     * internal class used by our own history log
+     */
+    static class TaintingHistoryEntry
+    {
+        long _timestamp;
+        ClassResource _data;
+
+        public TaintingHistoryEntry(ClassResource data)
+        {
+            _data = data;
+            _timestamp = System.currentTimeMillis();
+        }
+
+        public long getTimestamp()
+        {
+            return _timestamp;
+        }
+
+        public ClassResource getData()
+        {
+            return _data;
+        }
+    }
+
     public void initEngines() throws IOException
     {
         FactoryEngines.getInstance().init();
@@ -115,6 +180,9 @@ public class WeavingContext
         return ret;
     }
 
+    /**
+     * @return a map of all watched resources over all engines
+     */
     public Map<String, ClassResource> getAllWatchedResources()
     {
         Map<String, ClassResource> ret = new HashMap<String, ClassResource>();
@@ -129,6 +197,10 @@ public class WeavingContext
         return ret;
     }
 
+    /**
+     * @param key the watched resource classname
+     * @return the watched resource from the given key or null
+     */
     public ClassResource getWatchedResource(String key)
     {
         for (ScriptingEngine engine : getEngines())
@@ -139,6 +211,12 @@ public class WeavingContext
         return null;
     }
 
+    /**
+     * checks if a resource idenified by key is tainted
+     *
+     * @param key the identifier for the resource
+     * @return true in case of being tainted
+     */
     public boolean isTainted(String key)
     {
         ClassResource res = getWatchedResource(key);
@@ -353,6 +431,9 @@ public class WeavingContext
         lifecycleRegistry.put("LIFECYCLE_LAST_TAINTED", System.currentTimeMillis());
     }
 
+    /**
+     * @return the time value of the last taint happening
+     */
     public long getLastTaint()
     {
         Long lastTainted = lifecycleRegistry.get("LIFECYCLE_LAST_TAINTED");
@@ -360,11 +441,17 @@ public class WeavingContext
         return lastTainted;
     }
 
+    /**
+     * marks the last annotation scan
+     */
     public void markLastAnnotationScan()
     {
         lifecycleRegistry.put("LIFECYCLE_LAST_ANN_SCAN", System.currentTimeMillis());
     }
 
+    /**
+     * @return a the time value of the last annotation scan
+     */
     public long getLastAnnotationScan()
     {
         Long lastTainted = lifecycleRegistry.get("LIFECYCLE_LAST_ANN_SCAN");
@@ -372,6 +459,111 @@ public class WeavingContext
         return lastTainted;
     }
 
+    //------------------------------ tainting history entries -----------------------
+
+    /**
+     * adds a new entry into our taint log
+     * which allows us to access tainting data
+     * from a given point in time
+     *
+     * @param data the tainting data to be added
+     */
+    public void addTaintLogEntry(ClassResource data)
+    {
+        _taintLog.add(new TaintingHistoryEntry(data));
+    }
+
+    /**
+     * garbage collects our tainting data
+     * and removes all entries which are not
+     * present anymore due to timeout
+     * this gc code is called asynchronously
+     * from our tainting thread to keep the
+     * performance intact
+     */
+    public void gcTaintLog()
+    {
+        long timeoutTimestamp = System.currentTimeMillis() - TAINT_HISTORY_TIMEOUT;
+        Iterator<TaintingHistoryEntry> it = _taintLog.iterator();
+
+        while (it.hasNext())
+        {
+            TaintingHistoryEntry entry = it.next();
+            if (entry.getTimestamp() < timeoutTimestamp)
+            {
+                it.remove();
+            }
+        }
+    }
+
+    /**
+     * returns the last noOfEntries entries in the taint history
+     *
+     * @param noOfEntries the number of entries to be delivered
+     * @return a collection of the last &lt;noOfEntries&gt; entries
+     */
+    public Collection<ClassResource> getLastTainted(int noOfEntries)
+    {
+        Iterator<TaintingHistoryEntry> it = _taintLog.subList(Math.max(_taintLog.size() - noOfEntries, 0), _taintLog.size()).iterator();
+        List<ClassResource> retVal = new LinkedList<ClassResource>();
+        while (it.hasNext())
+        {
+            TaintingHistoryEntry entry = it.next();
+            retVal.add(entry.getData());
+        }
+        return retVal;
+    }
+
+    /**
+     * Returns a set of tainting data from a given point in time up until now
+     *
+     * @param timestamp the point in time from which the tainting data has to be derived from
+     * @return a set of entries which are a union of all points in time beginning from timestamp
+     */
+    public Collection<ClassResource> getTaintHistory(long timestamp)
+    {
+        List<ClassResource> retVal = new LinkedList<ClassResource>();
+        Iterator<TaintingHistoryEntry> it = _taintLog.iterator();
+
+        while (it.hasNext())
+        {
+            TaintingHistoryEntry entry = it.next();
+            if (entry.getTimestamp() >= timestamp)
+            {
+                retVal.add(entry.getData());
+            }
+        }
+        return retVal;
+    }
+
+    /**
+     * Returns a set of tainted classes from a given point in time up until now
+     *
+     * @param timestamp the point in time from which the tainting data has to be derived from
+     * @return a set of classnames which are a union of all points in time beginning from timestamp
+     */
+    public Set<String> getTaintHistoryClasses(long timestamp)
+    {
+        Set<String> retVal = new HashSet<String>();
+        Iterator<TaintingHistoryEntry> it = _taintLog.iterator();
+
+        while (it.hasNext())
+        {
+            TaintingHistoryEntry entry = it.next();
+            if (entry.getTimestamp() >= timestamp)
+            {
+                if (entry.getData() instanceof ClassResource)
+                {
+                    retVal.add(((ClassResource) entry.getData()).getAClass().getName());
+                } else
+                {
+                    retVal.add(entry.getData().getFile().getAbsolutePath());
+                }
+            }
+        }
+        return retVal;
+    }
+
     //----------------------------------------------------------------------
     /*public ClassDependencies getDependencyMap()
     {
@@ -410,4 +602,14 @@ public class WeavingContext
         _scriptingEnabled = scriptingEnabled;
     }
 
+    public CompilationResult getCompilationResult(Integer scriptingEngine)
+    {
+        return _compilationResults.get(scriptingEngine);
+    }
+
+    public void setCompilationResult(Integer scriptingEngine, CompilationResult result)
+    {
+        _compilationResults.put(scriptingEngine, result);
+    }
+
 }

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/common/util/FileUtils.java Tue Mar 13 13:47:02 2012
@@ -76,7 +76,7 @@ public class FileUtils {
         File tempDir;
 
         String baseTempPath = System.getProperty("java.io.tmpdir");
-        String tempDirName = "myfaces_compilation_"; //+ _tempMarker;
+        String tempDirName = "myfaces_compilation_" + _tempMarker;
 
         tempDir = new File(baseTempPath + File.separator + tempDirName);
         /*while (tempDir.exists()) {

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/EngineJava.java Tue Mar 13 13:47:02 2012
@@ -23,6 +23,7 @@ import rewrite.org.apache.myfaces.extens
 import rewrite.org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 import rewrite.org.apache.myfaces.extensions.scripting.core.common.util.ClassUtils;
 import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.CompilationException;
+import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.ScriptingEngine;
 import rewrite.org.apache.myfaces.extensions.scripting.core.engine.compiler.JSR199Compiler;
 
@@ -62,15 +63,12 @@ public class EngineJava extends BaseEngi
         Collection<String> sourceDirs = configuration.getSourceDirs(getEngineType());
         for (String sourceRoot : sourceDirs)
         {
-            try
-            {
-                compiler.compile(new File(sourceRoot), targetDir, ClassUtils.getContextClassLoader());
-            }
-            catch (CompilationException e)
-            {
-                log.severe(e.getMessage());
-                e.printStackTrace();
+            CompilationResult res =  compiler.compile(new File(sourceRoot), targetDir,
+                ClassUtils.getContextClassLoader());
+            if(res.hasErrors()) {
+                log.severe(res.getCompilerOutput());
             }
+
         }
     }
 

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/api/Compiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/api/Compiler.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/api/Compiler.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/api/Compiler.java Tue Mar 13 13:47:02 2012
@@ -40,7 +40,6 @@ public interface Compiler {
      * @throws CompilationException
      *          if a severe error occurred while trying to compile a file
      */
-    public CompilationResult compile(File sourcePath, File targetPath, ClassLoader classLoader)
-            throws CompilationException;
+    public CompilationResult compile(File sourcePath, File targetPath, ClassLoader classLoader);
 
 }

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompiler.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompiler.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/GroovyCompiler.java Tue Mar 13 13:47:02 2012
@@ -96,6 +96,10 @@ public class GroovyCompiler implements r
             result.registerWarning(convertMessage(collector.getWarning(i)));
         }
 
+        if(result != null) {
+             WeavingContext.getInstance().setCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_GROOVY, result);
+        }
+
         return result;
     }
 

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/engine/compiler/JSR199Compiler.java Tue Mar 13 13:47:02 2012
@@ -20,6 +20,7 @@
 package rewrite.org.apache.myfaces.extensions.scripting.core.engine.compiler;
 
 import rewrite.org.apache.myfaces.extensions.scripting.core.api.Configuration;
+import rewrite.org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
 import rewrite.org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
 import rewrite.org.apache.myfaces.extensions.scripting.core.common.util.FileUtils;
 import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.CompilationException;
@@ -51,7 +52,7 @@ public class JSR199Compiler implements r
 
     javax.tools.JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler();
     ContainerFileManager fileManager = null;
-    CompilationResult result = null;
+
 
     public JSR199Compiler()
     {
@@ -59,56 +60,6 @@ public class JSR199Compiler implements r
     }
 
     /**
-     * Compile a single file
-     *
-     * @param sourceRoot the source search path (root of our source)
-     * @return the compilation result of the  compilation
-     * @throws org.apache.myfaces.extensions.scripting.api.CompilationException
-     *          in case of a compilation error
-     * @deprecated note we will move over to a single
-     *             compile step in the beginning in the long run
-     *             we will deprecate it as soon as the full
-     *             compile at the beginning of the request
-     *             is implemented
-     *             <p/>
-     *             TODO move this code over to the weaver instead of the compiler
-     *             we do not do a single compile step anymore
-     */
-    public CompilationResult compile(File sourceRoot, File targetPath, File toCompile, ClassLoader classPathHolder) throws CompilationException
-    {
-        try
-        {
-            fileManager = new ContainerFileManager(javaCompiler.getStandardFileManager(new DiagnosticCollector<JavaFileObject>(), null, null));
-
-            DiagnosticCollector<JavaFileObject> diagnosticCollector = new DiagnosticCollector<JavaFileObject>();
-
-            //TODO add whitelist check here
-
-            getLog().info("[EXT-SCRIPTING] Doing a full recompile");
-
-            Iterable<? extends JavaFileObject> fileObjects = fileManager.getJavaFileObjects(toCompile);
-            String[] options = new String[]{JC_CLASSPATH, fileManager.getClassPath(), JC_TARGET_PATH,
-                                            targetPath.getAbsolutePath(),
-                                            JC_SOURCEPATH,
-                                            sourceRoot.getAbsolutePath(), JC_DEBUG};
-            javaCompiler.getTask(null, fileManager, diagnosticCollector, Arrays.asList(options), null, fileObjects).call();
-            try
-            {
-                handleDiagnostics(diagnosticCollector);
-            }
-            catch (ClassNotFoundException e)
-            {
-                throw new CompilationException(e);
-            }
-            return this.result;
-        }
-        finally
-        {
-            this.result = null;
-        }
-    }
-
-    /**
      * compile all files starting from a given root
      * <p/>
      * note, the java compiler interface does not allow per se
@@ -122,10 +73,7 @@ public class JSR199Compiler implements r
      * @throws org.apache.myfaces.extensions.scripting.api.CompilationException
      *          in case of a compilation error
      */
-    public CompilationResult compile(File sourceRoot, File destination, ClassLoader loader) throws CompilationException
-    {
-        try
-        {
+    public CompilationResult compile(File sourceRoot, File destination, ClassLoader loader)   {
             WeavingContext context = WeavingContext.getInstance();
             Configuration configuration = context.getConfiguration();
 
@@ -135,8 +83,6 @@ public class JSR199Compiler implements r
 
             getLog().info("[EXT-SCRIPTING] Doing a full recompile");
 
-            //List<File> sourceFiles = FileUtils.fetchSourceFiles(WeavingContext.getConfiguration()
-            //    .getWhitelistedSourceDirs(ENGINE_TYPE_JSF_JAVA), JAVA_WILDCARD);
             List<File> sourceFiles = FileUtils.fetchSourceFiles(configuration.getWhitelistedSourceDirs
                     (ENGINE_TYPE_JSF_JAVA), JAVA_WILDCARD);
 
@@ -152,20 +98,13 @@ public class JSR199Compiler implements r
                                             destination.getAbsolutePath(), JC_SOURCEPATH,
             sourceRoot.getAbsolutePath(), JC_DEBUG};
             javaCompiler.getTask(null, fileManager, diagnosticCollector, Arrays.asList(options), null, fileObjects).call();
-            try
-            {
-                handleDiagnostics(diagnosticCollector);
-            }
-            catch (ClassNotFoundException e)
-            {
-                throw new CompilationException(e);
-            }
-            return this.result;
-        }
-        finally
-        {
-            this.result = null;
-        }
+
+
+            CompilationResult result =  handleDiagnostics(diagnosticCollector);
+
+            WeavingContext.getInstance().setCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_JAVA, result);
+            return result;
+
     }
 
     /**
@@ -177,8 +116,7 @@ public class JSR199Compiler implements r
      * @throws ClassNotFoundException in case of an error (this is enforced by the compiler interface
      *                                and probably will be overhauled in the long run)
      */
-    private void handleDiagnostics(DiagnosticCollector<JavaFileObject> diagnosticCollector) throws
-                                                                                            ClassNotFoundException
+    private CompilationResult handleDiagnostics(DiagnosticCollector<JavaFileObject> diagnosticCollector)
     {
         if (diagnosticCollector.getDiagnostics().size() > 0)
         {
@@ -200,15 +138,13 @@ public class JSR199Compiler implements r
                     result.getWarnings().add(new CompilationResult.CompilationMessage(diagnostic.getLineNumber(), diagnostic.getMessage(Locale.getDefault())));
                 }
                 errors.append(error);
+
             }
-            this.result = result;
-            //WeavingContext.setCompilationResult(ENGINE_TYPE_JSF_JAVA, result);
-            assertErrorFound(errors, hasError);
-            //return result;
+            return result;
         } else
         {
             //WeavingContext.setCompilationResult(ENGINE_TYPE_JSF_JAVA, new CompilationResult(""));
-            this.result = new CompilationResult("");
+            return new CompilationResult("");
         }
     }
 

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/core/monitor/ClassResource.java Tue Mar 13 13:47:02 2012
@@ -152,6 +152,8 @@ public class ClassResource extends Watch
             WeavingContext.getInstance().markLastTaint();
             //TODO add logging event here
             logger.info("[EXT-SCRIPTING] tainting " + getSourceFile());
+            WeavingContext.getInstance().addTaintLogEntry(this);
+            WeavingContext.getInstance().gcTaintLog();
         }
         tainted = value;
     }

Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponent.java (from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponent.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponent.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java&r1=1300003&r2=1300132&rev=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponent.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponent.java Tue Mar 13 13:47:02 2012
@@ -16,10 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.extensions.scripting.components;
+package rewrite.org.apache.myfaces.extensions.scripting.jsf.components;
 
-import org.apache.myfaces.extensions.scripting.core.util.StringUtils;
-import org.apache.myfaces.extensions.scripting.api.ScriptingConst;
+
+import rewrite.org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
+import rewrite.org.apache.myfaces.extensions.scripting.core.common.util.StringUtils;
 
 import javax.el.ValueExpression;
 import javax.faces.component.UIOutput;

Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponentRenderer.java (from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponentRenderer.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponentRenderer.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java&r1=1300003&r2=1300132&rev=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/CompilerComponentRenderer.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/CompilerComponentRenderer.java Tue Mar 13 13:47:02 2012
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.extensions.scripting.components;
+package rewrite.org.apache.myfaces.extensions.scripting.jsf.components;
 
-import org.apache.myfaces.extensions.scripting.api.CompilationResult;
-import org.apache.myfaces.extensions.scripting.api.ScriptingConst;
-import org.apache.myfaces.extensions.scripting.core.util.StringUtils;
-import org.apache.myfaces.extensions.scripting.core.util.WeavingContext;
+import rewrite.org.apache.myfaces.extensions.scripting.core.api.ScriptingConst;
+import rewrite.org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
+import rewrite.org.apache.myfaces.extensions.scripting.core.common.util.StringUtils;
+import rewrite.org.apache.myfaces.extensions.scripting.core.engine.api.CompilationResult;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
@@ -50,19 +50,19 @@ public class CompilerComponentRenderer e
         CompilationResult result = null;
         switch (scriptingLanguage) {
             case ScriptingConst.ENGINE_TYPE_JSF_JAVA:
-                result = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_JAVA);
+                result = WeavingContext.getInstance().getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_JAVA);
                 break;
             case ScriptingConst.ENGINE_TYPE_JSF_GROOVY:
-                result = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_GROOVY);
+                result = WeavingContext.getInstance().getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_GROOVY);
                 break;
             case ScriptingConst.ENGINE_TYPE_JSF_ALL:
                 result = new CompilationResult("");
-                CompilationResult tempResult = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_JAVA);
+                CompilationResult tempResult = WeavingContext.getInstance().getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_JAVA);
                 if (tempResult != null) {
                     copyCompilationResult(result, tempResult);
                 }
 
-                tempResult = WeavingContext.getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_GROOVY);
+                tempResult = WeavingContext.getInstance().getCompilationResult(ScriptingConst.ENGINE_TYPE_JSF_GROOVY);
                 if (tempResult != null) {
                     copyCompilationResult(result, tempResult);
                 }

Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/RendererConst.java (from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/RendererConst.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/RendererConst.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/RendererConst.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/RendererConst.java&r1=1300003&r2=1300132&rev=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/RendererConst.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/RendererConst.java Tue Mar 13 13:47:02 2012
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.extensions.scripting.components;
+package rewrite.org.apache.myfaces.extensions.scripting.jsf.components;
 
 /**
  * Renderer Constant shared by both renderers

Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistory.java (from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistory.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistory.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistory.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistory.java&r1=1300003&r2=1300132&rev=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistory.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistory.java Tue Mar 13 13:47:02 2012
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.extensions.scripting.components;
+package rewrite.org.apache.myfaces.extensions.scripting.jsf.components;
 
 import javax.el.ValueExpression;
 import javax.faces.component.UIOutput;

Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistoryRenderer.java (from r1300003, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistoryRenderer.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistoryRenderer.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistoryRenderer.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistoryRenderer.java&r1=1300003&r2=1300132&rev=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/components/TaintHistoryRenderer.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/jsf/components/TaintHistoryRenderer.java Tue Mar 13 13:47:02 2012
@@ -17,12 +17,11 @@
  * under the License.
  */
 
-package org.apache.myfaces.extensions.scripting.components;
+package rewrite.org.apache.myfaces.extensions.scripting.jsf.components;
 
-import org.apache.myfaces.extensions.scripting.core.util.WeavingContext;
-import org.apache.myfaces.extensions.scripting.monitor.ClassResource;
-import org.apache.myfaces.extensions.scripting.monitor.RefreshAttribute;
-import org.apache.myfaces.extensions.scripting.monitor.WatchedResource;
+
+import rewrite.org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
+import rewrite.org.apache.myfaces.extensions.scripting.core.monitor.ClassResource;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
@@ -31,7 +30,6 @@ import javax.faces.render.Renderer;
 import java.io.IOException;
 import java.text.DateFormat;
 import java.util.Collection;
-import java.util.Date;
 
 /**
  * A renderer which displays our taint history
@@ -52,7 +50,7 @@ public class TaintHistoryRenderer extend
         startDiv(component, responseWriter, "historyBox");
         int lastTainted = ((TaintHistory) component).getNoEntries();
 
-        Collection<WatchedResource> result = WeavingContext.getRefreshContext().getLastTainted(lastTainted);
+        Collection<ClassResource> result = WeavingContext.getInstance().getLastTainted(lastTainted);
         if (result == null || result.isEmpty()) {
             responseWriter.write(RendererConst.NO_TAINT_HISTORY_FOUND);
         } else {
@@ -64,9 +62,10 @@ public class TaintHistoryRenderer extend
 
     }
 
-    private void writeHistory(UIComponent component, ResponseWriter responseWriter, Collection<WatchedResource> result) throws IOException {
+    private void writeHistory(UIComponent component, ResponseWriter responseWriter,
+                              Collection<ClassResource> result) throws IOException {
         startDiv(component, responseWriter, "history");
-        for (WatchedResource entry : result) {
+        for (ClassResource entry : result) {
             startDiv(component, responseWriter, RendererConst.LINE);
             writeDiv(component, responseWriter, RendererConst.TIMESTAMP, DateFormat.getInstance().format(entry.getFile().lastModified()));
             writeDiv(component, responseWriter, RendererConst.CHANGED_FILE, entry.getFile().getAbsolutePath());

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/java/rewrite/org/apache/myfaces/extensions/scripting/scanningcore/engine/compiler/JavaCompilerTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/java/rewrite/org/apache/myfaces/extensions/scripting/scanningcore/engine/compiler/JavaCompilerTest.java?rev=1300132&r1=1300131&r2=1300132&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/java/rewrite/org/apache/myfaces/extensions/scripting/scanningcore/engine/compiler/JavaCompilerTest.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/test/java/rewrite/org/apache/myfaces/extensions/scripting/scanningcore/engine/compiler/JavaCompilerTest.java Tue Mar 13 13:47:02 2012
@@ -105,14 +105,8 @@ public class JavaCompilerTest
         WeavingContext.getInstance().getConfiguration().addWhitelistPackage("compiler.myPackage");
 
         CompilationResult result = null;
-        try
-        {
-            result = compiler.compile(root, target, loader);
-        }
-        catch (CompilationException e)
-        {
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-        }
+
+        result = compiler.compile(root, target, loader);
 
         assertTrue(RESULT_HAS_NO_ERRORS, !result.hasErrors());
 
@@ -141,14 +135,7 @@ public class JavaCompilerTest
         target.deleteOnExit();
 
         CompilationResult result = null;
-        try
-        {
-            result = compiler.compile(root, target, loader);
-        }
-        catch (CompilationException e)
-        {
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-        }
+        result = compiler.compile(root, target, loader);
 
         assertTrue(RESULT_HAS_NO_ERRORS, !result.hasErrors());