0
votes

I have three @Stateless Beans with the same interface.

public interface ReportService
{
    List<String> determineRelevantData();

    Report generate(ReportRequest request, Locale locale) throws ServiceFailedException;
}

I inject the beans in one facade bean:

@Stateless
public class ReportServiceFacadeBean implements ReportServiceFacadeLocal
{
    @Inject
    private FirstReportBean firstReport;

    @Inject
    private SecondReportBean secondReport;

    @Inject
    private ThirdReportBean thirdReport;

    [...]
}

When I deploy it this way, I get:

WELD-001408: Unsatisfied dependencies for type SecondReportBean with qualifiers @Default at injection point [BackedAnnotatedField] @Inject private ReportServiceFacadeBean.secondReport

When I uncomment the interface in the implementing beans the server starts up without any error. What am I missing here?

1
Unless I miss my guess, the error message is incomplete. Are there any additional lines following, esp. talking about ambiguos dependencies or the like?mtj

1 Answers

1
votes

EJB beans have a bit different bean types, which are then used for injection, compared to CDI beans. Namely you will want to inject EJB beans by their client-visible parts, meaning interfaces (unless you have no-interface view).

This is fully backed by spec, here is one chapter from CDI spec that mentions it (with links to other).

In your case you will have to introduce qualifiers and then inject the beans like:

@Inject
@SomeQualifier
ReportService firstService;