Date: 2005-01-15T01:20:38
Editor: ReinhardPoetz
Wiki: Cocoon Wiki
Page: FlowscriptAndSessionReplication
URL: http://wiki.apache.org/cocoon/FlowscriptAndSessionReplication
no comment
Change Log:
------------------------------------------------------------------------------
@@ -8,7 +8,7 @@
* store the continuations at the server's (filesystem, database) so that they
survive server shutdowns
= Background =
-Cocoon uses Mozilla Rhino for its Flowscript implementation. Looking into a
Cocoon sitemap reveals that flowscripts are registered in
+Cocoon uses Mozilla Rhino for its Flowscript implementation. Looking into a
Cocoon sitemap reveals that flowscripts are registered in
{{{
<map:flow language="javascript">
@@ -59,7 +59,8 @@
* As the scope has references to many Cocoon internal objects (see the
Cocoon object) serialization wouldn't work because many of them are not
serializable
* Serializing all the large objects would be very expensive
-How do session replicators work? What triggers the replication? I remember to
have read somewhere that it's triggered by the session.setAttribute() method,
in which case changing the state of a session attribute but not the attribute
itself causes problems.--[SylvainWallez]
+''How do session replicators work? What triggers the replication? I remember
to have read somewhere that it's triggered by the session.setAttribute()
method, in which case changing the state of a session attribute but not the
attribute itself causes problems.''--[SylvainWallez]
+''See e.g. the Tomcat documentation.'' ReinhardPoetz
=== Possible way to solve this problem? ===
(outlined by Christopher Oliver)
@@ -91,7 +92,7 @@
=== Description ===
Exchanging e.g. the {{{ContinuationsHolder}}} because only one Continuation
has been added, would be very expensive.
-Rather than having a single ContinuationHolder in the session that keeps all
continuations, it may be better to have each continuation stored as a separate
session attribute. That may both trigger the replication system and reduce the
replication load. --[SylvainWallez]
+''Rather than having a single ContinuationHolder in the session that keeps all
continuations, it may be better to have each continuation stored as a separate
session attribute. That may both trigger the replication system and reduce the
replication load.'' --[SylvainWallez]
=== Possible solution ===
Add some kind of delta management into the serialization/deserialization
process. But how ...?
@@ -107,11 +108,12 @@
}
}}}
-cocoon.getComponent() can return a serializable proxy, but
cocoon.createObject() must return a serializable object. There's also a problem
with CForms: a form contains its own data model, which can be serialized, but
also pointers to its definition, which is shared between form instances and can
contain arbitrary references to non-serializable objects and
components.--[SylvainWallez]
+''cocoon.getComponent() can return a serializable proxy, but
cocoon.createObject() must return a serializable object. There's also a problem
with CForms: a form contains its own data model, which can be serialized, but
also pointers to its definition, which is shared between form instances and can
contain arbitrary references to non-serializable objects and
components.''--[SylvainWallez]
+''In this case the Form object has to provide its own
serialization/deserialization mechanism that make sure that its state is
exchanged correctly.'' ReinhardPoetz
=== Possible solution ===
* Forbid the usage of components
- * ''... how to manage references to service manager or service selector? May
be through serializable proxies... Or may be by documenting that no flow method
should have non-serializable objects on stack...'' by Vadim
+ * ''... how to manage references to service manager or service selector? May
be through serializable proxies... Or may be by documenting that no flow method
should have non-serializable objects on stack...'' --Vadim
= More to read ... =