Unsatisfied dependencies for type X with qualifiers @Default

Martin picture Martin · Dec 30, 2014 · Viewed 35.9k times · Source

I'm trying to inject an object of a given type (Greeter) on an EJB running inside Wildfly 8.2. However, the deployment always fails with the message

Unsatisfied dependencies for type Greeter with qualifiers @Default

I tried to annotate both the GreeterImpl and the injection point with @Default but that didn't also work. Am I missing something here?

My Greeter interface:

public interface Greeter {
    public void sayHi();
}

My GreeterImpl class (the only one that implements Greeter):

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

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

My ScheduledGreeter EJB:

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

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

Am I missing something about CDI here? Do I need a beans.xml at META-INF for this to work?

Edit: I'm deploying this as war to Wildfly, if that even matters.

Answer

John Ament picture John Ament · Dec 30, 2014

In Java EE 7, the default scanning for JARs/WARs is annotated, meaning that if you don't have a beans.xml that specifies the scan mode, it will default to annotated based scanning.

Your class, GreeterImpl has no bean defining annotations on it - no scopes particularly. You can override this by adding a beans.xml or by adding @Dependent (or other scope) to your GreeterImpl