r9654 - in helma-ng/trunk: apps/demo apps/demo/skins modules/helma/webapp
[email protected] Wed, 22 Apr 2009 15:10:01 +0200 (CEST)
| Newsgroups | gmane.comp.java.helma.cvs |
|---|---|
| Message-ID | <20090422131001.363A53D0D6@mia> |
Author: hannes
Date: 2009-04-22 15:10:01 +0200 (Wed, 22 Apr 2009)
New Revision: 9654
Modified:
helma-ng/trunk/apps/demo/actions.js
helma-ng/trunk/apps/demo/skins/continuation.html
helma-ng/trunk/modules/helma/webapp/continuation.js
Log:
Polish continuation support a bit, mostly naming and minor fixes.
Details at http://dev.helma.org/trac/helma/changeset/9654
Modified: helma-ng/trunk/apps/demo/actions.js
===================================================================
--- helma-ng/trunk/apps/demo/actions.js 2009-04-22 13:09:58 UTC (rev 9653)
+++ helma-ng/trunk/apps/demo/actions.js 2009-04-22 13:10:01 UTC (rev 9654)
@@ -47,48 +47,48 @@
// local data - this is the data that is shared between continuations of this function
var data = {};
- req = ContinuationMark(req, "start");
+ req = ContinuationMark(req, "welcome");
// render intro page
- req = ContinuationRequest(req, SkinnedResponse('skins/continuation.html', {
- skin: "start",
+ req = ContinuationRequest(req, "ask_name", SkinnedResponse('skins/continuation.html', {
+ skin: "welcome",
title: "Continuations Demo",
data: data,
- forward: ContinuationUrl("name")
- }), "name");
+ forward: ContinuationUrl("ask_name")
+ }));
- req = ContinuationRequest(req, SkinnedResponse('skins/continuation.html', {
- skin: "name",
+ req = ContinuationRequest(req, "ask_food", SkinnedResponse('skins/continuation.html', {
+ skin: "ask_name",
title: "Question 1",
data: data,
- back: ContinuationUrl("start"),
- forward: ContinuationUrl("food")
- }), "food");
+ back: ContinuationUrl("welcome"),
+ forward: ContinuationUrl("ask_food")
+ }));
data.name = req.params.name || data.name;
- req = ContinuationRequest(req, SkinnedResponse('skins/continuation.html', {
- skin: "food",
+ req = ContinuationRequest(req, "ask_animal", SkinnedResponse('skins/continuation.html', {
+ skin: "ask_food",
title: "Question 2",
data: data,
- back: ContinuationUrl("name"),
- forward: ContinuationUrl("animal")
- }), "animal");
+ back: ContinuationUrl("ask_name"),
+ forward: ContinuationUrl("ask_animal")
+ }));
data.food = req.params.food || data.food;
- req = ContinuationRequest(req, SkinnedResponse('skins/continuation.html', {
- skin: "animal",
+ req = ContinuationRequest(req, "result", SkinnedResponse('skins/continuation.html', {
+ skin: "ask_animal",
title: "Question 3",
data: data,
- back: ContinuationUrl("food"),
+ back: ContinuationUrl("ask_food"),
forward: ContinuationUrl("result")
- }), "result");
+ }));
data.animal = req.params.animal || data.animal;
return SkinnedResponse('skins/continuation.html', {
skin: "result",
title: "Thank you!",
data: data,
- back: ContinuationUrl("animal")
+ back: ContinuationUrl("ask_animal")
});
}
\ No newline at end of file
Modified: helma-ng/trunk/apps/demo/skins/continuation.html
===================================================================
--- helma-ng/trunk/apps/demo/skins/continuation.html 2009-04-22 13:09:58 UTC (rev 9653)
+++ helma-ng/trunk/apps/demo/skins/continuation.html 2009-04-22 13:10:01 UTC (rev 9654)
@@ -3,7 +3,7 @@
<% subskin 'content' -------------------------------------------------------------------- %>
<% render <% skin %> %>
-<% subskin 'start' %>
+<% subskin 'welcome' %>
<b><% note %></b>
@@ -20,7 +20,7 @@
<% render 'list' %>
-<% subskin 'name' %>
+<% subskin 'ask_name' %>
What is your name? <form method="post" action="<% forward %>">
<input name="name" value="<% data.name %>">
@@ -31,7 +31,7 @@
<% render 'list' %>
-<% subskin 'food' %>
+<% subskin 'ask_food' %>
What is your favorite food? <form method="post" action="<% forward %>">
<input name="food" value="<% data.food %>">
@@ -42,7 +42,7 @@
<% render 'list' %>
-<% subskin 'animal' %>
+<% subskin 'ask_animal' %>
What is your favorite animal? <form method="post" action="<% forward %>">
<input name="animal" value="<% data.animal %>">
Modified: helma-ng/trunk/modules/helma/webapp/continuation.js
===================================================================
--- helma-ng/trunk/modules/helma/webapp/continuation.js 2009-04-22 13:09:58 UTC (rev 9653)
+++ helma-ng/trunk/modules/helma/webapp/continuation.js 2009-04-22 13:10:01 UTC (rev 9654)
@@ -11,48 +11,61 @@
var ids = {};
-function ContinuationUrl(key) {
- return "?helma_continuation=" + ContinuationId(key);
+function ContinuationUrl(name) {
+ return "?helma_continuation=" + ContinuationId(name);
}
-function ContinuationId(key) {
- if (!key)
+function ContinuationId(name) {
+ if (!name)
return generateId();
- if (!(key in ids))
- ids[key] = generateId();
- return ids[key];
+ if (!(name in ids))
+ ids[name] = generateId();
+ return ids[name];
}
/**
* Stop current execution and register continuation for later resumption.
* @param id the continuation id. If not given a new id is generated.
*/
-function ContinuationRequest(req, res, key) {
+function ContinuationRequest(req, name, res) {
// capture continuation and store it in callback container
- var id = ContinuationId(key);
- log.debug("registering callback for id " + id);
- setCallback(req, id, new Continuation());
- // trick to exit current context: call empty continuation
- new org.mozilla.javascript.NativeContinuation()(res);
-};
+ var id = ContinuationId(name);
+ var continuation = createContinuation();
+ if (continuation instanceof Continuation) {
+ log.debug("Registering continuation for id: " + id);
+ setCallback(req, id, continuation);
+ // Exit current js context by calling empty continuation with return value
+ new org.mozilla.javascript.NativeContinuation()(res);
+ } else {
+ return continuation;
+ }
+}
-function ContinuationMark(req, key) {
+function ContinuationMark(req, name) {
+ if (!req.params.helma_continuation) {
+ // set query param so helma knows to switch rhino optimization level to -1
+ throw { redirect: ContinuationUrl() };
+ }
if (system.getOptimizationLevel() > -1) {
system.setOptimizationLevel(-1);
throw { retry: true };
}
- if (!req.params.helma_continuation) {
- // set query param so helma knows to switch rhino optimization level to -1
- throw { redirect: ContinuationUrl() };
+ var id = req.params.helma_continuation;
+ ids[name] = id;
+ var continuation = createContinuation();
+ if (continuation instanceof Continuation) {
+ log.debug("Recording continuation start: " + id);
+ setCallback(req, id, continuation);
+ return req;
+ } else {
+ return continuation;
}
- var id = req.params.helma_continuation;
- ids[key] = id;
- var cont = new Continuation();
- log.debug("Recording continuation start: " + id);
- setCallback(req, id, cont);
- return req;
}
+function createContinuation() {
+ return new Continuation();
+}
+
/**
* Continuation middleware function
* @param req the request
@@ -62,6 +75,10 @@
var id = req.params.helma_continuation;
var continuation = getCallback(req, id);
if (continuation) {
+ if (system.getOptimizationLevel() > -1) {
+ system.setOptimizationLevel(-1);
+ throw { retry: true };
+ }
log.debug("resuming continuation " + id + " with req " + req);
return continuation(req);
}