Thank you for the help Sam.

My only other question is this:

In reading about this stuff, I have come across mention of the
PersistFilter.... Do I HAVE to use that, or is my injection of
EntityManager or a provider thereof, good enough when combined with an
@Transactional annotation on a method.  Am I asking for trouble by not
using PersistFilter?  It works in my trivial web app without
PersistFilter, am I opening myself up to an overflow error or
threading issues?

Thanks again.

On Mar 2, 5:08 pm, Sam Berlin <[email protected]> wrote:
> IMHO, if it doesn't have state, it doesn't need to be a singleton.  The
> only reason you'd make it a singleton is if you discover performance
> problems with allocating & GC'ing these through the lifetime of an app.
>
>  sam
>
>
>
>
>
>
>
> On Fri, Mar 2, 2012 at 6:34 PM, Owen Berger <[email protected]> wrote:
> > I am currently working on an application utilizing Guice / JPA /
> > Hibernate to get info from my database.
>
> > I have read the Guice docs on working with JPA and EntityManagars
> > here:http://code.google.com/p/google-guice/wiki/JPA,
>
> > But I am having trouble understanding when I should make my DAO
> > Implementations Singletons.
>
> > I have read this question on StackOverflow regarding Spring's use of
> > DAO's where it says:
>
> >    "Instantiating a DAO for every request would be crazy."
>
> > Does that carry over for DI containers other than Spring? If I am
> > injecting a DAO Provider into my Servlet and calling when needed,
> > should the DAO Service Implementation be a Singleton?
>
> > Here is a basic outline of one of my DAO's:
>
> > public DAOImpl implements DAOService { <-- SHOULD THIS BE ANNOTATED
> > @Singleton?
>
> >    @Inject
> >    private EntityManager em;
> >    // OR
> >    // @Inject
> >    // private Provider<EntityManager> emProvider - If it's a
> > singleton.
>
> >    @Inject
> >    DAOImpl(OtherServices os) {
> >        this.otherServices = os;
> >    }
>
> >    @Transactional
> >    public MyPersistedObject getPersistedObject(long id) {
> >        MyPersistedObject mpo = em.find(MyPersistedObject.class, id);
> >        return mpo;
> >    }
> > }
>
> > And how it's called:
>
> >   @Singleton
> >   public MyServlet(HttpRequest req, HttpRequest res)
> >           extends ServletInterfaceOfTheDay {
>
> >       private final daoService; // If Singleton
> >       // OR
> >       // private final Provider<DAOService>; If Instanced DAO
>
> >       @Inject
> >       MyServlet(DAOService dao) {
> >           this.daoService = dao;
> >       }
>
> >       // Gather Information from request here...
>
> >       MyPersistedObject mpo =
> > daoService.getPersistedObject(requestIdInfo);
> >       // OR daoService.get().getPersistedObject(requestIdInfo);
>
> >       // Process Response Info here....
>
> >   }
>
> > Thanks for the help. I also posted this on StackOverflow.com if you
> > want points there...
>
> >http://stackoverflow.com/questions/9541046/should-guice-injected-daos...
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "google-guice" 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-guice?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" 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-guice?hl=en.

Reply via email to