EJB без сохранения состояния внедряет интерфейсный сбой
Wildfly 8.2.0
у меня есть Stateless
EJB и интерфейс.
@Local
@Stateless
public class Bean implements IBean{
...
}
@Local
public interface IBean {
...
}
Но я получаю WELD ошибку. Если Бин не реализует интерфейс, ошибок нет. Согласно /questions/16908719/mozhet-li-ejb-komponent-realizovyivat-neskolko-interfejsov/16908735#16908735 и https://blogs.oracle.com/arungupta/entry/what_s_new_in_ejb не должно быть ошибок.
Ошибка:
WELD-001408: Unsatisfied dependencies for type Bean with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private mypackage.anotherBean.bean
Обновление: я перепробовал все возможные комбинации с Local
но это не помогает Только если интерфейс удален, ошибки нет.
@Stateless
public class Bean implements IBean{
...
}
@Local
public interface IBean {
...
}
//*****************************
@Stateless
public class Bean implements IBean{
...
}
public interface IBean {
...
}
//************************************
@Local
@Stateless
public class Bean implements IBean{
...
}
public interface IBean {
...
}
2 ответа
Когда вы хотите внедрить компонент EJB (используя @EJB
) или CDI (используя @Inject
) контейнер вы объявляете переменную с типом интерфейса. Конкретная реализация заявленного интерфейса обнаруживается контейнером при развертывании приложения. В вашем примере проблема не в аннотациях, а в введении объявленного типа (Bean
вместо IBean
).
Вы должны удалить @Local
из бобов.
@Stateless
public class Bean implements IBean{
...
}
Поскольку вы определяете 2 возможных локальных WELD, не знаете, какой из них использовать.
Документация оракула показывает это тоже с @Remote
интерфейс:
@Remote
public interface Foo { . . . }
@Stateless
public class Bean implements Foo, Bar {
. . .
}