LINUX.ORG.RU

Почему не работает dependency injection?

 , , , weld


0

1
public interface HubReaderServiceInterface {
    String fetchAllPosts(String url) throws IOException;
}
public class HubReaderService implements HubReaderServiceInterface {
    public String fetchAllPosts(String url) throws IOException {
        ...
    }
}
public class Foo {
    @Inject
    private HubReaderServiceInterface hrService;

    public void fetchToFile(String filePath, String hubUrl) throws IOException {
        String allPosts = hrService.fetchAllPosts(hubUrl);
        ...
    }
}

Почему объект не инжектируется? Аннотация @Inject из javax.inject.Inject. В resources/META-INF/beans.xml:

<beans xmlns="java.sun.com/xml/ns/javaee"

       xmlns:xsi="www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="java.sun.com/xml/ns/javaee java.sun.com/xml/ns/javaee/beans_1_0.xsd">

</beans>

★★★★★

Последнее исправление: f1xmAn (всего исправлений: 1)
Ответ на: комментарий от dizza

С хабра скопировал, там не говорилось о том, что в нем писать. Был приведен пустой пример.

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от dizza

А где можно посмотреть как spring + hibernate + web frontend скрещивают? Т.е, чтобы сразу на примере посмотреть как это все дело используют в продакшене. Скоро предстоит знакомится с этим стеком, хотелось бы подойти во все оружия.

anonymous
()

В каком виде пакуешь? WAR? EAR? Как деплоишь и в какой сервер приложений? Как понял, что не инжектируется?

anonymous
()
Ответ на: комментарий от anonymous

Никак не паковал, запустил прямо из идеи. Такая штука должна работать в обычном java se приложении, вне ejb контейнера, как guice. Бросался NullPointerException при обращении к методам инжектируемого объекта.

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от f1xmAn

Такая штука должна работать в обычном java se приложении, вне ejb контейнера

А кто заинжектирует? То есть кто будет в роли реализации JSR-330?

dizza ★★★★★
()
Ответ на: комментарий от f1xmAn

Чтобы она работала, нужно явным образом поднять контекст в main. Ты его поднимаешь? Если да, то как?

Кто у тебя за провайдера CDI?

Если weld (выбор невелик, хехе), то на офсайте есть дока http://docs.jboss.org/weld/reference/latest/en-US/html_single/#weld-se

anonymous
()
Ответ на: комментарий от GateKeeper

Если guice поднять, то да. Но я не вижут тут жуйса в примере кода ТС-а.

dizza ★★★★★
()
Ответ на: комментарий от dizza

Судя по содержимому beans.xml и тегу weld, ОП хотел JSR-299 aka CDI 1.0. Насколько мне известно, у этого стандарта имплементация одна - Weld (он же reference implementation).

Хотя стоит спросить у ОПа, что он хотел.

Если просто волшебный ёба-инжект, то гуйс со спрингом подойдут. Если полноценный CDI c эвентами, скоупами, провайдерами и прочей мишурой, то только weld.

anonymous
()
Ответ на: комментарий от GateKeeper

Я и не подключаю _тут_ guice. Побился головой о weld, вспомнил о том, что кто-то недавно создавал топик про guice, погуглил и через 3 минуты у меня уже все заработало с ним.

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Судя по содержимому beans.xml и тегу weld, ОП хотел JSR-299 aka CDI 1.0. Насколько мне известно, у этого стандарта имплементация одна - Weld (он же reference implementation).

Из имплементаций ещё есть OpenWebBeans, который в составе TomEE, я бы её не стал списывать со счетов. А ОП, похоже, всё-таки хотел просто ёба-инжект (JSR-330). Хотя, разумеется,

стоит спросить у ОПа, что он хотел.

Алсо была похожая тема про JSR-330-style инжект средствами Guice в чистом JavaSE: Java Dependency Injection (JSR-330) с Google Guice

anonymous
()
Ответ на: комментарий от anonymous

А ОП, похоже, всё-таки хотел просто ёба-инжект (JSR-330)

this

Алсо была похожая тема про JSR-330-style инжект средствами Guice в чистом JavaSE: Java Dependency Injection (JSR-330) с Google Guice

Почему не работает dependency injection? (комментарий)

f1xmAn ★★★★★
() автор топика
Ответ на: комментарий от f1xmAn

Работает, если war деплоится в Java EE 6 сервер приложений (JBoss AS, Glassfish и т.д.). В Java SE тоже заводится (я ссылку давал как). CDI по большей ортогонален EJB.

anonymous
()
Ответ на: комментарий от anonymous

OpenWebBeans

Предпочитаю не связываться с маргинальщиной и другим не советую.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.