Внедрение поля службы RESTful Java EE

У меня возникла проблема с развертыванием приложения в wildfly, которое содержит службу RESTful, которая использует @Inject для внедрения DAO.

Это сообщение об ошибке в журналах при попытке развернуть приложение в wildfly:

Deploying /home/john/codebase/servers/wildfly-8.2.0.Final/standalone/deployments/HouseCompetitionDashboard-1.0-SNAPSHOT.war
{"JBAS014671: Failed services" => {"jboss.deployment.unit.\"HouseCompetitionDashboard-1.0-SNAPSHOT.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"HouseCompetitionDashboard-1.0-SNAPSHOT.war\".WeldStartService: Failed to start service
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type DAO with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private org.jmcdonnell.dashboard.services.PlayerService.dao
  at org.jmcdonnell.dashboard.services.PlayerService.dao(PlayerService.java:0)
"}}

Классы выглядят так:

@Named
public class DAO {
}



@Stateless
@Path("player")
public class PlayerService {

    @Inject
    private DAO dao;

    @POST
    @Consumes({"application/xml", "application/json"})
    public void create(Player entity) {
        //dao.create(entity);
    }
}

Позже класс DAO будет содержать Entity Manager, но на данный момент его нет, так как я хотел бы, по крайней мере, чтобы инъекция работала. У кого-нибудь есть идеи?


person John McDonnell    schedule 10.01.2015    source источник


Ответы (1)


@Named аннотация ожидает какое-то имя и в имени не задано - оно генерирует имя по умолчанию, но имя генерируется в соответствии с именем верблюжьего регистра bean. Вам нужно попробовать указать имя или использовать верблюжий регистр для имени компонента.

person msangel    schedule 10.01.2015
comment
Спасибо, не знал этого о требовании именованной аннотации/верблюжьего случая. - person John McDonnell; 11.01.2015
comment
Это неправда. Если бы мне пришлось угадывать, вам на самом деле не хватает области действия (при условии, что у вас нет определенного beans.xml или ваш beans.xml говорит annotated для вашего типа bean-компонента) - person John Ament; 11.01.2015
comment
Это не должно быть правдой. Но в некоторых случаях это так. Я бы сказал, что это глючная реализация, потому что в некоторых случаях я сохраняю подобную проблему. - person msangel; 11.01.2015
comment
На самом деле нет смысла использовать @Named, если вы не используете EL для ссылки на свои bean-компоненты. - person John Ament; 11.01.2015