weirdly, while implementing I had the same doubt. Seeing into the doc
here[1] or better here[2], I realized that the idea suggested for web-apps
does not fit for Wicket because Wicket users are abstracted from
HTTPSession.

Looking into  the code on how the servlet does this thing, in the method
org.apache.cayenne.conf.ServletUtil.getSessionContext(..) -- this is what
being done. see code snippet below. So, I did not evaluate much on gain in
using getThreadObjectContext() vs CreateDataContext() -- since the Cayenne's
native implementation does that way therefore I followed.

On thinking about this now, I think createDataContext() must not be a loss
in performance, because what we are doing, basically, is creating context at
session start and holding the instance of DataContext all the time until
session expires -- so it should be, I hope, at least same as using
getThreadObjectContext().

But I would like to know if there is a flaw in my thinking.


[CODE]
   /**
     * Returns default Cayenne DataContext associated with the HttpSession,
creating it on
     * the fly and storing in the session if needed.
     */
    public static DataContext getSessionContext(HttpSession session) {
        synchronized (session) {
            DataContext ctxt = (DataContext)
session.getAttribute(DATA_CONTEXT_KEY);

            if (ctxt == null) {
                ctxt = DataContext.createDataContext();
                session.setAttribute(ServletUtil.DATA_CONTEXT_KEY, ctxt);
            }

            return ctxt;
        }
    }

[/CODE]


[1] http://cayenne.apache.org/doc30/obtaining-datacontext.html  something's
wrong, all the code snippets are gone!
[2]
http://74.125.153.132/search?q=cache:HFEZ2Rs496UJ:cayenne.apache.org/doc20/obtaining-datacontext.html+http://cayenne.apache.org/doc30/obtaining-datacontext.html&cd=1&hl=en&ct=clnk&gl=in&client=firefox-a


- Nishant

On Sat, Apr 24, 2010 at 6:06 PM, Arnaud Garcia <arn...@imagemed-87.com>wrote:

> ... OK, putting the dataContext in the session object is certainly a good
> idea, but for the creation of the DataContext do you think we have to use
> the createDataContext() or using the DataContext.getThreadObjectContext()
> since it is supposed to be attached to the current thread by the cayenne
> filter ...
>
> Arnaud
>
> 2010/4/24 Nishant Neeraj <nishant.has.a.quest...@gmail.com>
>
> > Hi Arnaud,
> >
> > I have used session to store my dataContext
> >
> > something like this
> >
> > public DataContext getSessionDataContext(){
> >        synchronized(this){
> >            if(this.dataContext==null){
> >                this.dataContext = DataContext.createDataContext();
> >            }
> >        }
> >        return this.dataContext;
> >    }
> >
> >
> > anywhere I need this, I perform this
> >
> > DataContext dctx = ((MyAppSession)getSession()).getSessionDataContext();
> >
> > I think it may not solve the serialization issue, if session objects are
> > serialized. But you avoid creating DataContext at every page.
> >
> > Not sure if this helps you.
> >
> > You may want to see how DataBinder[1] has implemented it.
> >
> > [1] http://databinder.net/wicket/show/overview/
> >
> > - Nishant
> >
> > On Sat, Apr 24, 2010 at 1:55 PM, Arnaud Garcia <arn...@imagemed-87.com
> > >wrote:
> >
> > > Hello,
> > >
> > > I put my question in both forum, (wicket and this one)
> > >
> > > Does anyone knows how to set up Cayenne for wicket ?
> > >
> > > In my WicketPage I have :
> > >  private DataContext ctxt = (DataContext)
> > > DataContext.getThreadObjectContext();
> > >
> > > but, I don't think it is the good way, since I suppose wicket will
> > > serialized the full DataContext... (maybe I can put the
> > > getThreadObjectContext() in a method or constructor to avoid the
> > > serialization...)
> > > -> Well, I don't know how what is the good way  ;-)
> > >
> > >
> > >
> > > thanks,
> > >
> > > Arnaud
> > >
> >
>

Reply via email to