1

我正在尝试迁移我的 Seam 2.3 应用程序以使用 Infinispan 在 JBoss AS7 中进行缓存。我查看了 Seam 2.3 发行版中的博客示例,并将 jGroupsConfig.xml 和 infinispan.xml 文件复制到我的 Web 应用程序的源路径中,并修改了我的 components.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 控制台中手动创建任何东西吗?我的缓存配置文件位于我的 Web 项目的源目录中。那是正确的位置吗?

4

2 回答 2

0

对于其他遇到此问题的人,我终于准备好了所有必要的部分。这就是我必须做的...

  1. 不要在 JBoss 部署结构文件中声明 Infinispan 模块。相反,使用 Seam 2.3 发行版中的 JAR

  2. WstxIOException 本身是由于它无法找到我的 infinispan.xml 配置文件。将它放在 Java 源目录中,使其成为类路径的直接部分,而不是在 META-INF 或 WEB-INF 目录中(除非您在 components.xml 文件中声明它)

  3. 确保您的 EAR 中拥有来自 Seam 2.3 发行版的所有 XML 解析 JAR(stax 等)

于 2013-05-21T13:57:53.700 回答
0

我遇到了同样的问题:com.ctc.wstx.exc.WstxIOException: Stream closed

但我在我的项目中使用 Maven 3.2、JBoss WildFly 8.2(带有嵌入式 Infinispan Cache v7.1.1.Final)、Axis2。由于我使用的是 Axis2,并且可以确定错误来自 Axis2 使用的 WoodStox(具体为 wstx-asl.3.2.8.jar),我最初认为这是因为 Axis2、WildFly 的一些依赖性问题和马文。

但是经过大量研究后,我从完整的堆栈跟踪中发现根本原因是 java.io.IOException 而不是我收到的“com.ctc.wstx.exc.WstxIOException: Stream closed”错误消息(正在部署WAR成功,但未设置缓存)。查看 wstx-asl.jar 的源代码,发现它接收的 BufferedInputReader 为 null。该提示和 Shadowman 的上述回答提示我在初始化缓存时检查 Infinispan CacheManager 是否正确获取配置文件。

它没有在我的类路径中获取 Infinispan 配置文件存在问题,因此必须将其放置在 /WEB-INF/infinispan.xml 中并且它有效!

因此,尽管我们收到的错误是针对 WoodStox 的,但请检查您的程序是否正确找到了 Infinispan 缓存配置文件(或任何其他文件)(无论是作为资源还是物理路径)。

希望这可以帮助其他有类似问题的人。

于 2015-06-19T15:14:07.470 回答