Могу ли я создать экземпляр именованного компонента без гражданства?
Я перевожу большое приложение на CDI с помощью JPA. Прежде чем я смогу изменить весь код, мне нужно знать, будет ли работать следующий шаблон. Это позволит мне частично перенести приложение.
Мой управляемый боб:
@Named
@Stateless
public class LanguageBoundary implements Serializable {
@Inject
LanguageService languageService;
@Inject
CrudService crudService;
public LanguageEntity findById(Long id) {
return crudService.find(LanguageEntity.class, id);
}
...
Могу ли я использовать в любом другом классе:
// Methods: DAO - Used by original deprecated parent wrapper class
public LanguageEntity findByIdImpl(Id id) {
LanguageBoundary lb = new LanguageBoundary();
return lb.findById(id.getValue());
}
Спасибо за совет.
2 ответа
Чтобы сделать что-то подобное, вам нужно получить ссылку на объект. Вы можете сделать это с помощью CDI. В CDI 1.1 вы можете получить служебный класс CDI. В CDI 1.0 вы можете получить ссылку на менеджер компонентов, используя JNDI, чтобы сделать эквивалент. Посмотрите на этот код для справки: https://github.com/apache/deltaspike/blob/master/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java#L98
Мне любопытно, почему вы используете @Named
, Планируете ли вы ссылаться на EJB непосредственно в вашем интерфейсе?
Если вы создадите его, контейнер не будет управляться bean-компонентом, так что это, вероятно, не то, что вы хотите. Вместо этого вы должны ввести его @Inject