On 11/6/07, Dan Kearns <[EMAIL PROTECTED]> wrote:
>
>
>
> On 11/6/07, Assaf Arkin <[EMAIL PROTECTED]> wrote:
> >
> > On 11/6/07, Dan Kearns <[EMAIL PROTECTED]> wrote:
> > >
> > >
> > > Is there any reason not to attempt to have a process just be a totally
> > > valid
> > > javascript?
> >
> >
> > Because JavaScript the language doesn't have the notion of 'store where
> > you are, come back later'.  If you write this in JavaScript:
> >
> > plink1.send(msg1);
> > msg2 = plink2.receive();
> > plink1.send(msg2);
> >
> > the semantics are that of a method call that blocks until the message
> > arrives
> >
>
> Maybe I unintentionally implied the whole system would be javascript? I
> meant just the specification of the process the author would supply.
>
> It is possible to write a jacob-like cpu-slicer purely in javascript, and
> maybe even do out-of-memory persistence in a gears/air type of runtime, but
> I would assume we want to start on the server-side and use the java Ode
> implementation. The obvious parallel is how existing javascript programmers
> use XmlHttpRequest, where they are already trained on passing callbacks and
> writing event handlers. Check out Prototype's Ajax.Request for an example
> - the way it is written, serializing the whole context for retries or
> whatever else is pretty easy.
>

For the AAM proposal, we have no intent of bringing process engines to
JavaScript, but bringing a simpler syntaxt to the process engine, and we
just think JavaScript is a good starting point for that.

Specifically for JavaScript, you have to consider all the ways of using it.
For example, this piece of Rails code:

  <% remote_form_for(@post) do |f| %>
  ...
  <% end %>

This one is shorter and easier to understand than instantiating Ajax.Request,
serializing the form, adding a callback function to evaluate
transport.responseText, all within the onSubmit event handler of the form.
So by analogy, we're working closer to Rails helper than Ajax.Request.


The benefit of using json-style notation for the process is that the
> definition becomes serializable so you can swap it out and slap it around: a
> java+rhino implementation could use the Function.toString and eval (or the
> java api for compilation) to do persistence in both directions. Internally
> I'd assume the "script" would be analyzed by the engine to determine which
> stuff turns into bpel, which stuff stays as javascript, which stuff is just
> static config, etc.
>
> So instead of:
> msg2 = plink.receive();
>
> You'd do more like:
> plink.onReceive = function(partner, message) { ... some sequence or
> flow...; };
>

We start with that line of thinking, and tried it out with a couple of
languages.  It looks reasonable enough for a statement or two, but
afterwards it violates the first principle of our proposal, which is to come
up with a syntax that makes it easy to read/write process definitions.

Here's a couple of examples.  What you want to express:
{
  plink1.send(msg1);
  msg2 = plink2.receive();
  plink2.send(msg2);
}

What it would look like in JavaScript:

function step2(msg2) {
  plink1.send(msg2);
}

function step1(msg1) {
  plink1.send(msg1);
  plink2.onReceive = step2;
}

What you want to express:

{
  foo = plink.receiver()
} until (msg.foo == 'foo')

What it would look like in JavaScript:

function receiveFoo(msg) {

 if (msg.foo == 'foo')
    nextStep();
  else
    onReceive = receiveFoo;
}
onReceive = receiveFoo;

Assaf

-d
>
>


-- 
CTO, Intalio
http://www.intalio.com

Reply via email to