Hi Andrus,

Thank you for reply. Following your advice and Malcolm's -the author of the CLICK web framework-, I (almost :) got a prototype working.

I am configuring my module like this:

    <!--JPublish Cayenne support -->
    <module classname="org.jpublish.module.cayenne.JPCayenneModule">
        <cayenne-config-path>/WEB-INF/cayenne</cayenne-config-path>
        <auto-rollback>true</auto-rollback>
        <session-scope>false</session-scope>
        <shared-cache>true</shared-cache>
        <!--
~ Http request paths using a per-request or a per-session Cayenne ObjectContext (OC), ~ the read-only paths will be interpreted first and will use a global OC one defined
         ~ per web app instance.
         ~ -->
        <cayenne-enabled-urls>
            <url path="/info/*" readonly="true"/>
            <url path="/status/*" readonly="true"/>
            <url path="/rss/*" readonly="true"/>
            <url path="/users/*" readonly="false"/>
<url path="/companies/*"/> <!--readonly="false" by default, if not defined-->
        </cayenne-enabled-urls>

        <debug>true</debug>
    </module>

, where the module executes Before and After Actions for a request following the request path rules above. Though I am not sure I have to do anything for the OC, after a request was executed?!

And since I am not using a Filter nor an additional Servlet (so the user can control the Cayenne behavior from the JPublish configuration file only), I can disable/enable the use/creation of the HttpSession, and when the session is disabled an "OC per request" will be created, otherwise I'll use the HttpSession as some of the web frameworks I was looking at are already doing it.

For the read-only requests I will use an "OC per app" as you recommended.

Even though I am very new to Cayenne I can say already that I like Cayenne :)

Many thanks for support,
-florin


On 23-Sep-07, at 13:41 , Andrus Adamchik wrote:

I generally use a new DataContext per thread, with a Filter binding the DataContext to request thread.

I think at some point we should update the docs for 3.0 with information discussing 3 main patterns with all drawbacks and benefits. Here is a short summary:

* OC per request

  - no synchronization issues, smallest memory footprint
  - some overhead in creating a new DataContext on every request
  - no "local" caching (can be good or bad depending on the app)
  - no uncommitted state is allowed between requests

* OC per session:

- Potential synchronization issues on update (if the same user clicks too fast). Possible solution - nested DataContexts per request working off of a single session context. Another solution is synchronization of action methods.
  - efficient local cache
  - uncommitted state can be preserved between requests

 OC per app

- applicable for read-only applications (no special synchronization required in this case)
  - very efficient local cache

Andrus


On Sep 23, 2007, at 2:09 PM, Malcolm Edgar wrote:
Hi Florin,

I generally use a new DataContext per thread, with a Filter binding the DataContext to request thread. Please see the attached example.

regards Malcolm Edgar
http://click.sourceforge.net

On 9/23/07, Florin T.PATRASCU <[EMAIL PROTECTED]> wrote: Hi there,

I am trying to add Cayenne support to the JPublish web framework
( http://code.google.com/p/jpublish/) and being very new to Cayenne I
would like, if possible, to find which is the best practice for
obtaining and using the OC?

I browsed the threads here and most of the information I have show
that one of the most common solution is to use the HttpSession.
That's clear and I can do that very easy, but I wonder if there is a
better way because I would like to use Cayenne for session-less
requests as well. So, would it be prohibitive to create an OC for
every HttpRequest? aka:

ObjectContext oc = DataContext.createDataContext();

If not, would this pattern affect the server stability (memory,
handlers, threads, db pools, etc.)? What about having a global OC
instance per application?

Also, is it safe to start developing on top of the Cayenne 3.x version?

Being my first post on this forum, I would like to thank Cayenne's
creators for making it available and to you, the users, for the
useful information accumulated in this forum during the time.

Thank you,
-florin


Reply via email to