Кластеризация Jackrabbit с базой данных H2 в смешанном режиме

У меня есть система Magnolia CMS, и я пытаюсь настроить кластерный репозиторий для рабочей области с пользовательским контентом. У нас будет автор и общедоступный экземпляр, каждый из которых имеет выделенную базу данных MYSQL для репозитория по умолчанию для магнолии. Пользовательский контент должен храниться в базе данных h2, которая будет расположена в общем каталоге. Мы не можем запустить базу данных h2 напрямую в режиме сервера, поэтому подключения к базе данных h2 будут настроены как смешанный режим с флагом AUTO_SERVER=true (см. http://www.h2database.com/html/features.html#auto_mixed_mode).

Инициализация репозиториев безупречна. После сохранения данных в кластерном репозитории следующая перезагрузка останавливается/зависает на этапе загрузки кластерного репозитория (см. лог).

Я пропустил конфигурацию? Возможно ли вообще использовать h2 в смешанном режиме для кластеризации jackrabbit?

репозиторий.xml:

<JCR>
    <RepositoryMapping>
        <Map name="userGeneratedContent" repositoryName="magnoliacluster" workspaceName="userGeneratedContent" />
        <Map name="website" repositoryName="magnolia" workspaceName="website" />
        <Map name="config" repositoryName="magnolia" workspaceName="config" />
        <Map name="users" repositoryName="magnolia" workspaceName="users" />
        <Map name="userroles" repositoryName="magnolia" workspaceName="userroles" />
        <Map name="usergroups" repositoryName="magnolia" workspaceName="usergroups" />
        <Map name="mgnlSystem" repositoryName="magnolia" workspaceName="mgnlSystem" /> <!-- System internal data -->
        <Map name="mgnlVersion" repositoryName="magnolia" workspaceName="mgnlVersion" /> <!-- magnolia version workspace -->
    </RepositoryMapping>

    <!-- magnolia default repository -->
    <Repository name="magnolia" provider="info.magnolia.jackrabbit.ProviderImpl" loadOnStartup="true">
        <param name="configFile" value="${magnolia.repositories.jackrabbit.config}" />
        <param name="repositoryHome" value="${magnolia.repositories.home}/magnolia" />
        <!-- the default node types are loaded automatically
            <param name="customNodeTypes" value="WEB-INF/config/repo-conf/nodetypes/magnolia_nodetypes.xml" />
        -->
        <param name="contextFactoryClass" value="org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory" />
        <param name="providerURL" value="localhost" />
        <param name="bindName" value="${magnolia.webapp}" />
        <workspace name="website" />
        <workspace name="config" />
        <workspace name="users" />
        <workspace name="userroles" />
        <workspace name="usergroups" />
        <workspace name="mgnlSystem" />
        <workspace name="mgnlVersion" />
    </Repository>

    <!-- magnolia cluster repository -->
    <Repository name="magnoliacluster" provider="info.magnolia.jackrabbit.ProviderImpl" loadOnStartup="true">
        <param name="configFile" value="${magnolia.repositories.jackrabbit.cluster.config}" />
        <param name="repositoryHome" value="${magnolia.repositories.home}/magnoliacluster" />
        <!-- the default node types are loaded automatically
            <param name="customNodeTypes" value="WEB-INF/config/repo-conf/nodetypes/magnolia_nodetypes.xml" />
        -->
        <param name="contextFactoryClass" value="org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory" />
        <param name="providerURL" value="localhost" />
        <param name="bindName" value="cluster-${magnolia.webapp}" />
        <workspace name="userGeneratedContent" />
    </Repository>
</JCR>

кластерный-jackrabbit-bundle-h2-search.xml:

<Repository>
    <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
        <param name="url" value="jdbc:h2:/PATH/TO/db;AUTO_SERVER=TRUE"/>
        <param name="schemaObjectPrefix" value="fs_"/>
        <param name="user" value="sa"/>
        <param name="password" value="sa"/>
    </FileSystem>
    <Security appName="magnolia">
        <SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" />
        <AccessManager
            class="org.apache.jackrabbit.core.security.DefaultAccessManager">
        </AccessManager>
        <LoginModule
            class="info.magnolia.jaas.sp.jcr.JackrabbitAuthenticationModule">
        </LoginModule>
    </Security>
    <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
        <param name="url" value="jdbc:h2:/PATH/TO/db;AUTO_SERVER=TRUE"/>
        <param name="schemaObjectPrefix" value="datastore_"/>
        <param name="user" value="sa"/>
        <param name="password" value="sa"/>
    </DataStore>
    <Workspaces rootPath="${rep.home}/workspaces"
        defaultWorkspace="default" />
    <Workspace name="default">
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${wsp.home}/default" />
        </FileSystem>
        <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager">
            <param name="url" value="jdbc:h2:/PATH/TO/db;AUTO_SERVER=TRUE"/>
            <param name="schemaObjectPrefix" value="ws_${wsp.name}_"/>
            <param name="user" value="sa"/>
            <param name="password" value="sa"/>
        </PersistenceManager>
        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
            <param name="path" value="${wsp.home}/index" />
            <param name="useCompoundFile" value="true" />
            <param name="minMergeDocs" value="100" />
            <param name="volatileIdleTime" value="3" />
            <param name="maxMergeDocs" value="100000" />
            <param name="mergeFactor" value="10" />
            <param name="maxFieldLength" value="10000" />
            <param name="bufferSize" value="10" />
            <param name="cacheSize" value="1000" />
            <param name="forceConsistencyCheck" value="false" />
            <param name="autoRepair" value="true" />
            <param name="queryClass" value="org.apache.jackrabbit.core.query.QueryImpl" />
            <param name="resultFetchSize" value="100" />
            <param name="extractorPoolSize" value="3" />
            <param name="extractorTimeout" value="100" />
            <param name="extractorBackLogSize" value="100" />
            <!-- needed to highlight the searched term -->
            <param name="supportHighlighting" value="true"/>
        </SearchIndex>
        <WorkspaceSecurity>
            <AccessControlProvider
                class="info.magnolia.cms.core.MagnoliaAccessProvider" />
        </WorkspaceSecurity>
    </Workspace>
    <Versioning rootPath="${rep.home}/version">
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${rep.home}/workspaces/version" />
        </FileSystem>
        <PersistenceManager
                class="org.apache.jackrabbit.core.persistence.bundle.H2PersistenceManager">
            <param name="url" value="jdbc:h2:${rep.home}/version/db" />
            <param name="schemaObjectPrefix" value="version_" />
        </PersistenceManager>
    </Versioning>
    <Cluster>
        <Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal">
            <param name="driver" value="org.h2.Driver" />
            <param name="url" value="jdbc:h2:/PATH/TO/db;AUTO_SERVER=TRUE"/>
            <param name="schemaObjectPrefix" value="journal_"/>
            <param name="databaseType" value="h2"/>
            <param name="user" value="sa"/>
            <param name="password" value="sa"/>
        </Journal>
    </Cluster>
</Repository>

бревно:

---------------------------------------------
MAGNOLIA LICENSE
---------------------------------------------
Version number : 5.3.5
Build          : 4. November 2014 (rev. of UNKNOWN)
Edition        : Enterprise Edition
Provider       : Magnolia International Ltd. ([email protected])
2016-07-27 11:17:59,919 INFO  info.magnolia.cms.beans.config.ConfigLoader       : Initializing content repositories
2016-07-27 11:17:59,922 INFO  info.magnolia.repository.DefaultRepositoryManager : Loading JCR
2016-07-27 11:17:59,931 INFO  info.magnolia.repository.DefaultRepositoryManager : Loading JCR magnolia
2016-07-27 11:17:59,951 INFO  info.magnolia.jackrabbit.ProviderImpl             : Loading repository at /PATH/author/repositories/magnolia (config file: /PATH/WEB-INF/config/repo-conf/jackrabbit-bundle-h2-search.xml) - cluster id: "<unset>"
Jul 27, 2016 11:18:00 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /PATH/webapps/manager
Jul 27, 2016 11:18:00 AM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Jul 27, 2016 11:18:00 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /PATH/webapps/manager has finished in 417 ms
2016-07-27 11:18:02,174 INFO  info.magnolia.repository.DefaultRepositoryManager : Loading JCR magnoliacluster
2016-07-27 11:18:02,174 INFO  info.magnolia.jackrabbit.ProviderImpl             : Loading repository at /PATH/author/repositories/magnoliacluster (config file: /PATH/WEB-INF/config/repo-conf/clustered-jackrabbit-bundle-h2-search.xml) - cluster id: "<unset>"

PS: я не уверен, почему он говорит «идентификатор кластера: «»». Хотя я установил его как org.apache.jackrabbit.core.cluster.node_id в моем файле свойств.


person Robotregent    schedule 27.07.2016    source источник


Ответы (1)


Со следующей вики-страницы:

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

Идентификатор кластера можно указать либо в файле свойств (самый удобный способ), либо в менеджере постоянства в конфигурации кластера (используются оба способа в прикрепленных файлах)

Поскольку вы не указали идентификатор кластера в файле конфигурации jackrabbit выше, не могли бы вы проверить, содержит ли он ваш файл magnolia.properties? Если нет, просто установите уникальное значение для каждого экземпляра Magnolia, обращающегося к кластеру JCR.

person Nicolas Barbé    schedule 02.08.2016