[jboss-user] [JBoss Seam] - Re: Can't inject entityManager into application component?

RobJellinghaus do-not-reply at jboss.com
Fri Aug 25 04:04:04 EDT 2006


Well well well.  Some random forum surfing and one more try, and now this works:
/**
  |  * Local interface to replog.
  |  * TODO: do we really want this???  are we getting into a synchronization mess?!?!?!?!  or is it Just Right????????
  |  */
  | @Local
  | public interface Replog {
  |    public void init();
  | 
  |    public void destroy();
  | 
  |    public Site getSite();
  | }
  | 
  | @Startup
  | @Scope(APPLICATION)
  | @Stateful
  | @Name("replogApplication")
  | public class ReplogApplication implements Replog {
  | ...
  |    @PersistenceContext    // why does this work but @In doesn't?
  |    private transient EntityManager entityManager;
  | 
  |    // SiteSynchronizers, indexed by Site
  |    private Map synchronizers = new HashMap();
  | 
  |    /** The Site we consider to be "this application's site" */
  |    private Site site;
  | 
  |    @Create
  |    public void init ()
  |    {
  |       log.debug("Creating replogApplication");
  | 
  |       // for now, create one SiteSynchronizer per defined Site
  |       List<Site> sites = entityManager.createQuery("from Site").getResultList();
  | 
  |       for (Site site : sites) {
  |          synchronizers.put(site, new SiteSynchronizer(site));
  | ...
  |       }
  |    }
  | 
  |    @Remove @Destroy
  |    public void destroy () {
  |    }
  | 
  |    /** Get the current Site. Should this really be an Application context component instead????? */
  |    public Site getSite () {
  |       return site;
  |    }
  | }
So, @PersistenceContext was part of the secret.  Looks like the EJB3 lifecycle methods have to be in the local interface too.  I would probably know this if I hadn't started learning Seam before EJB3....

Why does @PersistenceContext work here but @In doesn't?  I think I'm good to go now (modulo the possibility that I'm still arranging my components the wrong way, but some more code iteration will clue me in there).  But I'm still curious why the first way didn't work; I think there's some deep Seam knowledge in there somewhere...?

Cheers!
Rob

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3967420#3967420

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3967420



More information about the jboss-user mailing list