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