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

Reply via email to