Как мне @Inject CDI @ApplicationScoped bean-компонент в @RequestScoped JAX-RS bean-компонент?

Я добавил аннотацию @ApplicationScoped CDI к простому компоненту:

@ApplicationScoped
public class History {

Затем попытался @Inject сделать это в компонент JAX-RS (resteasy):

@RequestScoped
@Path("/history")
public class HistoryAPI {

@Inject
private History history;

Но история остается нулевой. У меня есть файл beans.xml в WEB-INF. Я пробовал множество вариаций на эту тему, но хотя сервер приложений (Wildfly) подтверждает, что он начинается с CDI, я не могу заставить инъекцию работать. Любые идеи, что мне не хватает? Спасибо.

ETA: я пробовал пустой beans.xml и пару вариантов, последний из которых:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:weld="http://jboss.org/schema/weld/beans"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
                           http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
</beans>

person rich    schedule 22.11.2013    source источник
comment
Каково содержимое файла beans.xml?   -  person rubenlop88    schedule 22.11.2013
comment
Я пробовал пустой и пару других, включая тот, что в обновленном ответе.   -  person rich    schedule 22.11.2013
comment
Пробовали ли вы приведенный здесь пример -› docs.oracle.com /javaee/7/tutorial/doc/cdi-adv001.htm ? с номером версии 1.1 и атрибутом bean-discovery-mode, установленным на все   -  person rubenlop88    schedule 22.11.2013
comment
‹beans ..... версия=1.1 bean-discovery-mode=all›   -  person rubenlop88    schedule 22.11.2013
comment
У меня не было, но это тоже не сработало.   -  person rich    schedule 22.11.2013
comment
На каком контейнере вы работаете? Версия и производитель.   -  person John Ament    schedule 23.11.2013
comment
муха. Последняя версия, 8beta1.   -  person rich    schedule 23.11.2013
comment
может быть, конфигурация: какое приложение @ApplicationPath приводит к полному пути к приложению?   -  person Oleksii Kyslytsyn    schedule 10.10.2015


Ответы (1)


странно... я думаю, ваш код должен работать...

я создал пример для этого вопроса на GitHub (проверено с помощью Wildly 8.2.0.Final и Glassfish 4.1): https://github.com/StefanHeimberg/stackoverflow-20150993

у меня все это делается без web.xml и без beans.xml

проверено с:

3 раза нажмите F5 в браузере на URL-адрес http://localhost:8080/mavenproject1-1.0-SNAPSHOT/webresources/history

вывод:

20:32:12,955 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-2) HistoryAPI.init() called
20:32:12,956 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-2) HistoryAPI.doSomething() called
20:32:12,956 SEVERE [com.mycompany.mavenproject1.History] (default task-2)  ===> History.init() called
20:32:12,956 SEVERE [com.mycompany.mavenproject1.History] (default task-2)  ===> History.doSomething() called 
20:36:09,830 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-3) HistoryAPI.init() called
20:36:09,831 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-3) HistoryAPI.doSomething() called
20:36:09,831 SEVERE [com.mycompany.mavenproject1.History] (default task-3)  ===> History.doSomething() called 
20:36:10,549 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-4) HistoryAPI.init() called
20:36:10,549 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-4) HistoryAPI.doSomething() called
20:36:10,549 SEVERE [com.mycompany.mavenproject1.History] (default task-4)  ===> History.doSomething() called 
person StefanHeimberg    schedule 22.01.2015