You should not have a disposer method in your case, since you're using a container managed entity manager (using @PersistenceContext for injection)
On Wed, Apr 11, 2018 at 4:24 AM Luís Alves <luisalve...@gmail.com> wrote: > The error that I mention earlier was this one: > > ERROR [org.jboss.weld.Bean] (DefaultQuartzScheduler_Worker-1) WELD-000019: > Error destroying an > instance > *org.jboss.as.jpa.container.TransactionScopedEntityManager*@4f7d201d > of Producer Method [EntityManager] > with qualifiers [@Default @Any] declared as [[BackedAnnotatedMethod] > @Produces @Default > @RequestScoped public my.package.config.EntityManagerProducerImpl.get()] > > > It's caused by the dispose method > > @ApplicationScoped > public class EntityManagerProducerImpl implements EntityManagerProducer > { > > @PersistenceContext(unitName = "my-unit") > private EntityManager entityManager; > > @Override > @Produces > @Default > @RequestScoped > public EntityManager get() > { > return entityManager; > } > > > > > > > > * public void closeEntityManager(@Disposes @Default EntityManager em) > { if (em.isOpen()) { em.close(); } }* > > } > > When I remove it, it works fine. I think since I use > > globalAlternatives.org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy=org.apache.deltaspike.jpa.impl.transaction.ContainerManagedTransactionStrategy > the EM is closed by the container, but not 100% sure. > Should I have a dispose or not? > > Regards, > LA > > On Mon, Apr 9, 2018 at 3:50 PM, Luís Alves <luisalve...@gmail.com> wrote: > > > Thanks John. > > DS allows to programmatically activate the scope (Container Control > > Module). > > Not sure if it works the same way of @ActivateRequestContext. > > Nevertheless it's seems a workaround. I must agree with Struberg, it > > should be activated, unless there's some good reason it can't be > activated > > in the observer. > > > > LA > > > > On Mon, Apr 9, 2018 at 3:39 PM, John D. Ament <johndam...@apache.org> > > wrote: > > > >> If you're on CDI 2.0 you can add it yourself if you want (via > annotation - > >> @ActivateRequestContext). However, sounds like you're on WF 10.1, so > >> you'd > >> have to programmatically register it. > >> > >> On Mon, Apr 9, 2018 at 8:41 AM Luís Alves <luisalve...@gmail.com> > wrote: > >> > >> > It partially worked on @PostConstruct :), my colleague is having some > >> issue > >> > with the TX. I'm working from home today, so I can only have a clear > >> look > >> > tomorrow. > >> > @Transactional is allowed on @PostConstruct, right? Does the method > has > >> to > >> > be public for @Transactional be intercepted? > >> > > >> > I dunno what the spec says...but would be nice to have the > >> @RequestContext > >> > at the @Observes @Initialized(ApplicationScoped.class). > >> > > >> > LA > >> > > >> > On Mon, Apr 9, 2018 at 1:24 PM, Martin Kouba <mko...@redhat.com> > wrote: > >> > > >> > > Dne 9.4.2018 v 14:20 Mark Struberg napsal(a): > >> > > > >> > >> According to the CDI spec every call to a business method must have > >> the > >> > >> Request Context activated. > >> > >> > >> > > > >> > > Mark, this is very wrong! Which part of the spec dou you refer? > >> > > > >> > > > >> > > > >> > > And this very observer IS a business method. > >> > >> > >> > >> LieGrue, > >> > >> strub > >> > >> > >> > >> > >> > >> Am 09.04.2018 um 10:58 schrieb Martin Kouba <mko...@redhat.com>: > >> > >>> > >> > >>> Dne 9.4.2018 v 10:36 Luís Alves napsal(a): > >> > >>> > >> > >>>> I still didn't tested it...but I was hoping that @Observes > >> > >>>> @Initialized(ApplicationScoped.class) was executed after > >> > >>>> @PostConstruct > >> > >>>> > >> > >>> > >> > >>> It is, but the request context is destroyed after the > @PostConstruct > >> > >>> callback completes (if it did not already exist before the > >> > @PostConstruct > >> > >>> callback was invoked). > >> > >>> > >> > >>> 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 <mko...@redhat.com > >> > <mailto: > >> > >>>> mko...@redhat.com>> 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 < > >> > mko...@redhat.com > >> > >>>> <mailto:mko...@redhat.com> <mailto:mko...@redhat.com > >> > >>>> <mailto:mko...@redhat.com>>> 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> > >> > >>>> <http://docs.jboss.org/cdi/spe > >> > >>>> c/1.2/cdi-spec.html#request_context < > http://docs.jboss.org/cdi/spe > >> > >>>> c/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 > >> > >>>> > >> > >>> > >> > >>> -- > >> > >>> Martin Kouba > >> > >>> Senior Software Engineer > >> > >>> Red Hat, Czech Republic > >> > >>> > >> > >> > >> > >> > >> > > -- > >> > > Martin Kouba > >> > > Senior Software Engineer > >> > > Red Hat, Czech Republic > >> > > > >> > > >> > > > > >