由于SearchFactoryIntegrator不在注册表中,因此无法在JBoss 7上查询Infinispan

TL:DR我收到以下错误,我看不出它的原因,索引已启用,SearchFactoryIntegrator在类路径上,需要查看它的所有内容。

此缓存未启用索引。 在注册表中找不到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 cache; 代理是我自己的对象。

当尝试查询缓存时,我从SearchManager searchManager = Search.getSearchManager(cache);行获得以下错误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.(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

缓存是已在JBoss的standalone-ha.xml中配置的默认“集群”缓存的修改版本。

       /tempCacheIndex     

我看到索引是在配置的文件位置中创建的,因此似乎启用布尔解析为true是当前状态的事实表示。

我在JBoss中创建了一个org.infinispan.query模块,它包含以下内容

  • Avro的-1.5.1.jar
  • hibernate公地的注解,4.0.1.Final.jar
  • hibernate的搜索引擎,4.1.1.Final.jar
  • Infinispan的查询,5.1.6.FINAL.jar
  • jackson核心ASL-1.9.2.jar
  • jackson映射器-ASL-1.9.2.jar
  • Lucene的核心 – 3.5.0.jar
  • paranamer-2.3.jar
  • SLF4J-API-1.6.1.jar
  • 活泼的Java-1.0.4.1.jar

以上所有内容都在该模块的module.xml中的resource-roots中定义。 我已经修改了模块org.infinispan以依赖于模块org.infinispan.query

我在jboss-deployment-structure.xml中声明了对这两个模块的依赖关系

有没有人有任何想法为什么会发生这种情况并且可能有解决方案?

注意:这里有一个非常相似的问题,但他最终没有成功,选择了不同的路线。

注意:我从一个干净的JBoss 7.1.1实例开始,因此从Infinispan 5.1.6恢复到5.1.2

根据我的需要,我修改了现有的群集缓存,使其看起来像这样

       /tempCacheIndex    

然后实际上能够查询缓存创建包含以下module.xml中提到的jar的org.infinispan.query模块

                                          

修改org.jboss.as.clustering.infinspan模块xml以包含对新查询模块的依赖性,以及已存在的org.hibernate模块。 因此,将以下内容添加到该文件中。

   

您的应用程序的jboss-deployment-structure.xml需要添加以下依赖项

           

为了对您的对象进行注释以便对它们进行索引和搜索,我建议您在这里查看示例

编辑:进一步说明:要使索引对象实际共享缓存我现在必须

  • 创建一个包含您计划放入缓存的所有类的jar。
  • 确保这些实体不包含任何过于复杂的导入条款,否则您将遇到类加载器问题。
  • 从这个jar创建一个模块,并赋予它对Infinispan.query模块的依赖。
  • 将此模块公开为standalone.xml或domain.xml中的全局模块(这实际上是否需要?),以适当的方式。
  • 找到文件modules / org / jboss / as / clustering / infinispan / main / module.xml
  • 将包含可缓存实体的新模块添加到依赖项列表中