OK, this is not really a big deal, because it works when I change it to EJB managed (i.e.
@PersistenceContext), but I'ld like to understand why it doesn't work.
I have an application-scoped bean that should be initialized at startup:
| @Stateful
| @Name("anonUserFactory")
| @Startup(depends="org.jboss.seam.core.ejb")
| @Scope(ScopeType.APPLICATION)
| public class AnonUserFactory implements AnonUserFactoryInterface {
|
| @Logger
| protected Log log;
|
| private User anonUser;
|
| @In(create = true)
| EntityManager theDatabase;
|
| @Create
| public void createAnonUser() {
| try {
| anonUser = (User) theDatabase.createQuery("blah
blah").getSingleResult();
| anonUser.populatePermissions();
| }
| catch (NoResultException e) {
| log.fatal("Could not load anonymous user", e);
| throw e;
| }
| }
|
| @TransactionAttribute(NOT_SUPPORTED)
| public User getAnonUser() {
| return anonUser;
| }
|
| @Remove
| @Destroy
| public void destroy() {
| }
| }
|
For some reason, theDatabase is null when I try to use it. This same injected
EntityManager works in other (non-startup) classes, so the datasource and all that is set
up correctly. I get no exception, except of course the NPE when trying to use the
EntityManager.
If I may throw in a related question. Seeing as this EntityManager is not needed after the
@Create method, how can I close it. If I do, I get the exception stating that I cannot
call close() on injected components. I've tried to get it via
"Component.getInstance("em", true)" and all sorts of things, but it
always returns null.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3993268#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...