A few clarifications: detaching an object isn't expensive. It just leads you
down a path where extremely weird bugs can crop up if you don't keep track
of what is managed and what isn't.

You can eager load the list before you close the persistence manager by
calling a size() method. You can close the Persistence Manager at this
point, but the List will have been populated.

Yes, getPersistenceManager() should be returning a new PersistenceManager
instance each time, but this is very cheap and you shouldn't worry too much
about doing this. There's this myth that object instantiation in Java is
expensive, and while this is true for things like pooled resource managers
or dynamic language interpreters, in general, this is so cheap to the point
that it should rarely matter. I wouldn't worry about this in your case.

On Thu, Feb 11, 2010 at 10:20 PM, hsjawanda <[email protected]> wrote:

> On Feb 11, 11:42 am, Conor Power <[email protected]> wrote:
> > Hi,
> >   I have a question on detachment ... I have my PM in a DAO and I open
> and
> > close pre / post query. The problem was that the objects returned are
> null
> > once the PM was closed unless I set them to be detachable.
>
> This is exactly the issue I have...
>
> My DAO's methods do the querying & return a List<E> of results. JSP
> page uses this list to construct and return the page.
>
> Unless I close the PM in the JSP by making a second call to a Close()
> method on the DAO (I don't like that idea), I either leave the PM as
> it is (which, based on Ikai's reply, does not seem to be a problem) or
> I detach (duplicate?) the result set.
>
> Ikai clearly tells us that detaching is expensive (as expected), so
> I'll avoid that.
>
> Do repeated calls to PMF.get().getPersistenceManager() return the same
> PM or is a new one created everytime? Even though the
> getPersistenceManager() call is light, I'd rather avoid repeated calls
> if it returns a new instance every time.
>
> Thanks,
> HSJ
>
> > Is there an alternative instead of detach in this case? Should I:
> >
> > 1. make DTO of the returned objects (similar to what would happen in
> > detachable anyway I guess?)
> > 2. design the layers such that the PM is closed at the end of the request
> > once the reponse has been formed using the data from the objects that
> were
> > queried.
> >
> > thanks ...
> >
> > cowper
> >
> > On Wed, Feb 10, 2010 at 1:46 PM, Ikai L (Google) <[email protected]>
> wrote:
> >
> > > This is really up to you, though I would avoid detaching unless
> absolutely
> > > necessary. Opening and closing a PersistenceManager should be extremely
> > > cheap (it's instantiating a PersistenceManagerFactory that's
> expensive).
> > > You've got a few options here, and what you do really just depends on
> what
> > > makes sense for you:
> >
> > > - dependency inject the PersistenceManager into a DAO class that you
> > > instantiate and pass that instance around, closing it when you are
> complete
> > > - open and close each time in the DAO - the problem here is if you need
> a
> > > PersistenceManager that spans DAO objects (either build that into a
> method
> > > or a Service layer, though for the record I have an aversion to
> additional,
> > > unnecessary layers that do a single thing)
> >
> > > From a performance perspective, we aren't doing anything. If you take a
> > > look at the low-level API documentation, there's no concept of "close":
> >
> > >http://code.google.com/appengine/docs/java/javadoc/com/google/appengi.
> ..
> >
> > > On Wed, Feb 10, 2010 at 8:26 AM, hsjawanda <[email protected]>
> wrote:
> >
> > >> Nobody knows the answer to this?
> >
> > >> On Feb 7, 2:34 pm, hsjawanda <[email protected]> wrote:
> > >> > Should the PersistenceManager be closed after every query?
> >
> > >> > I have a utility class that handles querying the datastore. This
> class
> > >> > then returns results which are used by JSP pages to show output.
> >
> > >> > AFAIK, these are my options:
> >
> > >> > * Make all my data objects detachable (what is the extra cost of
> doing
> > >> > this? Don't they have to be copied when detaching?
> > >> > )
> > >> > * Make a second call on the utility class to close the PM (defeats
> the
> > >> > purpose of having the utility class)
> >
> > >> > * Leave my PM unclosed (what is/are the implications of this?)
> >
> > >> > I am referring to a case where I am only doing reads from the data
> > >> > store.
> >
> > >> > Regards,
> > >> > Harshdeep
> >
> > >> --
> > >> You received this message because you are subscribed to the Google
> Groups
> > >> "Google App Engine for Java" group.
> > >> To post to this group, send email to
> > >> [email protected].
> > >> To unsubscribe from this group, send email to
> > >> [email protected]<google-appengine-java%[email protected]>
> <google-appengine-java%[email protected]<google-appengine-java%[email protected]>
> >
> > >> .
> > >> For more options, visit this group at
> > >>http://groups.google.com/group/google-appengine-java?hl=en.
> >
> > > --
> > > Ikai Lan
> > > Developer Programs Engineer, Google App Engine
> > >http://googleappengine.blogspot.com|http://twitter.com/app_engine
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Google App Engine for Java" group.
> > > To post to this group, send email to
> > > [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<google-appengine-java%[email protected]>
> <google-appengine-java%[email protected]<google-appengine-java%[email protected]>
> >
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/google-appengine-java?hl=en.
> >
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to
> [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine-java%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>
>


-- 
Ikai Lan
Developer Programs Engineer, Google App Engine
http://googleappengine.blogspot.com | http://twitter.com/app_engine

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to