Hoping I'm not too late. Please interpret this not as personal attack or something else. I like the idea of the flow, but the javascript implementation inhibit me to take a deeper look into it.
> +------------------------------------------------------------------+ > | Cocoon Advanced Control Flow (in general) | > +------------------------------------------------------------------+ > > > [A] The "Cocoon Advanced Control Flow" provides a controller that is > linked into the sitemap (as child element of <map:sitemap .../>: > > <map:flow language="[yourLanguage]"> > <map:script src="script_1"/> > <map:script src="script_2"/> > <map:script src="script_..."/> > <map:script src="script_n"/> > </map:flow> -1, because it leaves the impression that the flow must be a script. Alternative, I would prefer <map:flows language="[yourLanguage]"> <map:flow src="script_1"/> <map:flow src="script_2"/> <map:flow src="script_..."/> <map:flow src="script_n"/> </map:flows> Just like generators and generator > [B] Functions provided by scripts can be called within the sitemap > using: > > <map:call function="[yourFunction]"> > <map:parameter name="x" value="y"/>[2] > </map:call> Again -1, functions are one way to implement a flow, see http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=105732879827785&w=2 Perhaps <map:start continuation="[yourFunction]"> > > [C] If a script provides continuations to continue > they are called within the sitemap using: > > <map:call continuation="[continuation-id]"/> <map:continue id="[continuation-id]"/> is for my opinion a better solution. > > [D] All flow interpreters[3] are Avalon components and declared > in the cocoon.xonf: > > <flow-interpreters default="[yourLanguage]" logger="[yourLogger]"> > ... > </flow-interpreters> +1 > [E] All interpreters have to implement the Flow Object Model [FOM][4] > as far as possible but *must not* extend it without prior vote. > They also have to support all "FOM-aware" components (e.g. > JXTemplateGenerator/Transformer) -1, I think our users are adult enough to decide, what they should use and what not. To get the full access to request/response/session and cm etc. seems to be harmless for me. > [F] FOM contains following objects: > > * cocoon > * request > * response > * session > * cookie > * log > * context > * continuation +0 > [G] The FOM does not grant access to actions and input modules > but the flow interpreter *can* provide support for it but must not > give them the appearence of "first-class-Cocoon-citizens". -0 > +------------------------------------------------------------------+ > | JavaScript Interpreter | > +------------------------------------------------------------------+ > > [H] Our first and currently only[5] interpreter implementation is > a Javascript implementation based on Mozilla Rhino which > has been extended to support continuations.[6] It just one solution. I don't like javascript, and the impression that all can be handle harmless in one Javascript function is dangerous, see handling transaction(hilbernate). I would love to see an alternative implementation. In my POV the flow belongs to the core, but not the javascript implementation. > [I] This JavaScript implementation is declared in the cocoon.xconf: > > <flow-interpreters default="JavaScript" logger="flow"> > <component-instance name="JavaScript" > class="org.apache.cocoon.components.flow.javascript. > fom.FOM_JavaScriptInterpreter"> > <load-on-startup>resource://org/apache/cocoon/components/ > flow/javascript/fom/fom_system.js</load-on-startup> > <reload-scripts>true</reload-scripts> > <check-time>4000</check-time> > <!--<debugger>enabled</debugger> --> > </component-instance> > </flow-interpreters> +1 > [J] Flows and sessions: > > (i) A flow script does not create a session automatically. > Accessing the session object (is a property of the cocoon > object) leads to the creation of a session if no session > is available. > > (ii) The global scope of a flow only lives as long as the session > > which the flow is tied to is active. > So if the session expires or you use another client to > continue a 'waiting' function you only have access to the > local scope within the flow function. > > (iii) All scripts within a <map:script>...></> part share the > same global context. If you want to share more objects > you need another scope (request, session, context). +1 > [K] Behaviour of variables within the flow: > All variables within the flow scripts are shared by reference > over continuations. +1 > [L] A continuations manager based on the excalibur-event packages > is responsible for the expiration of continuations. It is > declared in the cocoon.xconf: > > <continuations-manager logger="flow" time-to-live="3600000"> > <expirations-check type="periodic"> > <offset>[timeInMs]</offset> > <period>[timeInMs]</period> > </expirations-check> > </continuations-manager> +1 > [M] Getting and releasing of components has to be done explicitly > by the flow script programmer using:[7] > > cocoon.getComponent( id ); > cocoon.releaseComponent( component ); +1 Stephan.