Я разрабатываю приложение Java EE без http-интерфейса: он использует только MQTT для отправки/получения данных.Области CDI в приложении не http
Мне интересно, применимы ли к этому сценарию CDI @SessionScoped
и @RequestScoped
, или я должен определить собственные области для обработки запросов клиента.
Редактировать
Я попробовал простое приложение, которое впрыскивает @SessionScoped
или @RequestScoped
фасоль в MQTT получить обратный вызов, и я получил исключение сказать, что у меня нет никакого активного контекста.
Возможно ли активировать контекст программно, чтобы жизненный цикл beans выполнялся по выбранной области?
PS: когда я отправляю вопрос, который я не был слишком ленив, чтобы сделать этот простой тест, но я был Любопытным идти глубже в теории области видимости КДИ ... и до сих пор я ..
благодарит за ваш ответ! Я прочитал документацию, которую вы связали, и я нашел полезную информацию. К сожалению, я еще не понял, как я должен использовать «BoundConversationContext»: должен ли я вставлять контекст в bean-компонент, я хочу иметь область запроса и «скопировать-вставить» код, который вы опубликовали? следует ли мне вызвать эти методы из моего кода или использовать контейнер? должен ли я управлять 'requestDataStore'? –
Вам необходимо связать и активировать контекст контекста, прежде чем вы сможете получить доступ к вашему облаковому компоненту и деактивировать его послесловие. Это означает, что вам нужно сделать это за пределами вашего фасоли. В вашем случае вы можете, например, создать контекст беседы, если какой-то четный или полученный данные и деактивировать его после таймаута. – temaleva