3

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<String, Agent> 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.<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>

構成されたファイルの場所にインデックスが作成されていることがわかります。有効なブール値を true に解決することは、現在の状態を事実に基づいて表現しているようです。

JBoss で org.infinispan.query モジュールを作成しました。これには以下が含まれます

  • avro-1.5.1.jar
  • hibernate-commons-annotations-4.0.1.Final.jar
  • hibernate-search-engine-4.1.1.Final.jar
  • infinispan-query-5.1.6.FINAL.jar
  • jackson-core-asl-1.9.2.jar
  • jackson-mapper-asl-1.9.2.jar
  • ルセンコア-3.5.0.jar
  • paranamer-2.3.jar
  • slf4j-api-1.6.1.jar
  • snappy-java-1.0.4.1.jar

上記はすべて、そのモジュールの module.xml で resource-roots として定義されています。モジュールのmodule.xmlを変更して、モジュールorg.infinispanに依存するようにしましたorg.infinispan.query

jboss-deployment-structure.xml でこれら両方のモジュールへの依存関係を宣言しました

なぜこれが起こっているのか、そしておそらく解決策を持っている人はいますか?

注:ここに非常によく似た質問がありますが、彼は最終的に失敗し、別のルートを選択しました。

4

1 に答える 1

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 に記載されている jar を含む 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>

モジュール xml を変更しorg.jboss.as.clustering.infinspanて、新しいクエリ モジュールへの依存関係だけでなく、org.hibernate既に存在するモジュールへの依存関係も含めます。そのため、そのファイルに次を追加します。

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

アプリの jboss-deployment-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>

オブジェクトに注釈を付けてインデックスを作成して検索できるようにするために、こちらのサンプルをご覧になることをお勧めします

編集: さらに注意: インデックス付きオブジェクトをキャッシュ上で実際に共有するには、次の作業を行う必要がありました

  • キャッシュに入れる予定のすべてのクラスを含む jar を作成します。
  • これらのエンティティには、インポートに関して複雑すぎるものが含まれていないことを確認してください。そうしないと、クラス ローダーの問題が発生します。
  • この jar からモジュールを作成し、Infinispan.query モジュールに依存させます。
  • このモジュールを、standalone.xml または domain.xml の適切な方でグローバル モジュールとして公開します (これは実際に必要ですか?)。
  • ファイル modules/org/jboss/as/clustering/infinispan/main/module.xml を見つけます
  • キャッシュ可能なエンティティを含む新しいモジュールを依存関係のリストに追加します
于 2013-08-19T15:30:35.850 に答える