This post may reveal that I haven't got much of a clue, but here goes...
-----
My premise is that it would be cool to allow any BSF language to be used
to develop a cocoon web application, and that the goal is to allow for
something like continuations.
BSF allows a script to call back into the Java environment. This is
currently being used by the ScriptAction to manipulate the various objects
associated with a request. If I understand properly, the thread that
called the BSF exec() function is used to send messages to the objects in
the Java environment.
This is useful because when the BSF script calls back into the Java
environment, that thread can be suspended.
So consider the following chain of events:
- a request for a web application comes in
- the Controller maps the request to a particular script
- the Controller creates a new WebappThread
- a set of proxy objects is created and are made ThreadLocal to the new
WebappThread
- each proxy represents one of the request and response objects
- the proxy objects are registered with the WebappThread BSF manager
- the script is executed in the WebappThread
Let's use the (JavaScript) script that Stefano sent out earlier...
var a = getA();
var b = getB();
c = a + b;
show(c);
And let's look at the first line...
var a = getA();
I'm going to create a JavaScript implementation for getA() as follows:
function getA()
{
ResponseProxy.SendCocoonPipeline("RequestPageA.xml");
var clientResponse = RequestProxy.getRequestData();
// parse clientResponse and extract A
return A;
}
So now the question is what happens in ResponseProxy?
The answer is that the WebappThread:
- generates the pipeline
- sends the pipeline results to the client
- registers itself with Controller mentioned earlier with a particular ID
- puts itself to sleep.
When the user submits their response, with some encoded session ID or
similar...
- the Controller looks for a thread that registered itself with this ID
- the Controller changes the ThreadLocal proxy objects to reference the
new request and response objects
- the Controller calls resume() on the script thread, which continues
happily along
Presto! Any BSF-aware scripting language can now pretend to have really
basic continuations, thanks to the proxy objects and the ability to
suspended threads.
What I'm still trying to figure out is whether this would allow for the
other really cool aspect of continuations, which is the ability to "travel
back in time" when the user hits "back" and submits a different
continuation ID. I don't this that this approach would allow this
functionality. On the other hand, if the BSF framework allows, or can be
hacked to allow, a script engine to dump its state to an object, then we'd
be set.
-----
I don't know if this makes any sense, but it seems like the idea should
work. Although I like the idea of creating a custom language to deal with
webapps, it strikes me that a solution that would let me use any BSF
language transparently would be pretty nice.
Comments (especially from any BSF gurus) greatly appreciated.
Jason Foster
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]