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/07 09:34:21 UTC

svn commit: r1297878 - in /myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting: context/ engine/ monitor/

Author: werpu
Date: Wed Mar  7 08:34:21 2012
New Revision: 1297878

URL: http://svn.apache.org/viewvc?rev=1297878&view=rev
Log:
EXTSCRIPT-154: fixing tainting process, it now works with all dependencies.
adding delta state before and after compile.

Modified:
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/WeavingContext.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ClassResource.java
    myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.java

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/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/context/WeavingContext.java?rev=1297878&r1=1297877&r2=1297878&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/WeavingContext.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/WeavingContext.java Wed Mar  7 08:34:21 2012
@@ -89,6 +89,16 @@ public class WeavingContext
         this.configuration = configuration;
     }
 
+    public boolean needsRecompile() {
+        for (ScriptingEngine engine : getEngines())
+        {
+            //log.info("[EXT-SCRIPTING] scanning " + engine.getEngineType() + " files");
+            if(engine.needsRecompile()) return true;
+            //log.info("[EXT-SCRIPTING] scanning " + engine.getEngineType() + " files done");
+        }
+        return false;
+    }
+    
     public void initialFullScan()
     {
         for (ScriptingEngine engine : getEngines())

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.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/engine/BaseEngine.java?rev=1297878&r1=1297877&r2=1297878&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.java Wed Mar  7 08:34:21 2012
@@ -85,19 +85,22 @@ public abstract class BaseEngine
            Collection<File> sourceFiles = FileUtils.fetchSourceFiles(new File(sourcePath), "*."+ getFileEnding());
            
             for(File sourceFile: sourceFiles) {
-               ClassResource uncompiledClass = new ClassResource();
-               uncompiledClass.setFile(sourceFile);
-               uncompiledClass.setLastLoaded(-1);
-               uncompiledClass.setScriptingEngine(getEngineType());
-               if(!_watchedResources.containsKey(uncompiledClass.getIdentifier())) {
-                    _watchedResources.put(uncompiledClass.getIdentifier(), uncompiledClass);
+               ClassResource classToProcess = new ClassResource();
+                classToProcess.setFile(sourceFile);
+                classToProcess.setLastLoaded(-1);
+                classToProcess.setScriptingEngine(getEngineType());
+                if(!_watchedResources.containsKey(classToProcess.getIdentifier())) {
+                    _watchedResources.put(classToProcess.getIdentifier(), classToProcess);
                } else {
-                   processedClasses.remove(uncompiledClass.getIdentifier());
+                   processedClasses.remove(classToProcess.getIdentifier());
                    
-                   uncompiledClass = _watchedResources.get(uncompiledClass.getIdentifier());
+                   classToProcess = _watchedResources.get(classToProcess.getIdentifier());
                }
-               if(uncompiledClass.needsRecompile()) {
-                   uncompiledClass.setTainted(true);
+               if(classToProcess.needsRecompile()) {
+                   //TODO add entry for logging component here
+                   log.info("[EXT-SCRIPTING] tainting "+classToProcess.getIdentifier());
+                   classToProcess.setTainted(true);
+                   classToProcess.setChangedForCompile(true);
                }
            }
         }
@@ -178,14 +181,17 @@ public abstract class BaseEngine
         Set<String> _processedClasses = new HashSet<String>();
         for (Map.Entry<String, ClassResource> entry : _watchedResources.entrySet())
         {
-
+            //TODO add entry for logging component here
             ClassResource resource = entry.getValue();
-            if (!resource.needsRecompile()) continue;
-
+            if (!resource.isChangedForCompile()) continue;
+            resource.setChangedForCompile(false);
+            log.info("[EXT-SCRIPTING] tainting dependency "+resource.getIdentifier());
+            resource.setTainted(true);
             //classname
             String identifier = resource.getIdentifier();
             if (_processedClasses.contains(identifier)) continue;
             markDependencies(_processedClasses, identifier);
+
         }
 
     }
@@ -200,7 +206,14 @@ public abstract class BaseEngine
             if (_processedClasses.contains(referringClass)) continue;
             ClassResource toTaint = _watchedResources.get(referringClass);
             if(toTaint == null) continue;
+            //TODO add entry for logging component here
+            if(toTaint.isTainted()) {
+                log.info("[EXT-SCRIPTING] dependency already tainted:"+toTaint.getIdentifier());
+                _processedClasses.add(toTaint.getIdentifier());
+                continue;
+            }
             toTaint.setTainted(true);
+            toTaint.setChangedForCompile(false);
             log.info("[EXT-SCRIPTING] tainting dependency "+toTaint.getIdentifier());
             _processedClasses.add(toTaint.getIdentifier());
             markDependencies(_processedClasses, toTaint.getIdentifier());

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/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/monitor/ClassResource.java?rev=1297878&r1=1297877&r2=1297878&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ClassResource.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ClassResource.java Wed Mar  7 08:34:21 2012
@@ -50,8 +50,9 @@ public class ClassResource extends Watch
     volatile File _sourceFile;
 
     volatile int _scriptingEngine = ScriptingConst.ENGINE_TYPE_JSF_NO_ENGINE;
+    /*non initial change for delta change investigation*/
+    volatile boolean changedForCompile = false;
 
-    volatile long _lastLoaded = -1L;
 
     //todo clean up the sourcepath and filename
 
@@ -128,15 +129,7 @@ public class ClassResource extends Watch
         return null;
     }
 
-    public void executeLastLoaded()
-    {
-        _lastLoaded = System.currentTimeMillis();
-    }
 
-    public long getLastLoaded()
-    {
-        return _lastLoaded;
-    }
 
     /**
      * identifier for this resource is the classname
@@ -183,4 +176,13 @@ public class ClassResource extends Watch
         return _sourceFile.exists();
     }
 
+    public boolean isChangedForCompile()
+    {
+        return changedForCompile;
+    }
+
+    public void setChangedForCompile(boolean changedForCompile)
+    {
+        this.changedForCompile = changedForCompile;
+    }
 }

Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.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/monitor/ResourceMonitor.java?rev=1297878&r1=1297877&r2=1297878&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.java Wed Mar  7 08:34:21 2012
@@ -127,10 +127,23 @@ public class ResourceMonitor extends Thr
         }
     }
 
+    public void initialMonitoring() {
+        WeavingContext context = WeavingContext.getInstance();
+        context.initialFullScan();
+        //we compile wherever needed, taints are now in place due to our scan already being performed
+        if(context.compile()) {
+            //we now have to perform a full dependency scan to bring our dependency map to the latest state
+            context.scanDependencies();
+            //we next retaint all classes according to our dependency graph
+            context.markTaintedDependends();
+        }
+    }
+
     public void performMonitoringTask()
     {
         WeavingContext context = WeavingContext.getInstance();
         context.initialFullScan();
+
         //we compile wherever needed, taints are now in place due to our scan already being performed
         if(context.compile()) {
             //we now have to perform a full dependency scan to bring our dependency map to the latest state