Для тех, кто не может позволить себе сменить слух на войну, я нашел следующий обходной путь:
- Создание EJB на войне
- Внедрение этого EJB с помощьюEJB-компоненты из модуля EJB
- Добавить методы производителя CDI
- Квалифицировать
@Inject
с квалификатором для этих методов производителя:
Код:
// This bean is defined in the WEB module
@Stateless
public class EJBFactory {
@EJB
protected UserDAO userDAO;
// ~X other EJBs injected here
@Produces @EJBBean
public UserDAO getUserDAO() {
return userDAO;
}
// ~X other producer methods here
}
Теперь EJB из любой точки EAR можно вводить с помощью:
// This bean is also defined in the web module
@RequestScoped
public class MyBean {
@Inject @EJBBean
private UserDAO userDAO; // injection works
public void test() {
userDao.getByID(...); // works
}
}
EJBBean - это простая стандартная аннотация квалификатора.Для полноты вот это:
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface EJBBean {
}