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.
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