首页 > 解决方案 > 使用 Postconstruct 方法在应用程序范围类中注入请求范围 bean 时上下文非活动异常

问题描述

当我尝试在应用程序范围 bean 中注入请求范围 bean 时,出现以下错误。

Method threw 'org.jboss.weld.contexts.ContextNotActiveException' exception. Cannot evaluate com.example.flow.txn.TxnMessageProcessor$Proxy$_$$_WeldClientProxy.toString()

代码参考:

@ApplicationScoped
public class TxnMessageObserver {

    private static final Logger logger = LoggerFactory.getLogger(TxnMessageObserver.class);

    @Inject
    private TxnMessageProcessor processor;
//message is observed here

  public void postConstruct(@Observes @Initialized(ApplicationScoped.class) Object o) {
        logger.info("Subscribing to queue [{}] for msg.", queue);
        consumer.subscribe(queue);
    }



}


@RequestScoped
public class TxnMessageProcessor {

    private static final Logger logger = LoggerFactory.getLogger(TxnMessageProcessor.class);
//all processing happens here

}

我需要处理请求范围内的每条消息。

标签: javajbosscdijava-ee-8

解决方案


我不知道问题的原因到底是什么。但我可以确认您可以将@ReqeustScoped bean 注入@ApplicationScoped。我在许多具有数百个类的应用程序中这样做,并且开箱即用。


推荐阅读