ovidiu 02/03/24 23:33:54 Modified: src/scratchpad/schecoon/src/org/apache/cocoon/components/flow JavaScriptInterpreter.java Log: Save the Rhino scope in the JSCocoon created object. Invalidate the Environment and InvokeContext objects in the JSCocoon instance, instead of removing JSCocoon from the scope. (handleContinuation): Added. Make use of the Rhino scope saved in JSCocoon to resume the processing. Revision Changes Path 1.10 +40 -2 xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/JavaScriptInterpreter.java Index: JavaScriptInterpreter.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/JavaScriptInterpreter.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- JavaScriptInterpreter.java 24 Mar 2002 07:37:27 -0000 1.9 +++ JavaScriptInterpreter.java 25 Mar 2002 07:33:54 -0000 1.10 @@ -101,6 +101,7 @@ ((JSCocoon)cocoon).setInterpreter(this); ((JSCocoon)cocoon).setContext(manager, environment, ctx); ((JSCocoon)cocoon).setContinuationsManager(continuationsMgr); + ((JSCocoon)cocoon).setScope(thrScope); thrScope.put("cocoon", thrScope, cocoon); return thrScope; @@ -113,8 +114,8 @@ */ protected void exitContext(Scriptable thrScope) { - if (thrScope != null) - thrScope.delete("cocoon"); + JSCocoon cocoon = (JSCocoon)thrScope.get("cocoon", thrScope); + cocoon.invalidateContext(); Context.getCurrentContext().exit(); } @@ -183,6 +184,43 @@ } finally { exitContext(thrScope); + } + } + + public void handleContinuation(String id, + Environment environment, InvokeContext ctx) + throws Exception + { + WebContinuation wk = continuationsMgr.lookupWebContinuation(id); + + if (wk == null) + throw new RuntimeException("No continuation with id " + id); + + Context context = Context.enter(); + context.setOptimizationLevel(OPTIMIZATION_LEVEL); + context.setCompileFunctionsWithDynamicScope(true); + + // Obtain the JS continuation object from it, and setup the + // JSCocoon object associated in the dynamic scope of the saved + // continuation with the environment and context objects. + JSWebContinuation jswk = (JSWebContinuation)wk.getUserObject(); + JSCocoon cocoon = jswk.getJSCocoon(); + cocoon.setContext(manager, environment, ctx); + Scriptable kScope = cocoon.getScope(); + + // We can now resume the processing from the state saved by the + // continuation object. Setup the JavaScript Context object. + Object handleContFunction = scope.get("handleContinuation", kScope); + if (handleContFunction == Scriptable.NOT_FOUND) + throw new RuntimeException("Cannot find 'handleContinuation' " + + "(system.js not loaded?)"); + + Object args[] = { jswk }; + try { + ((Function)handleContFunction).call(context, kScope, kScope, args); + } + finally { + context.exit(); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]