io.vertigo.dynamo.plugins.search.solr.embedded.EmbeddedSolrSearchServicesPlugin.java Source code

Java tutorial

Introduction

Here is the source code for io.vertigo.dynamo.plugins.search.solr.embedded.EmbeddedSolrSearchServicesPlugin.java

Source

/**
 * vertigo - simple java starter
 *
 * Copyright (C) 2013, KleeGroup, direction.technique@kleegroup.com (http://www.kleegroup.com)
 * KleeGroup, Centre d'affaire la Boursidiere - BP 159 - 92357 Le Plessis Robinson Cedex - France
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.vertigo.dynamo.plugins.search.solr.embedded;

import io.vertigo.commons.codec.CodecManager;
import io.vertigo.commons.locale.LocaleManager;
import io.vertigo.commons.resource.ResourceManager;
import io.vertigo.dynamo.plugins.search.solr.AbstractSolrSearchServicesPlugin;
import io.vertigo.lang.Assertion;

import java.io.File;
import java.net.URL;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
import org.apache.solr.core.CoreContainer;

//Vrifier
/**
 * Gestion de la connexion au serveur Solr en mode embarqu.
 *
 * @author pchretien
 */
public final class EmbeddedSolrSearchServicesPlugin extends AbstractSolrSearchServicesPlugin {
    /** url du serveur solr.  */
    private final URL solrHomeURL;
    /** Conteneur multi coeurs - c'est  dire multi index*/
    private final CoreContainer coreContainer;

    /**
     * Constructeur
     * @param solrHome URL du serveur SOLR
     * @param cores Liste des indexes
     * @param rowsPerQuery Nombre d'lment retourn par query
     * @param codecManager Manager des codecs
     * @param localeManager Manager des messages localiss
     */
    @Inject
    public EmbeddedSolrSearchServicesPlugin(@Named("home") final String solrHome,
            @Named("cores") final String cores, @Named("rowsPerQuery") final int rowsPerQuery,
            final CodecManager codecManager, final LocaleManager localeManager,
            final ResourceManager resourceManager) {
        super(cores, rowsPerQuery, codecManager);
        Assertion.checkArgNotEmpty(solrHome);
        // ---------------------------------------------------------------------
        solrHomeURL = resourceManager.resolve(solrHome);
        coreContainer = createCoreContainer(solrHomeURL);
    }

    /** {@inheritDoc} */
    @Override
    public void stop() {
        coreContainer.shutdown();
    }

    /** {@inheritDoc} */
    @Override
    protected SolrServer createSolrServer(final String core) {
        Assertion.checkArgument(coreContainer.getCoreNames().contains(core),
                "core {0} non reconnu lors du dmarrage du container", core);
        return new EmbeddedSolrServer(coreContainer, core);
    }

    private static CoreContainer createCoreContainer(final URL solrHomeURL) {
        Assertion.checkNotNull(solrHomeURL);
        //---------------------------------------------------------------------
        final File home = new File(solrHomeURL.getFile());
        Assertion.checkArgument(home.exists() && home.isDirectory(),
                "Le SolrHome : {0} n''existe pas, ou n''est pas un rpertoire.", home.getAbsolutePath());
        Assertion.checkArgument(home.canWrite(),
                "L''application n''a pas les droits d''criture sur le SolrHome : {0}", home.getAbsolutePath());
        final File solrXml = new File(home, "solr.xml");
        final CoreContainer container;
        try {
            container = CoreContainer.createAndLoad(home.getAbsolutePath(), solrXml);
            //System.out.println("Solr Data In: " + home.getAbsolutePath() + "\\#CORE_NAME#\\data\\index\\");
            return container;
        } catch (final Exception e) {
            throw new RuntimeException(e);
        }
    }
}