У меня есть веб-проект с использованием Resteasy (который, в свою очередь, использует Weld), и его развертывают в Tomcat 7.0.22 (я помещаю конкретную версию здесь, если эта проблема относится именно к этой версии).Почему Свард говорит: «Инъекция в Слушатели не поддерживается» на Tomcat?
У меня есть контекста сервлета, который выглядит следующим образом:
@WebListener
public class ApplicationInitialisationListener implements ServletContextListener {
// create a logger here
@Inject
HealthCheck healthCheck;
@Override
public void contextInitialized(ServletContextEvent event) {
if (healthCheck == null) {
log.error("healthCheck is null");
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
После развертывания на сервере Tomcat healthCheck is null
был зарегистрирован, и я также заметил эту строку в журнале:
<2013-11-13 13:27:40,191> <pack> INFO pool-2-thread-1 org.jboss.weld.environment.tomcat7.Tomcat7Container - Tomcat 7 detected, CDI injection will be available in Servlets and Filters. Injection into Listeners is not supported
Вопрос 1 : почему инъекция CDI недоступна в Listeners?
Я посмотрел в этот answer, и он говорит Load on startup via @Startup. There is currently no equivalent to this in CDI.
Вопрос 2: это вопрос описано в вопросе 1 следствием этого?
Вопрос 3: Я использую org.jboss.weld.servlet:weld-servlet:1.2.0.Beta1
. Есть ли какие-либо обновления по поддержке запуска в более поздних версиях?
Вопросы, относящиеся Я Посмотрел startup class in Weld
Что касается вопроса 3:.? Обратите внимание, что сообщение говорит, что это не поддерживается _CDI_ т.е. КДИ спецификации Безразлично Это может быть добавлено к будущей версии и, следовательно, к любой версии Weld, которая реализует эту будущую версию CDI. – Thomas
@Thomas CDI не относится к сервлетам, поэтому он не будет определять ничего, что связано с инъекцией в Java EE. Это функция сварки и JSR 299. –
@SotiriosDelimanolis ah, да, вы правы. Συγνώμη :) – Thomas