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