Контекст не активен, исключение при внедрении bean-объекта области запроса в класс области действия приложения с помощью метода Postconstruct - PullRequest
0 голосов
/ 11 июля 2020

когда я пытался ввести 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

}

Мне нужно обработать каждое сообщение в запросе размах.

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Если bean-компонент с привязкой к приложению создается нетерпеливо при инициализации контекста сервлета (как в данном случае), то нет контекста запроса и, следовательно, нет bean-компонента с привязкой к запросу.

Поскольку совершенно неясно, что вы пытаетесь достичь (ваш код не является минимальным воспроизводимым примером , позвольте мне указать вам на

(Все найдено через этот поиск )

Внедрение bean-компонента с запросом опасно и Я настоятельно рекомендую получить требуемый bean-компонент с областью запросов в указанных c методах или сделать это наоборот, внедрить bean-компонент с привязкой к приложениям в объект с ограниченной областью запросов и вызвать для него метод, передавая в себя.

0 голосов
/ 11 июля 2020

Я не знаю, в чем именно причина проблемы. Но я могу подтвердить, что вы можете вставить beant @ReqeustScoped в @ApplicationScoped. Я делаю это во многих приложениях с сотнями классов, и это сработало из коробки.

...