Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
337 views
in Technique[技术] by (71.8m points)

cdi - "Unsatisfied Dependencies" - Different Stateless Beans with same Interface

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...