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 > > > > > >