Я хочу сделать что-то вроде этого:
@Stateless
public class GreeterEjb {
private final Greeter greeter;
@Inject
public GreeterEjb(Greeter greeter) {
this.greeter = greeter;
}
public String greet() {
return greeter.greet();
}
}
Я пробовал это с Glassfish 3.1.1 и JBoss 7.0.2 со смешанными результатами. В одних обстоятельствах это работает, в других - нет. См. эту ветку на форуме Glassfisch , если вас интересуют подробности.
Спецификация EJB 3.1 , раздел 4.9.2 Классы компонентов гласит:
Класс должен иметь открытый конструктор, не принимающий параметров.
Похоже, внедрение конструктора не разрешено для EJB.
НО спецификация CDI говорит в начале раздела 3, что сессионные компоненты поддерживаются CDI. Затем в разделе 3.2 подробно рассказывается о CDI и EJB, но ничего не упоминается о том, что внедрение конструктора не работает. Это заставляет меня думать, что это должно быть разрешено.
Итак, допускают ли спецификации внедрение конструктора CDI для EJB-компонентов или нет?