I still didn't tested it...but I was hoping that @Observes @Initialized(ApplicationScoped.class) was executed after @PostConstruct
1st: @PostConstruct 2nd: public void init(@Observes @Initialized(ApplicationScoped.class) Object init) isn't this the case? Why on @PostConstruct we have scope and not at @Observes @Initialized(ApplicationScoped.class)? - @Inject(ed) beans are available here LA On Mon, Apr 9, 2018 at 8:44 AM, Martin Kouba <[email protected]> wrote: > Dne 9.4.2018 v 09:33 Luís Alves napsal(a): > >> Thanks for you answers. >> Before I left we tried with @TransactionScoped and got the same exception. >> With the ContextControl ctxCtrl = >> BeanProvider.getContextualReference(ContextControl.class); >> it worked, but it seems a huge workaround. >> @MKouba: thanks for your proposed solution. I'll will try as soon as my >> colleague arrive, since the code his on his machine. Btw, we use >> wildfly-10.1.0.Final, if this is a bug can you open a bug? >> > > It does not seem to be a bug. > > >> Regards, >> LA >> >> >> >> On Mon, Apr 9, 2018 at 7:56 AM, Martin Kouba <[email protected] <mailto: >> [email protected]>> wrote: >> >> Dne 6.4.2018 v 18:37 Luís Alves napsal(a): >> >> Hello, >> >> I'm getting: >> >> Caused by: java.lang.RuntimeException: >> org.jboss.weld.context.ContextNotActiveException: WELD-001303: >> No active >> contexts for scope type javax.enterprise.context.RequestScoped >> >> On bootstrap: >> >> @ApplicationScoped >> public class BootConfig >> { >> @Inject >> private Logger logger; >> >> @Inject >> private ConfigRepo configRepo ; >> >> >> public void init(@Observes >> @Initialized(ApplicationScoped.class) Object >> init){ >> *//There's no Request Scope here* >> >> >> Hm, there is no guarantee that a request context is active at this >> point, i.e. during notification of this observer method. >> >> However, you could put the logic in a @PostConstruct callback of >> BootConfig (request context must be active during @PostConstruct >> callback of any bean). >> >> See also >> http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#request_context >> <http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#request_context> >> >> >> Config c = configRepo.findByKey("my.key"); >> //.... >> } >> } >> >> @Repository >> public abstract class ConfigRepo extends >> AbstractEntityRepository<Config, >> Long> >> { >> >> private static final QConfig c= QConfig.config; >> >> public Stop findByKey(final String key) >> { >> >> return new JPAQuery<Stop>(*entityManager()*).from(c) >> .where(c.key.eq(key)) >> .fetchFirst(); >> } >> >> >> @ApplicationScoped >> public class EntityManagerProducerImpl implements >> EntityManagerProducer >> { >> >> @PersistenceContext(unitName = "my-unit") >> private EntityManager entityManager; >> >> @Produces >> * @RequestScoped* >> public EntityManager get() >> { >> return entityManager; >> } >> public void dispose(@Disposes @Default EntityManager >> entityManager) >> { >> if (entityManager.isOpen()) >> { >> entityManager.close(); >> } >> } >> } >> >> From the documentation you propose to use * @RequestScoped* >> entityManager...so...what is wrong with this architecture? >> >> I can switch to @TransactionScoped and then annotate the init >> method with >> @Transactional...I suppose it will work...but maybe is not the >> proper >> approach. >> >> Regards, >> LA >> >> >> -- Martin Kouba >> Senior Software Engineer >> Red Hat, Czech Republic >> >> >> > -- > Martin Kouba > Senior Software Engineer > Red Hat, Czech Republic >
