簡體   English   中英

在Seam 2.3中配置Infinispan CacheProvider

[英]Configuring Infinispan CacheProvider in Seam 2.3

我試圖遷移我的Seam 2.3應用程序以使用Infinispan在JBoss AS7中進行緩存。 我看過Seam 2.3發行版中的Blog示例,並將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項目的源目錄中。 那是正確的位置嗎?

對於其他遇到此問題的人,我終於准備好了所有必要的零件。 這就是我要做的...

  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等)。

我遇到了同樣的問題: 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與某些依賴關系引起的和Maven。

但是經過大量研究,我從完整的堆棧跟蹤中發現了根本原因是java.io.IOException,而不是我收到的“ com.ctc.wstx.exc.WstxIOException:流已關閉”錯誤消息(WAR正在部署成功,但未設置緩存)。 查看wstx-asl.jar的源代碼,發現它接收到的BufferedInputReader為null。 該提示和Shadowman的上述回答提示我檢查初始化Cache時Infinispan CacheManager是否正確獲取了配置文件。

它沒有在我的類路徑中獲取Infinispan配置文件存在問題,因此必須將其放在/WEB-INF/infinispan.xml中並且可以正常工作!

因此,盡管我們收到的錯誤是關於WoodStox的,但是請檢查程序是否正確找到了Infinispan緩存配置文件(或任何其他文件)(無論是作為資源路徑還是物理路徑)。

希望這可以幫助其他有類似問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM