Я хочу сделать что-то вроде этого:
@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 Bean Классы говорят:
Класс должен иметь открытый конструктор, который не принимает никаких параметров.
Это похоже на то, что для EJB не допускается инъекция конструктора.
НО спецификация CDI говорит в начале раздела 3, что сеанс Beans поддерживается CDI. В разделе 3.2 подробно рассказывается о CDI и EJB, но никогда не упоминает ничего о том, что инъекция конструктора не работает. Это заставляет меня думать, что это должно быть разрешено.
Итак, позволяют ли спецификации разрешать конструкцию конструктора CDI для EJB или нет?