& ldquo; Неудовлетворенные зависимости & rdquo; с UnsatisfiedResolutionException при попытке вставить EJB в другой компонент

Я создаю чат Comet для своего приложения, и когда я получаю сообщение от другого пользователя, я использую:

if(new_message){
    if(!document.hasFocus()){
        audio.play();
        document.title="Have new messages";
    }
    else{
        audio.stop();
        document.title="Application Name";
    } 
}
2
задан Scott Kurz 8 March 2019 в 13:35
поделиться

1 ответ

Проблема в том, что с MyTask в качестве EJB-компонента, реализующего Callable , вы удалили сам класс MyTask из «типа бина» этого бина Это означает, что он не может быть введен в «112» «клиента», согласно правилам в спецификации CDI 2.0 :

18.2.2. Типы компонентов сессионного компонента

Неограниченный набор типов компонентов для сессионного компонента содержит все локальные интерфейсы компонента и их суперинтерфейсы. Если сессионный компонент имеет представление без интерфейса, неограниченный набор типов компонентов содержит класс компонента и все суперклассы. Кроме того, java.lang.Object является типом компонента каждого сессионного компонента.

Вот почему Weld не находит действительный bean-компонент MyTask , чтобы удовлетворить внедрение в ваш клиент TestBean .

Вы можете дать MyTask EJB представление без интерфейса, добавив аннотацию @LocalBean, например:

@Stateless
@LocalBean
public class MyTask implements Callable<String> {

Или вы можете удалить implements Callable и рефакторинг например:

public class MyTask {

    @Inject
    MyBean myBean;

    MyCallable callable = new MyCallable();

    public Callable getCallable() {
        return callable;
    }

    private class MyCallable implements Callable<String> {
        @Override
        public String call() throws Exception {

            System.out.println("MyTask called");
            myBean.print();
            return "Task called";
        }
    }
}    

public class TestBean {

    // ...

    MyTask task = myTaskInstance.get(); 
    tasks.add(task.getCallable())

    // ...
}

См. здесь для быстрого ознакомления с представлением без интерфейса, а также этот пост для дальнейшего обсуждения.

0
ответ дан Scott Kurz 8 March 2019 в 13:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: