Настройка Infinispan CacheProvider в Seam 2.3
Я пытаюсь перенести приложение Seam 2.3 для использования Infinispan для кэширования в JBoss AS7. Я рассмотрел пример блога в дистрибутиве Seam 2.3 и скопировал файлы jGroupsConfig.xml и infinispan.xml в исходный путь моего веб-приложения и изменил мой component.xml, чтобы указать подходящего поставщика кэша. Тем не менее, когда я запускаю что-то вроде этого...
public class MyClass {
...
@In
CacheProvider cacheProvider;
...
public void myMethod() {
this.cacheProvider.get("abcd");
}
...
}
... Я получаю сообщение о том, что кэш Infinispan не может быть запущен. Больше нет ошибок, кроме того, что кажется синтаксическим анализатором, сообщающим об IOException. Все, что я вижу, это:
com.ctc.wstx.exc.WstxIOException: Stream closed
Я включил регистрацию, но до сих пор не вижу ничего полезного. Что еще мне нужно сделать, чтобы кеширование Infinispan работало в моем приложении? Нужно ли что-либо создавать вручную в консоли JBoss AS7? Мои файлы конфигурации кэша находятся в исходном каталоге моего веб-проекта. Это правильное место?
2 ответа
Для всех, у кого есть эта проблема, я наконец-то получил все необходимые части на месте. Вот что я должен был сделать...
НЕ объявляйте модуль Infinispan в файле структуры развертывания JBoss. Вместо этого используйте JAR, которые являются частью дистрибутива Seam 2.3
Само исключение WstxIOException связано с тем, что он не смог найти мой файл конфигурации infinispan.xml. Поместите это в исходный каталог Java, чтобы он стал прямой частью вашего classpath, а не в ваших каталогах META-INF или WEB-INF (если вы не объявите это как таковой в вашем файле component.xml)
Убедитесь, что в вашем EAR есть все файлы JAR для разбора XML (stax и т. Д.) Из дистрибутива Seam 2.3.
У меня была такая же проблема: com.ctc.wstx.exc.WstxIOException: Stream closed
Но я использую Maven 3.2, JBoss WildFly 8.2 (со встроенным Infinispan Cache v7.1.1.Final), Axis2 в моем проекте. Так как я использовал Axis2 и мог выяснить, что ошибка исходит от WoodStox (точнее, wstx-asl.3.2.8.jar), который используется Axis2, я изначально думал, что это из-за некоторых проблем с зависимостью с Axis2, WildFly и мавен.
Но после долгих исследований, я выяснил из полной трассировки стека, что основной причиной была java.io.IOException, а не собственно сообщение об ошибке "com.ctc.wstx.exc.WstxIOException: Stream closed" (развертывание WAR успешно, но кэш не был установлен). Посмотрел исходный код для wstx-asl.jar и обнаружил, что он получает BufferedInputReader как ноль. Этот намек и приведенный выше ответ Shadowman побудили меня проверить, правильно ли Infinispan CacheManager получал файл конфигурации при инициализации Cache.
Из-за этого не удалось получить файл конфигурации Infinispan в моем пути к классам, поэтому пришлось поместить его в /WEB-INF/infinispan.xml, и это сработало!
Поэтому, хотя мы получаем ошибку для WoodStox, проверьте, правильно ли ваша программа находит файл конфигурации кэша Infinispan (или любой другой файл) (в качестве ресурса или физического пути).
Надеюсь, что это помогает кому-либо еще с подобной проблемой.