Infinispan/Wildfly: 在命名空间中找不到元素 'string-keyed-jdbc-store' 的解析器

Infinispan/Wildfly: Cannot find a parser for element 'string-keyed-jdbc-store' in namespace

我正在尝试配置一个支持 JDBC 的 Infinispan 缓存,用于在 Wildfly 10/JBoss EAP 7 上存储 Hibernate 搜索索引。我已经安装了 Infinispan 8。1.x Wildfly/JBoss 模块来自 infinispan.org 在我的应用程序服务器中,我终于得到了一个基本的 infinispan.xml 文件与文件持久性一起工作,现在我正在尝试将其更改为使用 JDBC 为了坚持。我的 infinispan.xml 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:infinispan:config:8.1 http://www.infinispan.org/schemas/infinispan-config-8.1.xsd
                        urn:infinispan:config:jdbc:8.0 http://www.infinispan.org/schemas/infinispan-cachestore-jdbc-config-8.0.xsd"
    xmlns="urn:infinispan:config:8.1" xmlns:jdbc="urn:infinispan:config:store:jdbc:8.0">

    <jgroups>
        <stack-file name="default-jgroups-udp" path="default-configs/default-jgroups-udp.xml" />
    </jgroups>


    <cache-container name="HibernateSearch" default-cache="default"
        statistics="false" shutdown-hook="DONT_REGISTER">

        <transport stack="default-jgroups-udp" />

        <jmx duplicate-domains="true" />

        <!-- *************************************** -->
        <!-- Cache to store Lucene's file metadata -->
        <!-- *************************************** -->
        <replicated-cache name="LuceneIndexesMetadata" mode="SYNC"
            remote-timeout="25000">
            <locking striping="false" acquire-timeout="10000"
                concurrency-level="500" write-skew="false" />
            <transaction mode="NONE" />
            <eviction max-entries="-1" strategy="NONE" />
            <expiration max-idle="-1" />
            <persistence passivation="false">
                <file-store preload="true" purge="true"
                    path="${jboss.server.temp.dir}/indexes" />
            </persistence>
            <indexing index="NONE" />
            <state-transfer enabled="true" timeout="480000"
                await-initial-transfer="true" />
        </replicated-cache>

        <!-- **************************** -->
        <!-- Cache to store Lucene data -->
        <!-- **************************** -->
        <replicated-cache name="LuceneIndexesData" mode="SYNC"
            remote-timeout="25000">
            <locking striping="false" acquire-timeout="10000"
                concurrency-level="500" write-skew="false" />
            <transaction mode="NONE" />
            <eviction max-entries="-1" strategy="NONE" />
            <expiration max-idle="-1" />
            <persistence passivation="false">
                <string-keyed-jdbc-store xmlns="urn:infinispan:config:store:jdbc:8.0"
                    fetch-state="false" read-only="false" purge="false">
                    <data-source jndi-url="java:jboss/datasources/InfinispanCacheDS" />
                    <string-keyed-table drop-on-exit="false"
                        create-on-start="true" prefix="ISPN_STRING_TABLE">
                        <id-column name="ID_COLUMN" type="VARCHAR(255)" />
                        <data-column name="DATA_COLUMN" type="BINARY" />
                        <timestamp-column name="TIMESTAMP_COLUMN" type="BIGINT" />
                    </string-keyed-table>
                </string-keyed-jdbc-store>
            </persistence>
            <!-- <persistence passivation="false"> <file-store preload="true" purge="true" 
                path="${jboss.server.temp.dir}/indexes" /> </persistence> -->
            <indexing index="NONE" />
            <state-transfer enabled="true" timeout="480000"
                await-initial-transfer="true" />
        </replicated-cache>

        <!-- ***************************** -->
        <!-- Cache to store Lucene locks -->
        <!-- ***************************** -->
        <replicated-cache name="LuceneIndexesLocking" mode="SYNC"
            remote-timeout="25000">
            <locking striping="false" acquire-timeout="10000"
                concurrency-level="500" write-skew="false" />
            <transaction mode="NONE" />
            <eviction max-entries="-1" strategy="NONE" />
            <expiration max-idle="-1" />
            <persistence passivation="false">
                <file-store preload="true" purge="true"
                    path="${jboss.server.temp.dir}/indexes" />
            </persistence>
            <indexing index="NONE" />
            <state-transfer enabled="true" timeout="480000"
                await-initial-transfer="true" />
        </replicated-cache>
    </cache-container>

</infinispan>

我也在使用以下 jboss-deployment-structure.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <dependencies>

            <!-- Core Java/Java EE Dependencies -->
            <module name="javax.transaction.api" export="true" services="import" />

            <!-- JPA/Hibernate Search Dependencies -->
            <module name="javax.persistence.api" export="true" />

            <module name="org.hibernate.search.engine" export="true"
                services="import" slot="5.5" />
            <module name="org.hibernate.search.orm" export="true"
                services="import" slot="5.5" />

            <module name="org.infinispan.hibernate-search.directory-provider"
                slot="for-hibernatesearch-5.5" export="true" services="import" /><!-- 
                <module name="org.apache.lucene" export="true" services="import" /> <module 
                name="org.infinispan.lucene-directory" slot="ispn-8.1" /> -->

            <module name="org.infinispan.core" slot="ispn-8.1" services="import"
                export="true" />
            <module name="org.infinispan.persistence.jdbc" slot="ispn-8.1"
                services="import" export="true" />
            <module name="org.infinispan.persistence.remote" slot="ispn-8.1"
                services="import" export="true" />

        </dependencies>
    </deployment>
</jboss-deployment-structure>

但是,当我部署我的应用程序时,出现以下异常:

ISPN000327: Cannot find a parser for element 'string-keyed-jdbc-store' in namespace 'urn:infinispan:config:store:jdbc:8.0'. Check that your configuration is up-to date for this version of Infinispan.

如果我将持久性从 JDBC 更改为 "file",一切正常。但是,一旦我输入 JDBC 参数,就会出现解析错误。我确定我正在做一些小而愚蠢的事情来造成这种情况,但我无法终生弄清楚是什么。任何帮助将不胜感激!!

在尝试调查此问题后,我结束了打开错误报告:

问题是我希望 org.infinispan.core 模块依赖于它的扩展,但事实并非如此。我之前提到了一个解决方法,但是编辑模块 XML 文件是不够的,因为没有简单的解决方案能够保持需要隔离的不同模块的隔离。

问题现已解决,请升级到包含修复的 Infinispan 版本 9.0.0.Final,或者获取 Infinispan 8.2.7.Final,因为我也会向后移植此修复。