Могу ли я создать экземпляр именованного компонента без гражданства?

Я перевожу большое приложение на 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

Другие вопросы по тегам