You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Joerg Heinicke <jo...@gmx.de> on 2005/05/10 11:59:05 UTC
synchronization in flow script
Hello,
I have a question regarding synchronization in flow script. I need an object per
session, so the instantiation must be synchronized. Furthermore the object is an
Avalon component, so I need to call something like cocoon.createComponent().
Now how is it possible in Flow script? The alternative would be a synchronized
static factory method in the class, but how can I get the Avalon lifecycle then?
Joerg
Re: synchronization in flow script
Posted by Joerg Heinicke <jo...@gmx.de>.
Sylvain Wallez <sylvain <at> apache.org> writes:
>
> Joerg Heinicke wrote:
>
> >Hello,
> >
> >I have a question regarding synchronization in flow script. I need an object
> >per session, so the instantiation must be synchronized. Furthermore the object
> >is an Avalon component, so I need to call something like
> >cocoon.createComponent().
> >
> >Now how is it possible in Flow script? The alternative would be a synchronized
> >static factory method in the class, but how can I get the Avalon lifecycle
> >then?
> >
> >
>
> Flowscript execution is synchonized on the Rhino scope, which is either
> the global (per-session) scope for a function call and the continuation
> scope for continuation call.
>
> So what about simply declaring a global variable in your flowscript,
> created using cocoon.createComponent()?
Hello Sylvain,
I tested the following two solutions. The first one does not work - more or less
like expected as the variable is not initialized immediately via getComponent().
=====================================================================
// not synchronized, but works like expected otherwise
var queryHandler;
function getQueryHandler(create) {
if (queryHandler == null && create) {
queryHandler = cocoon.getComponent(QueryHandler.ROLE);
cocoon.session.setAttribute(QueryHandler.ROLE, queryHandler);
} else if (queryHandler == null) {
throw new ProcessingException("Could not find a query handler.");
}
return queryHandler;
}
=====================================================================
Unfortunately the second one does neither work. Though the access is indeed
synchronized, the initialization of the variable is executed on every call to a
function in this flowscript. I wonder if this behaviour is correct. Maybe I have
a false understanding "how it works", but I understand the global stuff as
something like static stuff in Java - and static initialization is only executed
once in Java.
=====================================================================
// synchronized, but executed on each flowscript call
var queryHandler = cocoon.getComponent(QueryHandler.ROLE);
function getQueryHandler(create) {
cocoon.session.setAttribute(QueryHandler.ROLE, queryHandler);
return queryHandler;
}
=====================================================================
// called from sitemap
function initQuery() {
var queryHandler = getQueryHandler(true);
...
}
function executeQuery() {
var queryHandler = getQueryHandler();
...
}
=====================================================================
Do you have another idea?
Joerg
Re: synchronization in flow script
Posted by Sylvain Wallez <sy...@apache.org>.
Joerg Heinicke wrote:
>Hello,
>
>I have a question regarding synchronization in flow script. I need an object per
>session, so the instantiation must be synchronized. Furthermore the object is an
>Avalon component, so I need to call something like cocoon.createComponent().
>
>Now how is it possible in Flow script? The alternative would be a synchronized
>static factory method in the class, but how can I get the Avalon lifecycle then?
>
>
Flowscript execution is synchonized on the Rhino scope, which is either
the global (per-session) scope for a function call and the continuation
scope for continuation call.
So what about simply declaring a global variable in your flowscript,
created using cocoon.createComponent()?
Sylvain
--
Sylvain Wallez Anyware Technologies
http://apache.org/~sylvain http://anyware-tech.com
Apache Software Foundation Member Research & Technology Director