2013-08-17 23 views
3

TL:DR我收到以下錯誤消息,我無法看到它的原因,啓用了索引,並且SearchFactoryIntegrator位於類路徑中需要看到它。由於SearchFactoryIntegrator未在註冊表中,無法查詢JBoss 7上的Infinispan

此緩存未啓用索引。接口 org.hibernate.search.spi.SearchFactoryIntegrator在註冊表

長的版本未發現:

  • JBoss的版本:7.1.1 FINAL
  • Infinispan的版本:5.16(從5.1.2升級JBoss的船隻在試圖解決問題)
  • Java版本:1.7

我試圖建立一個簡單的測試應用程序來運行鍼對Infinispan緩存的查詢。

我正在成功向緩存中添加對象。緩存被定義爲private org.infinispan.Cache<String, Agent> cache;,其中Agent是我自己的對象。

當試圖從線 SearchManager searchManager = Search.getSearchManager(cache);

17:35:43,873 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/SearchableCacheTest].[Faces Servlet]] (http-localhost-127.0.0.1-8080-1) Servlet.service() for servlet Faces Servlet threw exception: java.lang.IllegalArgumentException: Indexing was not enabled on this cache. interface org.hibernate.search.spi.SearchFactoryIntegrator not found in registry 
    at org.infinispan.query.impl.ComponentRegistryUtils.getComponent(ComponentRegistryUtils.java:40) [infinispan-query-5.1.6.FINAL.jar:5.1.6.FINAL] 
    at org.infinispan.query.SearchManagerImpl.<init>(SearchManagerImpl.java:56) [infinispan-query-5.1.6.FINAL.jar:5.1.6.FINAL] 
    at org.infinispan.query.Search.getSearchManager(Search.java:39) [infinispan-query-5.1.6.FINAL.jar:5.1.6.FINAL] 

索引的重要組成部分,查詢緩存我收到以下錯誤並沒有在這個緩存啓用。接口org.hibernate.search.spi.SearchFactoryIntegrator不是在註冊表中找到

在此之前錯誤cache.getCacheConfiguration().indexing().enabled()解析true

緩存是默認的「集羣」緩存的修改版本在standalone-ha.xml已配置的JBoss。

<cache-container name="cluster" aliases="ha-partition" default-cache="default" start="EAGER"> 
    <transport lock-timeout="60000"/> 
    <replicated-cache name="default" mode="SYNC" batching="true" indexing="LOCAL"> 
     <locking isolation="REPEATABLE_READ"/> 
     <store class="org.infinispan.loaders.file.FileCacheStore" preload="true" passivation="false" fetch-state="true" purge="false"> 
      <property name="location"> 
       /tempCacheIndex 
      </property> 
     </store> 
    </replicated-cache> 
</cache-container> 

我看到在配置文件位置在創建索引所以它似乎能布爾解析爲真爲當前狀態的事實表示。

我已經創建了JBoss的一個org.infinispan.query模塊,它包含以下

  • 的Avro-1.5.1.jar
  • 休眠公地的註解,4.0.1.Final.jar
  • 休眠的搜索引擎,4.1.1.Final.jar
  • Infinispan的查詢,5.1.6.FINAL.jar
  • 傑克遜核心ASL-1.9.2.jar
  • 傑克遜映射器-asl-1.9.2。罐子
  • Lucene的核心 - 3.5.0.jar
  • paranamer-2.3.jar
  • SLF4J-API-1.6.1。罐子
  • 活潑-java的1.0.4.1.jar

所有上述的在定義爲資源的根在module.xml該模塊。 我已經修改了module.xml的模塊org.infinispan有模塊的依賴關係org.infinispan.query

我已經宣佈在我的JBoss部署,structure.xml這兩個模塊

沒有人有任何想法的依賴爲什麼這可能會發生並可能有解決方案?

注:有一個非常類似的問題here但他最終不成功,並選擇了不同的路線。

回答

4

注:我開始用乾淨的JBoss 7.1.1實例,因此從Infinispan的5.1.6恢復到5.1.2

我需要我修改了現有羣集緩存,以便它看起來像這樣

<cache-container name="cluster" aliases="ha-partition" 
default-cache="default" start="EAGER"> 
<transport lock-timeout="60000" /> 
<replicated-cache name="default" mode="SYNC" batching="true" 
    indexing="LOCAL"> 
    <locking isolation="REPEATABLE_READ" /> 
    <store class="org.infinispan.loaders.file.FileCacheStore" 
     preload="true" passivation="false" fetch-state="true" purge="false"> 
     <property name="location"> 
      /tempCacheIndex 
     </property> 
    </store> 
</replicated-cache> 

然後真正能夠查詢高速緩存中創建包含以下module.xml提到的罐子org.infinispan.query模塊

<module xmlns="urn:jboss:module:1.1" name="org.infinispan.query"> 
<resources> 
    <resource-root path="avro-1.5.1.jar"/> 
    <resource-root path="hibernate-commons-annotations-4.0.1.Final.jar"/> 
    <resource-root path="hibernate-search-4.1.0.Beta1.jar"/> 
    <resource-root path="hibernate-search-analyzers-4.1.0.Beta1.jar"/> 
    <resource-root path="hibernate-search-engine-4.1.0.Beta1.jar"/> 
    <resource-root path="hibernate-search-orm-4.1.0.Beta1.jar"/> 
    <resource-root path="infinispan-query.jar"/> 
    <resource-root path="jackson-core-asl-1.9.2.jar"/> 
    <resource-root path="jackson-mapper-asl-1.9.2.jar"/> 
    <resource-root path="lucene-analyzers-3.5.0.jar"/> 
    <resource-root path="lucene-core-3.5.0.jar"/> 
    <resource-root path="lucene-grouping-3.5.0.jar"/> 
    <resource-root path="lucene-highlighter-3.5.0.jar"/> 
    <resource-root path="lucene-memory-3.5.0.jar"/> 
    <resource-root path="lucene-misc-3.5.0.jar"/> 
    <resource-root path="lucene-smartcn-3.5.0.jar"/> 
    <resource-root path="lucene-spatial-3.5.0.jar"/> 
    <resource-root path="lucene-spellchecker-3.5.0.jar"/> 
    <resource-root path="lucene-stempel-3.5.0.jar"/> 
    <resource-root path="paranamer-2.3.jar"/> 
    <resource-root path="slf4j-api-1.6.1.jar"/> 
    <resource-root path="snappy-java-1.0.4.1.jar"/> 
    <resource-root path="solr-analysis-extras-3.5.0.jar"/> 
    <resource-root path="solr-commons-csv-3.5.0.jar"/> 
    <resource-root path="solr-core-3.5.0.jar"/> 
    <resource-root path="solr-solrj-3.5.0.jar"/> 
</resources> 

<dependencies> 
    <module name="javax.api"/> 
    <module name="javax.transaction.api"/> 
    <module name="org.hibernate"/> 
    <module name="org.infinispan" services="import" export="true"/> 
    <module name="org.apache.commons.codec"/> 
    <module name="org.apache.commons.io"/> 
    <module name="org.apache.commons.lang"/> 
    <module name="com.google.guava"/> 
    <module name="org.slf4j" export="true"/> 
    <module name="org.jboss.logging"/> 
</dependencies> 

修改org.jboss.as.clustering.infinspan模塊XML,包括新的查詢模塊的依賴關係,而且已存在的org.hibernate模塊。因此,將以下內容添加到該文件。

<module name="org.hibernate" services="import"/> 
<module name="org.infinispan.query" services="import"/> 

您的應用程序的JBoss的部署,structure.xml需要有添加到它

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure> 
    <deployment> 
     <dependencies> 
       <module export="true" name="org.hibernate" services="import"/> 
       <module export="true" name="org.infinispan" services="import"/> 
       <module export="true" name="org.infinispan.query" services="import"/> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

對於註釋你的對象以下依存關係,使他們能夠索引和進行搜索,我建議你看一下樣品here

編輯: 還注意到: 獲得索引對象才真正在緩存我現在不得不

共享
  • 創建一個jar,其中包含您計劃放入緩存的所有類。
  • 確保這些實體不包含任何過於複雜的導入條款,否則您將遇到類加載器問題。
  • 從這個jar中創建一個模塊,並賦予它對Infinispan.query模塊的依賴。
  • 將此模塊公開爲standalone.xml或domain.xml中適合的全局模塊(這實際上是否需要?)。
  • 查找文件的模塊/組織/ JBoss的/因爲/集羣/ Infinispan的/主/ module.xml
  • 包含您的超高速緩存的實體新的模塊添加到依賴性
+0

列表您可能要考慮一下更新到JBoss 7.2.0(或至少自己建立一個7.1.3)... –

+0

@ShadowCreeper 7.2.0使這個更容易,即解決方案?代碼正在發展到現有的基礎架構,我必須向我的老闆和客戶證明應用服務器版本的變化。 –

+0

從理論上講,7.1.3比7.1.1少出錯。而且由於EAP現在在7.2.0上,我會說(再理論上)7.2.0仍然沒有多少錯誤。就讓它變得更容易,我不能說。我可以說7.2.0不包含查詢模塊。然而,我發現在我的戰爭中加入罐子比讓模塊方法起作用要容易得多。包括我的戰爭中的罐子讓我可以使用更新的版本(已經在7.2.0中 - 我不記得它們是否在7.1.3中)。 –