Я создал проект Java, который будет использоваться в качестве lib для других проектов, что уменьшит дублирование кода между проектами. Этот проект lib экспортируется в jar для включения в веб-проекты (WAR, а не EAR).CDI beans внутри .jar не найдены контейнером (неудовлетворительные зависимости)
В веб-проектах (где эти классы удаляются) все работает как обычно, пока все классы хранятся на них. ─ Впрыск простых и сложных объектов (с производителями и настройками) работал нормально.
После удаления этих классов веб-проектов и добавления банки с этими же классами в веб-проекты (установка этой библиотеки в pom.xml в проектах Maven) все скомпилировано нормально, как и раньше. Но на старте сервера, классы (CDI бобы) в настоящее время в банке не найден в контейнере во время запуска КДИ, генерируя эту (известную) сообщение об ошибке:
WELD-001408: Unsatisfied dependencies for type Session with qualifiers (...)
Уже добавил beans.xml в папку META-INF как в файле src/main/resources (указанном в документах WELD и CDI), так и в корневой папке проекта.
Ниже приведены примеры фасолью (Session, SessionFactory и ExampleLogger) представляет в банке, который должен быть введен в другие проекты (и работали нормально, а класс был в веб-проектах), но сейчас не быть обнаруженным ИНП:
public class HibernateConnectionFactory {
@Produces
@ApplicationScoped @ConnectionBaseExample
public SessionFactory createSessionFactoryExample() {
Configuration configuration = new Configuration();
configurarSessionFactory(configuration, "baseExampleDS");
ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
return configuration.buildSessionFactory(registry);
}
@Produces
@RequestScoped @ConnectionBaseExample
public Session createSessionExample(@ConnectionBaseExample SessionFactory sessionFactory) {
return sessionFactory.openSession();
}
public void destruirSessionExemplo(@Disposes @ConnectionBaseExample Session session) {
if (session.isOpen()) {
session.close();
}
}
}
public class ExampleLoggerProducer {
@Produces
public ExampleLogger createLogger(InjectionPoint injectionPoint) {
return new ExampleLogger(injectionPoint.getMember().getDeclaringClass());
}
}
проблема возникает в проектах Maven и проектов, не Maven, а также. Кто-нибудь сталкивался с этой проблемой? Кто-нибудь знает решение для бобов, присутствующих в контейнере , можно найти в контейнере? Заранее спасибо и извините за плохой английский.
Java EE7, CDI 1,1, WELD 2,1 сервер WildFly 8,1
Это __should__ работает, поэтому что-то не так в вашей настройке. Вы уверены, что банка включена в войну? Вы меняли имена пакетов аннотаций (отборочных)? Вы создали новый простой компонент в проекте jar и попытались его ввести в войну. Это работает? – Guenther
Да, я пробовал это. Повторяя еще некоторое время назад, я нашел решение ─ Я поместил ** beans.xml ** в папку META-INF внутри корневой папки ** проекта **, и это сработало! Это противоречит описанию того, как работать с CDI-компонентами внутри банки в документации WELD, где говорится о месте размещения бобы.xml находится внутри src/main/resources/META-INF, но все в порядке. Во всяком случае, спасибо Гюнтеру. –
Пожалуйста, загляните в свой '' 'beans.xml'''. Указывает ли он '' 'bean-discovery-mode =" annotated "' '', если это так, аннотировать классы-производители, по крайней мере, с '' 'ApplicationScoped''' – maress