Индексы поиска Hibernate — каталог и база данных Infinispan?

Я пытаюсь настроить Hibernate Search для использования Infinispan в качестве поставщика каталогов, а также сохранить индексы в базе данных SQL для возможностей кластеризации. Я считаю, что все настроил правильно, однако я не вижу, чтобы таблицы SQL правильно создавались для Infinispan. Я не вижу никаких ошибок или сообщений в журналах, указывающих на то, что конфигурация неверна, поэтому я немного застрял.

Соответствующая часть моего файла persistence.xml выглядит так:

    <!-- Hibernate Search properties - Infinispan -->
    <property name="hibernate.search.infinispan.cachemanager_jndiname"
        value="java:jboss/infinispan/container/hibernateSearch" />
    <property name="hibernate.search.default.directory_provider"
        value="infinispan" />
    <property name="hibernate.search.infinispan.chunk_size"
        value="300000000" />
    <property name="hibernate.search.reader.strategy" value="shared" />
    <property name="hibernate.search.worker.execution" value="sync" />
    <property name="hibernate.search.jmx_enabled" value="true" />

В моем файле standalone-full.xml в JBoss EAP 6.2 есть следующее:

    <cache-container name="hibernateSearch" default-cache="LuceneIndexesData" jndi-name="java:jboss/infinispan/hibernateSearch">
        <transport lock-timeout="60000"/>
        <replicated-cache name="LuceneIndexesMetadata" mode="SYNC"  >
            <binary-keyed-jdbc-store datasource="java:jboss/datasources/PicketLinkDatasource"
                      passivation="false" shared="true" purge="false">
                <property name="createTableOnStart" >true</property>
                <binary-keyed-table>
                    <id-column name="ID_COLUMN" type="VARCHAR(255)" />
                    <data-column name="DATUM" type="BLOB"/>
                </binary-keyed-table>
            </binary-keyed-jdbc-store>
        </replicated-cache>
        <replicated-cache name="LuceneIndexesData" mode="SYNC"  >
            <binary-keyed-jdbc-store datasource="java:jboss/datasources/PicketLinkDatasource"
                      passivation="false" shared="true" purge="false">
                <property name="createTableOnStart" >true</property>
                <binary-keyed-table>
                    <id-column name="ID_COLUMN" type="VARCHAR(255)" />
                    <data-column name="DATUM" type="BLOB"/>
                </binary-keyed-table>
            </binary-keyed-jdbc-store>
        </replicated-cache>
        <replicated-cache name="LuceneIndexesLocking" mode="SYNC"  >
            <binary-keyed-jdbc-store datasource="java:jboss/datasources/PicketLinkDatasource"
                      passivation="false" shared="true" purge="false">
                <property name="createTableOnStart" >true</property>
                <binary-keyed-table>
                    <id-column name="ID_COLUMN" type="VARCHAR(255)" />
                    <data-column name="DATUM" type="BLOB"/>
                </binary-keyed-table>
            </binary-keyed-jdbc-store>
        </replicated-cache>
    </cache-container>

У меня сложилось впечатление, что такая конфигурация создаст необходимые таблицы SQL при запуске сервера приложений. Однако я так не считаю.

Я делаю что-то не так здесь? Есть ли шаг, который мне не хватает в моей конфигурации?


person Shadowman    schedule 21.03.2014    source источник


Ответы (1)


Вы правы, создание таблицы будет запускаться автоматически при запуске кэша, однако по умолчанию кэши запускаются лениво. Существует вариант запуска EAGER:

<cache-container
    name="hibernateSearch"
    default-cache="LuceneIndexesData"
    jndi-name="java:jboss/infinispan/hibernateSearch"
    start="EAGER">

    <transport lock-timeout="60000" />

    <replicated-cache name="LuceneIndexesMetadata"
        mode="SYNC"
        start="EAGER">
        <binary-keyed-jdbc-store
            datasource="java:jboss/datasources/PicketLinkDatasource"
            shared="true"
            passivation="false"
            purge="false">
            <property name="createTableOnStart">true</property>
            <binary-keyed-table>
                <id-column name="ID_COLUMN" type="VARCHAR(255)" />
                <data-column name="DATUM" type="BLOB" />
            </binary-keyed-table>
        </binary-keyed-jdbc-store>
    </replicated-cache>

    <replicated-cache name="LuceneIndexesData"
        mode="SYNC"
        start="EAGER">
        <binary-keyed-jdbc-store
            datasource="java:jboss/datasources/PicketLinkDatasource"
            shared="true"
            passivation="false"
            purge="false">
            <property name="createTableOnStart">true</property>
            <binary-keyed-table>
                <id-column name="ID_COLUMN" type="VARCHAR(255)" />
                <data-column name="DATUM" type="BLOB" />
            </binary-keyed-table>
        </binary-keyed-jdbc-store>
    </replicated-cache>

    <replicated-cache name="LuceneIndexesLocking"
        mode="SYNC"
        start="EAGER" />

</cache-container>

Я также удалил CacheStore для кэша LuceneIndexesLocking, так как вам не следует его использовать.

person Sanne    schedule 24.03.2014
comment
Превосходно! Мне пришлось внести пару незначительных изменений (ошибки с моей стороны), но это решение сработало. Для всех остальных с этой проблемой убедитесь, что вы используете standalone-full-ha.xml, а не просто standalone-full.xml, иначе вы не получите поддержку jGroups. Кроме того, мне пришлось изменить BLOB на BYTEA, потому что я использую PostgreSQL в качестве моей базы данных. Как только я внес эти изменения, все заработало, как и ожидалось. Таблицы базы данных были созданы правильно. - person Shadowman; 26.03.2014