Sylvain Wallez wrote:
[...]
1) IIUC, every time a source is resolved a new JCR session is created.
Does this mean that no transactions can be used?
Maybe it would make sense to attach the JCR session to the Cocoon
session, so that all resolved JCRNodeSources save their data to a
single session which would allow them to take part in a single
transaction?
Yes it makes sense! As Cedric said this stuff is fairly new, and
currently the session management is definitely suboptimal and doesn't
allow for transaction management.
Now what should be the scope of the session? I'm not sure there is a
single answer to this and the plan was to allow to configure the
Repostory object with input/output modules that whould be used to
get/store the session. Such modules would typically store the JCR
session in a request attribute or in a servlet session attribute.
That sounds quite useful, but maybe a special service (interface)
would make more sense than an input + output module?
And this leads to yet another problem: calling session.logout(), which
happens at different times depending on the session scope...
The solution (thinking as a type) can be to have some kind of
JCRSessionPolicy object that would take care of getting/storing/closing
the session.
Would that be something like this?
public Source getSource(String uri, Map parameters) ... {
JCRSessionPolicy policy = null;
try {
policy = (...) this.manager.lookup(JCRSessionPolicy.ROLE);
// policy logs in or restores JCR session from wherever
Session session = policy.getSession();
source = createSource(session, path);
// policy stores session for further use
policy.storeSession();
}
finally {
... release policy
}
}
For now, you can simply override the login() method to manage the session!
Good idea, I'll try that.
[...]
I read a comment by Ugo Cei that it would make sense to drop the Cocoon
Repository block in favor of the JCR block. Does that mean that the
JCRNodeSource would be extended to provide access to JCR functionality?
I'm not sure this is a good idea. The repository block defines some
Source extensions that can be used by source implementations that wrap a
repository (JCR, webdav, etc).
That sounds very useful and would dovetail with the Lenya repo integration
(see my other mail).
Thanks for your answer!
-- Andreas