web-dev-qa-db-fra.com

Dépendances non satisfaites pour le type X avec les qualificatifs @Default

J'essaie d'injecter un objet d'un type donné (Greeter) sur un EJB fonctionnant dans Wildfly 8.2. Cependant, le déploiement échoue toujours avec le message

Unsatisfied dependencies for type Greeter with qualifiers @Default

J'ai essayé d'annoter à la fois le GreeterImpl et le point d'injection avec @Default mais cela n'a pas fonctionné non plus. Est-ce que j'ai râté quelque chose?

Mon interface Greeter:

public interface Greeter {
    public void sayHi();
}

Ma classe GreeterImpl (la seule qui implémente Greeter):

public class GreeterImpl implements Greeter {
    private static final Logger LOGGER = LoggerFactory.getLogger(GreeterImpl.class);

    @Override
    public void sayHi() {
        LOGGER.info("Hi!");
    }
}

Mon ScheduledGreeter EJB:

@Stateless
public class ScheduledGreeter {
    @Inject
    private Greeter greeter;

    @Schedule(second = "*/15", minute = "*", hour = "*")
    public void sayHi() {
        greeter.sayHi();
    }
}

Suis-je en train de manquer quelque chose à propos de CDI? Ai-je besoin d'un beans.xml à META-INF pour que cela fonctionne?

Edit: Je déploie ceci en tant que war sur Wildfly, si cela est important.

15
Martin

Dans Java EE 7, l'analyse par défaut des fichiers JAR/WAR est annotated, ce qui signifie que si vous n'avez pas de beans.xml qui spécifie le mode de scan, il sera par défaut un scan basé sur des annotations.

Votre classe, GreeterImpl n'a pas de bean définissant des annotations dessus - pas de portée en particulier. Vous pouvez remplacer cela en ajoutant un beans.xml ou en ajoutant @Dependent (ou autre étendue) à votre GreeterImpl

28
John Ament