Indeed you are right. It's only defined to MUST be active for EJBs and 
asynchronous observer methods.
But funnily not in synchronous CDI bean observers :/

LieGrue,
strub

> Am 09.04.2018 um 14:24 schrieb Martin Kouba <mko...@redhat.com>:
> 
> 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/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
>>> 
>>> -- 
>>> Martin Kouba
>>> Senior Software Engineer
>>> Red Hat, Czech Republic
> 
> -- 
> Martin Kouba
> Senior Software Engineer
> Red Hat, Czech Republic

Reply via email to