Моя проблема отличается как от WELD-001408 Неудовлетворенные зависимости при внедрении EntityManager, так и WELD-001408 Неудовлетворенные зависимости. В то время как эти проблемы связаны с попыткой внедрить управляемый компонент в EJB без сохранения состояния, я пытаюсь сделать обратное.
Я получаю «Неудовлетворенные зависимости» при попытке внедрить интерфейсный компонент @Stateless @Local в веб-управляемый компонент. Я создаю EAR с различными модулями EJB и веб-модулем, используя Glassfish 4 build 89 на JDK 8. Ниже приведены подробности ошибки и конфигурации проекта.
Во-первых, вот ошибка:
SEVERE: Exception while loading the app
SEVERE: Undeployment failed for context /platform-app
SEVERE: Exception while loading the app : CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [SessionSettingsBeanLocal] with qualifiers [@MyClient] at injection point [[BackedAnnotatedField] @Inject @MyClient private com.comp.jsf.dropdown.Settings.settingsBean]
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [SessionSettingsBeanLocal] with qualifiers [@MyClient] at injection point [[BackedAnnotatedField] @Inject @MyClient private com.comp.jsf.dropdown.Settings.settingsBean]
Пользовательский квалификатор (в проекте библиотеки):
@Documented
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
public @interface MyClient
Интерфейс EJB (в проекте библиотеки):
@Local
public interface SessionSettingsBeanLocal
Внедрение EJB (в проекте модуля EJB):
@Stateless
@MyClient
public class SessionSettingsBean implements SessionSettingsBeanLocal
Управляемый компонент (в веб-проекте — используется для JSF):
@Named
@javax.faces.view.ViewScoped
public class Settings implements Serializable {
@Inject
@MyClient
private SessionSettingsBeanLocal settingsBean;
Наконец, все мои файлы beans.xml (модули EJB, сеть) выглядят следующим образом. Библиотеки, содержащие интерфейс и квалификатор, не содержат beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated">
</beans>
Компонент @Stateless должен зарегистрироваться, но не найден.