From b2033fbaed98d38f698da38503f880a270df2028 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 27 Nov 2014 13:57:24 -0800 Subject: [PATCH] simplifying ScriptTask --- .../servable/DocumentRequestProcessor.java | 6 +-- .../websocket/ConnectionEventExecutor.java | 4 +- .../main/java/jj/jasmine/SpecCoordinator.java | 27 ++++------ kernel/src/main/java/jj/repl/ReplHandler.java | 2 +- .../jj/script/AbstractScriptEnvironment.java | 7 +++ .../jj/script/ContinuationCoordinator.java | 6 --- .../script/ContinuationCoordinatorImpl.java | 5 -- .../jj/script/ContinuationPendingCache.java | 4 +- .../script/ScriptEnvironmentInitializer.java | 6 +-- .../src/main/java/jj/script/ScriptTask.java | 7 +-- kernel/src/main/java/jj/script/Timers.java | 51 +++++++++---------- .../api/ServerEventCallableInvoker.java | 7 +-- .../script/ContinuationPendingCacheTest.java | 2 +- 13 files changed, 55 insertions(+), 79 deletions(-) diff --git a/kernel/src/main/java/jj/document/servable/DocumentRequestProcessor.java b/kernel/src/main/java/jj/document/servable/DocumentRequestProcessor.java index 247a8d14..f36e34fa 100644 --- a/kernel/src/main/java/jj/document/servable/DocumentRequestProcessor.java +++ b/kernel/src/main/java/jj/document/servable/DocumentRequestProcessor.java @@ -105,15 +105,15 @@ public String baseName() { } public void process() { - taskRunner.execute(new DocumentRequestProcessTask(documentScriptEnvironment, continuationCoordinator)); + taskRunner.execute(new DocumentRequestProcessTask(documentScriptEnvironment)); } private final class DocumentRequestProcessTask extends ScriptTask { private boolean run = false; - protected DocumentRequestProcessTask(DocumentScriptEnvironment scriptEnvironment, ContinuationCoordinator continuationCoordinator) { - super("processing document request at " + scriptEnvironment.name(), scriptEnvironment, continuationCoordinator); + protected DocumentRequestProcessTask(DocumentScriptEnvironment scriptEnvironment) { + super("processing document request at " + scriptEnvironment.name(), scriptEnvironment); } @Override diff --git a/kernel/src/main/java/jj/http/server/websocket/ConnectionEventExecutor.java b/kernel/src/main/java/jj/http/server/websocket/ConnectionEventExecutor.java index 01fb65e9..2f175958 100644 --- a/kernel/src/main/java/jj/http/server/websocket/ConnectionEventExecutor.java +++ b/kernel/src/main/java/jj/http/server/websocket/ConnectionEventExecutor.java @@ -56,7 +56,6 @@ public void submit(final WebSocketConnection connection, final String event, fin new ConnectionEventTask( "host event " + event + " on WebSocket connection", connection, - continuationCoordinator, args, event ) @@ -74,11 +73,10 @@ private final class ConnectionEventTask extends ScriptTask { - SpecEvaluationTask( - final JasmineScriptEnvironment scriptEnvironment, - final ContinuationCoordinator continuationCoordinator - ) { - super("spec execution for " + scriptEnvironment, scriptEnvironment, continuationCoordinator); + SpecEvaluationTask(final JasmineScriptEnvironment scriptEnvironment) { + super("spec execution for " + scriptEnvironment, scriptEnvironment); } @Override @@ -87,17 +84,14 @@ protected boolean errored(Throwable cause) { @Override protected void complete() throws Exception { - taskRunner.execute(new TargetEvaluationTask(scriptEnvironment, continuationCoordinator)); + taskRunner.execute(new TargetEvaluationTask(scriptEnvironment)); } } private final class TargetEvaluationTask extends ScriptTask { - TargetEvaluationTask( - final JasmineScriptEnvironment scriptEnvironment, - final ContinuationCoordinator continuationCoordinator - ) { - super("target execution for " + scriptEnvironment, scriptEnvironment, continuationCoordinator); + TargetEvaluationTask(final JasmineScriptEnvironment scriptEnvironment) { + super("target execution for " + scriptEnvironment, scriptEnvironment); } @Override @@ -113,17 +107,14 @@ protected boolean errored(Throwable cause) { @Override protected void complete() throws Exception { - taskRunner.execute(new RunnerEvaluationTask(scriptEnvironment, continuationCoordinator)); + taskRunner.execute(new RunnerEvaluationTask(scriptEnvironment)); } } private final class RunnerEvaluationTask extends ScriptTask { - RunnerEvaluationTask( - final JasmineScriptEnvironment scriptEnvironment, - final ContinuationCoordinator continuationCoordinator - ) { - super("runner execution for " + scriptEnvironment, scriptEnvironment, continuationCoordinator); + RunnerEvaluationTask(final JasmineScriptEnvironment scriptEnvironment) { + super("runner execution for " + scriptEnvironment, scriptEnvironment); } @Override diff --git a/kernel/src/main/java/jj/repl/ReplHandler.java b/kernel/src/main/java/jj/repl/ReplHandler.java index 324f6c7a..2a8c42bf 100644 --- a/kernel/src/main/java/jj/repl/ReplHandler.java +++ b/kernel/src/main/java/jj/repl/ReplHandler.java @@ -106,7 +106,7 @@ protected void messageReceived(final ChannelHandlerContext ctx, final String msg "repl-console" ); - taskRunner.execute(new ScriptTask("repl execution:\n" + msg, rse, continuationCoordinator) { + taskRunner.execute(new ScriptTask("repl execution:\n" + msg, rse) { @Override protected void begin() throws Exception { diff --git a/kernel/src/main/java/jj/script/AbstractScriptEnvironment.java b/kernel/src/main/java/jj/script/AbstractScriptEnvironment.java index c0f6d3bd..425c1dca 100644 --- a/kernel/src/main/java/jj/script/AbstractScriptEnvironment.java +++ b/kernel/src/main/java/jj/script/AbstractScriptEnvironment.java @@ -105,6 +105,8 @@ protected Dependencies( private final ContinuationCoordinator continuationCoordinator; + private final ContinuationPendingCache continuationPendingCache; + private final Dependencies dependencies; private volatile ScriptExecutionState state = Unitialized; @@ -114,6 +116,7 @@ protected Dependencies( protected AbstractScriptEnvironment(Dependencies dependencies) { super(dependencies); this.contextProvider = dependencies.scriptEnvironmentDependencies.contextProvider; + this.continuationPendingCache = dependencies.scriptEnvironmentDependencies.continuationPendingCache; this.continuationCoordinator = dependencies.scriptEnvironmentDependencies.continuationCoordinator; this.dependencies = dependencies; } @@ -148,6 +151,10 @@ public boolean initializationDidError() { ContinuationPendingKey resumeContinuation(ContinuationPendingKey pendingKey, Object result) { return continuationCoordinator.resumeContinuation(this, pendingKey, result); } + + void awaitContinuation(ScriptTask task) { + continuationPendingCache.storeForContinuation(task); + } /** * mark this environment as being initialized diff --git a/kernel/src/main/java/jj/script/ContinuationCoordinator.java b/kernel/src/main/java/jj/script/ContinuationCoordinator.java index 885ec273..9caba58d 100644 --- a/kernel/src/main/java/jj/script/ContinuationCoordinator.java +++ b/kernel/src/main/java/jj/script/ContinuationCoordinator.java @@ -59,11 +59,5 @@ public interface ContinuationCoordinator { * @param result */ void resume(ContinuationPendingKey pendingKey, Object result); - - /** - * Pass a task instance in to await a continuation - * @param task - */ - void awaitContinuation(ScriptTask task); } \ No newline at end of file diff --git a/kernel/src/main/java/jj/script/ContinuationCoordinatorImpl.java b/kernel/src/main/java/jj/script/ContinuationCoordinatorImpl.java index 5171d3f3..5b3bba4f 100644 --- a/kernel/src/main/java/jj/script/ContinuationCoordinatorImpl.java +++ b/kernel/src/main/java/jj/script/ContinuationCoordinatorImpl.java @@ -126,11 +126,6 @@ public ContinuationPendingKey execute(final ScriptEnvironment scriptEnvironment, return null; } - @Override - public void awaitContinuation(ScriptTask task) { - cache.storeForContinuation(task); - } - /** * Resumes a continuation that was previously saved from an execution in this class * @param pendingKey diff --git a/kernel/src/main/java/jj/script/ContinuationPendingCache.java b/kernel/src/main/java/jj/script/ContinuationPendingCache.java index bd223cb5..8c6dc5e1 100644 --- a/kernel/src/main/java/jj/script/ContinuationPendingCache.java +++ b/kernel/src/main/java/jj/script/ContinuationPendingCache.java @@ -44,7 +44,7 @@ class ContinuationPendingCache { } private final ScriptTask reserved = - new ScriptTask("", null, null) { + new ScriptTask("", null) { @Override protected void begin() throws Exception { @@ -53,7 +53,7 @@ protected void begin() throws Exception { }; private final ScriptTask alreadyResumed = - new ScriptTask("", null, null) { + new ScriptTask("", null) { @Override protected void begin() throws Exception { diff --git a/kernel/src/main/java/jj/script/ScriptEnvironmentInitializer.java b/kernel/src/main/java/jj/script/ScriptEnvironmentInitializer.java index dc627772..f64dbb33 100644 --- a/kernel/src/main/java/jj/script/ScriptEnvironmentInitializer.java +++ b/kernel/src/main/java/jj/script/ScriptEnvironmentInitializer.java @@ -80,7 +80,7 @@ protected HashMap> initialValue() { } void initializeScript(AbstractScriptEnvironment se) { - taskRunner.execute(new InitializerTask("initializing " + se, se, continuationCoordinator)); + taskRunner.execute(new InitializerTask("initializing " + se, se)); } void scriptEnvironmentInitialized(ScriptEnvironment scriptEnvironment) { @@ -132,8 +132,8 @@ private class InitializerTask extends ScriptTask { * @param name * @param scriptEnvironment */ - protected InitializerTask(String name, AbstractScriptEnvironment scriptEnvironment, ContinuationCoordinator continuationCoordinator) { - super(name, scriptEnvironment, continuationCoordinator); + protected InitializerTask(String name, AbstractScriptEnvironment scriptEnvironment) { + super(name, scriptEnvironment); } protected void begin() throws Exception { diff --git a/kernel/src/main/java/jj/script/ScriptTask.java b/kernel/src/main/java/jj/script/ScriptTask.java index d9baebaf..8265d96b 100644 --- a/kernel/src/main/java/jj/script/ScriptTask.java +++ b/kernel/src/main/java/jj/script/ScriptTask.java @@ -29,8 +29,6 @@ public abstract class ScriptTask extends DelayedTas protected final T scriptEnvironment; - protected final ContinuationCoordinator continuationCoordinator; - /** assign the result of any operation against the ContinuationCoordinator to this field */ protected ContinuationPendingKey pendingKey; @@ -45,10 +43,9 @@ public abstract class ScriptTask extends DelayedTas */ protected Object result; - protected ScriptTask(final String name, final T scriptEnvironment, final ContinuationCoordinator continuationCoordinator) { + protected ScriptTask(final String name, final T scriptEnvironment) { super(name); this.scriptEnvironment = scriptEnvironment; - this.continuationCoordinator = continuationCoordinator; } @Override @@ -65,7 +62,7 @@ protected final void run() throws Exception { if (pendingKey == null) { complete(); } else { - continuationCoordinator.awaitContinuation(this); + ((AbstractScriptEnvironment)scriptEnvironment).awaitContinuation(this); } } diff --git a/kernel/src/main/java/jj/script/Timers.java b/kernel/src/main/java/jj/script/Timers.java index 2f3699a6..9790f904 100644 --- a/kernel/src/main/java/jj/script/Timers.java +++ b/kernel/src/main/java/jj/script/Timers.java @@ -100,36 +100,33 @@ private String setTimer(final Callable function, final int delay, final boolean final String key = "jj-timer-" + cancelIds.next(); final ScriptEnvironment rootEnvironment = env.currentRootScriptEnvironment(); - ScriptTask task = new ScriptTask( - repeat ? "setInterval" : "setTimeout", - env.current(), - continuationCoordinator - ) { - @Override - protected void begin() throws Exception { - // if this is setTimeout, kill the cancelation structure - if (!repeat) { - killTimerCancelKey(rootEnvironment, key); + ScriptTask task = + new ScriptTask(repeat ? "setInterval" : "setTimeout", env.current()) { + @Override + protected void begin() throws Exception { + // if this is setTimeout, kill the cancelation structure + if (!repeat) { + killTimerCancelKey(rootEnvironment, key); + } + + pendingKey = continuationCoordinator.execute(scriptEnvironment, function, args); } - pendingKey = continuationCoordinator.execute(scriptEnvironment, function, args); - } - - @Override - protected void complete() throws Exception { - // we need to repeat once the task is complete, as an artifact of the resumable structure - // to do otherwise would require a way to clone tasks, which should actually be doable? - // but for now, repeat on complete - if (repeat) { - repeat(); + @Override + protected void complete() throws Exception { + // we need to repeat once the task is complete, as an artifact of the resumable structure + // to do otherwise would require a way to clone tasks, which should actually be doable? + // but for now, repeat on complete + if (repeat) { + repeat(); + } } - } - - @Override - protected long delay() { - return delay; - } - }; + + @Override + protected long delay() { + return delay; + } + }; taskRunner.execute(task); diff --git a/kernel/src/main/java/jj/script/api/ServerEventCallableInvoker.java b/kernel/src/main/java/jj/script/api/ServerEventCallableInvoker.java index 8501a1e3..a71a7958 100644 --- a/kernel/src/main/java/jj/script/api/ServerEventCallableInvoker.java +++ b/kernel/src/main/java/jj/script/api/ServerEventCallableInvoker.java @@ -60,11 +60,8 @@ protected void invoke(final Object event) { assert callable != null : "invoker invoked without set callable"; if (alive) { - taskRunner.execute(new ScriptTask( - "invoking " + target.name() + " function with server event " + event.getClass().getName(), - target, - continuationCoordinator - ) { + String name = "invoking " + target.name() + " function with server event " + event.getClass().getName(); + taskRunner.execute(new ScriptTask(name, target) { @Override protected void begin() throws Exception { if (alive) { diff --git a/kernel/src/test/java/jj/script/ContinuationPendingCacheTest.java b/kernel/src/test/java/jj/script/ContinuationPendingCacheTest.java index 54fc4fdd..469c6d86 100644 --- a/kernel/src/test/java/jj/script/ContinuationPendingCacheTest.java +++ b/kernel/src/test/java/jj/script/ContinuationPendingCacheTest.java @@ -54,7 +54,7 @@ private static final class HelperTask extends ScriptTask { /** it will never run so nulls are cool! */ protected HelperTask(ContinuationPendingKey pendingKey) { - super("", null, null); + super("", null); this.pendingKey = pendingKey; }