diff --git a/commons/src/main/java/org/archive/spring/PathSharingContext.java b/commons/src/main/java/org/archive/spring/PathSharingContext.java index f8348c70..3a182960 100644 --- a/commons/src/main/java/org/archive/spring/PathSharingContext.java +++ b/commons/src/main/java/org/archive/spring/PathSharingContext.java @@ -23,6 +23,7 @@ import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -178,4 +179,18 @@ public class PathSharingContext extends FileSystemXmlApplicationContext { } super.initLifecycleProcessor(); } + + protected ConcurrentHashMap data; + + /** + * @return a shared map for arbitrary use during a crawl; for example, could + * be used for state persisting for the duration of the crawl, + * shared among ScriptedProcessor, scripting console, etc scripts + */ + public ConcurrentHashMap getData() { + if (data == null) { + data = new ConcurrentHashMap(); + } + return data; + } } diff --git a/engine/src/main/java/org/archive/crawler/framework/ActionDirectory.java b/engine/src/main/java/org/archive/crawler/framework/ActionDirectory.java index 7e492a62..56fe41dc 100644 --- a/engine/src/main/java/org/archive/crawler/framework/ActionDirectory.java +++ b/engine/src/main/java/org/archive/crawler/framework/ActionDirectory.java @@ -312,7 +312,7 @@ public class ActionDirectory implements ApplicationContextAware, Lifecycle, Runn PrintWriter rawOut = new PrintWriter(rawString); Exception ex = null; engine.put("rawOut", rawOut); - engine.put("appCtx",appCtx); + engine.put("appCtx", appCtx); // evaluate and record any exception try { diff --git a/modules/src/main/java/org/archive/modules/ScriptedProcessor.java b/modules/src/main/java/org/archive/modules/ScriptedProcessor.java index 951fedb7..802de482 100644 --- a/modules/src/main/java/org/archive/modules/ScriptedProcessor.java +++ b/modules/src/main/java/org/archive/modules/ScriptedProcessor.java @@ -20,8 +20,6 @@ package org.archive.modules; import java.io.Reader; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -106,8 +104,6 @@ implements ApplicationContextAware, InitializingBean { transient protected ThreadLocal threadEngine = new ThreadLocal(); protected ScriptEngine sharedEngine; - /** map for optional use by scripts */ - public Map sharedMap = new ConcurrentHashMap(); /** * Constructor. @@ -135,12 +131,14 @@ implements ApplicationContextAware, InitializingBean { // synchronization is harmless for local thread engine, // necessary for shared engine engine.put("curi",curi); + engine.put("appCtx", appCtx); try { engine.eval("process(curi)"); } catch (ScriptException e) { logger.log(Level.WARNING,e.getMessage(),e); } finally { engine.put("curi", null); + engine.put("appCtx", null); } } } diff --git a/modules/src/main/java/org/archive/modules/deciderules/ScriptedDecideRule.java b/modules/src/main/java/org/archive/modules/deciderules/ScriptedDecideRule.java index 290f881c..448ca3c4 100644 --- a/modules/src/main/java/org/archive/modules/deciderules/ScriptedDecideRule.java +++ b/modules/src/main/java/org/archive/modules/deciderules/ScriptedDecideRule.java @@ -20,8 +20,6 @@ package org.archive.modules.deciderules; import java.io.Reader; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -106,8 +104,6 @@ implements ApplicationContextAware, InitializingBean { transient protected ThreadLocal threadEngine = new ThreadLocal(); transient protected ScriptEngine sharedEngine; - /** map for optional use by scripts */ - public Map sharedMap = new ConcurrentHashMap(); public ScriptedDecideRule() { } @@ -128,12 +124,14 @@ implements ApplicationContextAware, InitializingBean { // necessary for shared engine try { engine.put("object",uri); + engine.put("appCtx", appCtx); return (DecideResult)engine.eval("decisionFor(object)"); } catch (ScriptException e) { logger.log(Level.WARNING,e.getMessage(),e); return DecideResult.NONE; } finally { engine.put("object", null); + engine.put("appCtx", null); } } }