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