внедрить кеш infinispan в wildfly 8.0.0.Final

Я пытаюсь использовать infinispan (6.0) из своего приложения, развернутого в wildfly 8.0.0.Final, в автономной конфигурации (jdk 1.7), но у меня есть некоторые проблемы с внедрением. Начиная с этот пост и выполняя поиск в Google, у меня возникла следующая ситуация:

В автономном.xml

        <subsystem xmlns="urn:jboss:domain:infinispan:2.0">
            ...
            <cache-container name="my-cache" default-cache="my-cache-default">
                <local-cache name="my-cache-default">
                </local-cache>
            </cache-container>
        </subsystem>

А также

public class CacheManager {

    @Resource(lookup="java:jboss/infinispan/container/my-cache")
    private EmbeddedCacheManager myCacheManager;

    public Cache<String, String> getCache() {
        return myCacheManager.getCache();
    }
}

Наконец, в pom.xml

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>${version.ejb.plugin}</version>
            <configuration>
                ...
                <archive>
                    <manifestEntries>
                        <Dependencies>org.infinispan.commons export</Dependencies>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

который производит в моем MANIFEST.MF

Dependencies: org.infinispan.commons export

Когда я использую метод getCache(), у меня возникает исключение java.lang.NullPointerException, потому что атрибут myCacheManager имеет значение null. Глядя на вкладку JNDI Bindings в административной консоли, я заметил, что, хотя есть много других ресурсов, определенных мной, таких как источники данных, нет ресурса, соответствующего «java:jboss/infinispan/container/my-cache» (который я должен был путь по умолчанию). Я также попытался указать имя jndi в определении контейнера кеша с теми же результатами.

Где я не прав? заранее спасибо


person codadilupo    schedule 04.08.2014    source источник
comment
Пробовали ли вы быстрый запуск JBoss AS на github.com/infinispan/infinispan- быстрый запуск/дерево/мастер/ ? Это должно работать как есть на Wildfly 8. Может быть, вы хотите попробовать это, а затем сначала посмотреть, работает ли это для вас?   -  person Galder Zamarreño    schedule 07.08.2014
comment
@Galder, это работает ... Я внес некоторые изменения в их код и заметил, что в @PostConstruct Resource Singleton поле контейнера равно null, как и я. В контроллере bean-кэш правильно вводится. Однако мой сценарий отличается. Я не использую jsf. Мне нужен одноэлементный объект, который глобально содержит кеш. Может мой подход неверен?   -  person codadilupo    schedule 08.08.2014
comment
Я не эксперт в этой области, но, насколько мне известно, инъекция работает с кодом, который каким-то образом обрабатывается сервером, поэтому это должен быть код CDI, JSF, EJB... и т.д. Внедрение не работает в стандартных классах Java, развернутых на AS, которые не используют ни один из этих компонентов.   -  person Galder Zamarreño    schedule 11.08.2014
comment
@Galder Думаю, ты прав. Я попытался внедрить @Resource в аннотированный класс @Singleton, и он работает. К сожалению, это немного неудобно для меня, потому что подразумевает, что я должен использовать свой CacheManager как EJB, поэтому вводить другой EJB и т. д. Боюсь, это рекурсивная проблема. Я оценю, использовать ли infinispan классическим способом. Есть ли у вас другие предложения?   -  person codadilupo    schedule 20.08.2014
comment
Это большая проблема CDI IMO. Идея хоть и хороша, но слишком тесно связана со всем багажом ЕЕ :|. У меня есть другие предложения, но все зависит от вашей среды, ваших требований... и т.д.   -  person Galder Zamarreño    schedule 25.08.2014


Ответы (1)


Использовать

@Resource(lookup="java:jboss/infinispan/container/my-cache") private CacheContainer container;

вместо ниже

@Resource(lookup="java:jboss/infinispan/container/my-cache") private EmbeddedCacheManager myCacheManager;

Это даст вам контейнер кеша, а также добавит экспорт зависимостей org.infinispan в META-INF.

person Aditi    schedule 04.11.2015