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 <arnau..magemed-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.questio..mail.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 <arnau..magemed-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
> > >
> >
>
This archive was generated by hypermail 2.0.0 : Sat Apr 24 2010 - 11:17:08 EDT