https://issues.apache.org/jira/browse/EXTSCRIPT-154 still working on the startup and daemon process
git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk@1297470 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/WeavingContext.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/WeavingContext.java
index ec01b48..9c7aa92 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/WeavingContext.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/context/WeavingContext.java
@@ -99,22 +99,29 @@
}
}
- public void compile()
+ public boolean compile()
{
+ boolean compile = false;
for (ScriptingEngine engine : getEngines())
{
if (!engine.needsRecompile()) continue;
+ compile = true;
log.info("[EXT-SCRIPTING] compiling " + engine.getEngineType() + " files");
engine.compile();
log.info("[EXT-SCRIPTING] compiling " + engine.getEngineType() + " files done");
}
+ return compile;
}
public void scanDependencies()
{
for (ScriptingEngine engine : getEngines())
{
- engine.scanDependencies();
+ if(engine.isTainted()) {
+ log.info("[EXT-SCRIPTING] scanning " + engine.getEngineType() + " dependencies");
+ engine.scanDependencies();
+ log.info("[EXT-SCRIPTING] scanning " + engine.getEngineType() + " dependencies end");
+ }
}
}
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.java
index a45111e..cbd943b 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/BaseEngine.java
@@ -26,11 +26,13 @@
import rewrite.org.apache.myfaces.extensions.scripting.engine.dependencyScan.registry.DependencyRegistryImpl;
import rewrite.org.apache.myfaces.extensions.scripting.monitor.ClassResource;
+import javax.servlet.ServletContext;
import java.io.File;
import java.net.URL;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Logger;
import static rewrite.org.apache.myfaces.extensions.scripting.common.ScriptingConst.JAVA_SOURCE_ROOT;
@@ -48,6 +50,8 @@
ClassDependencies _dependencyMap = new ClassDependencies();
DependencyRegistry _dependencyRegistry = new DependencyRegistryImpl(getEngineType(), _dependencyMap);
+ Logger log = Logger.getLogger(this.getClass().getName());
+
public Map<String, ClassResource> getWatchedResources()
{
return _watchedResources;
@@ -128,7 +132,7 @@
return false;
}
- protected void initPaths(String initParam, String defaultValue)
+ protected void initPaths(ServletContext context, String initParam, String defaultValue)
{
String pathSeparatedList = context.getInitParameter(initParam);
pathSeparatedList = (pathSeparatedList != null) ? pathSeparatedList : defaultValue;
@@ -163,4 +167,44 @@
{
_dependencyMap = dependencyMap;
}
+
+ /**
+ * marks all the dependencies of the tainted objects
+ * also as tainted to allow proper refreshing.
+ */
+ public void markTaintedDependencies()
+ {
+ //basic tainted set by the full scall
+ Set<String> _processedClasses = new HashSet<String>();
+ for (Map.Entry<String, ClassResource> entry : _watchedResources.entrySet())
+ {
+
+ ClassResource resource = entry.getValue();
+ if (!resource.needsRecompile() && !resource.isTainted()) continue;
+
+ //classname
+ String identifier = resource.getIdentifier();
+ if (_processedClasses.contains(identifier)) continue;
+ markDependencies(_processedClasses, identifier);
+ }
+
+ }
+
+ /*marks all backward dependencies of the existing class*/
+ private void markDependencies(Set<String> _processedClasses, String identifier)
+ {
+ Set<String> referringClasses = _dependencyMap.getReferringClasses(identifier);
+ if(referringClasses == null) return;
+ for (String referringClass : referringClasses)
+ {
+ if (_processedClasses.contains(referringClass)) continue;
+ ClassResource toTaint = _watchedResources.get(referringClass);
+ if(toTaint == null) continue;
+ toTaint.setTainted(true);
+ log.info("[EXT-SCRIPTING] tainting dependency "+toTaint.getIdentifier());
+ _processedClasses.add(toTaint.getIdentifier());
+ markDependencies(_processedClasses, toTaint.getIdentifier());
+ }
+
+ }
}
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineGroovy.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineGroovy.java
index 8bc6e82..5426e7e 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineGroovy.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineGroovy.java
@@ -44,13 +44,7 @@
@Override
public void init(ServletContext context)
{
- initPaths(INIT_PARAM_CUSTOM_GROOVY_LOADER_PATHS, GROOVY_SOURCE_ROOT);
- }
-
- @Override
- protected void initPaths(String initParam, String defaultValue)
- {
- super.initPaths(initParam, defaultValue);
+ initPaths(context, INIT_PARAM_CUSTOM_GROOVY_LOADER_PATHS, GROOVY_SOURCE_ROOT);
}
@Override
@@ -66,12 +60,6 @@
}
@Override
- public void scanForAddedDeleted()
- {
- super.scanForAddedDeleted();
- }
-
- @Override
//full compile
public void compile()
{
@@ -91,4 +79,10 @@
log.info("[EXT-SCRIPTING] starting dependency scan");
log.info("[EXT-SCRIPTING] ending dependency scan");
}
+
+ @Override
+ public void markTaintedDependencies()
+ {
+ //To change body of implemented methods use File | Settings | File Templates.
+ }
}
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineJava.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineJava.java
index 6513d90..9fc5eaa 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineJava.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/engine/EngineJava.java
@@ -25,16 +25,14 @@
import rewrite.org.apache.myfaces.extensions.scripting.engine.api.CompilationException;
import rewrite.org.apache.myfaces.extensions.scripting.engine.api.ScriptingEngine;
import rewrite.org.apache.myfaces.extensions.scripting.engine.compiler.JSR199Compiler;
-import rewrite.org.apache.myfaces.extensions.scripting.engine.dependencyScan.api.DependencyRegistry;
-import rewrite.org.apache.myfaces.extensions.scripting.engine.dependencyScan.core.ClassDependencies;
-import rewrite.org.apache.myfaces.extensions.scripting.engine.dependencyScan.registry.DependencyRegistryImpl;
import rewrite.org.apache.myfaces.extensions.scripting.monitor.ClassResource;
import javax.servlet.ServletContext;
import java.io.File;
import java.util.Collection;
-import java.util.List;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import java.util.logging.Logger;
import static rewrite.org.apache.myfaces.extensions.scripting.common.ScriptingConst.*;
@@ -52,7 +50,7 @@
@Override
public void init(ServletContext context)
{
- initPaths(INIT_PARAM_CUSTOM_JAVA_LOADER_PATHS, JAVA_SOURCE_ROOT);
+ initPaths(context, INIT_PARAM_CUSTOM_JAVA_LOADER_PATHS, JAVA_SOURCE_ROOT);
}
/**
@@ -80,28 +78,16 @@
}
}
- public void scanDependencies() {
+ public void scanDependencies()
+ {
log.info("[EXT-SCRIPTING] starting dependency scan");
JavaDependencyScanner scanner = new JavaDependencyScanner();
scanner.scanPaths();
log.info("[EXT-SCRIPTING] ending dependency scan");
}
- /**
- * marks all the dependencies of the tainted objects
- * also as tainted to allow proper refreshing.
- */
- public void markTaintedDependencies() {
- // val _dependencyMap = new ClassDependencies();
- // val _dependencyRegistry = new DependencyRegistryImpl(getEngineType(), _dependencyMap);
-
- }
-
//-------------------------------------------------------------------------------------
-
-
-
@Override
public int getEngineType()
{
diff --git a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.java b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.java
index 2a814a8..0497474 100644
--- a/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.java
+++ b/extscript-core-root/extscript-core/src/main/java/rewrite/org/apache/myfaces/extensions/scripting/monitor/ResourceMonitor.java
@@ -113,15 +113,19 @@
* which performs the entire scanning process
*/
public void run() {
+ WeavingContext context = WeavingContext.getInstance();
while(_running) {
sleep();
//we run the full scan on the classes to bring our data structures up to the task
- WeavingContext.getInstance().initialFullScan();
+ context.initialFullScan();
//we compile wherever needed, taints are now in place due to our scan already being performed
- WeavingContext.getInstance().compile();
- //we now have to perform a full dependency scan to bring our dependency map to the latest state
- WeavingContext.getInstance().scanDependencies();
- //we next retaint all classes according to our dependency graph
+ if(context.compile()) {
+ //we now have to perform a full dependency scan to bring our dependency map to the latest state
+ context.scanDependencies();
+ context.markTaintedDependends();
+ //we next retaint all classes according to our dependency graph
+ }
+
}
if (_log.isLoggable(Level.INFO)) {